Python函数和变量问题
到目前为止,我已经创建了此代码Python函数和变量问题,python,function,Python,Function,到目前为止,我已经创建了此代码 def print_slow(str): for letter in str: sys.stdout.write(letter) sys.stdout.flush() time.sleep(0.005) def menu(): print_slow("-------------[MENU]-------------") print(" ") print_slow("1) Enter
def print_slow(str):
for letter in str:
sys.stdout.write(letter)
sys.stdout.flush()
time.sleep(0.005)
def menu():
print_slow("-------------[MENU]-------------")
print(" ")
print_slow("1) Enter a sentence.")
print(" ")
print_slow("2) Find the position of a word.")
print(" ")
print_slow("--------------------------------")
print(" ")
print_slow(">>> ")
choice = str(input(" "))
print(" ")
time.sleep(0.5)
if choice == "1":
option1()
if choice == "2":
option2()
def option1():
print_slow("Enter sentence")
sentence = str(input(": "))
print(" ")
menu()
def option2():
if not sentence:
print_slow("Please enter a sentence first!")
time.sleep(0.5)
print(" ")
else:
sentenceUppercase = sentence.upper()
[code goes on...]
基本上,当我测试它时,我先按选项2,它会给出输出“请先输入一个句子!”,确实如此
然后我按下菜单中的选项1,它会提示我输入一个句子(我把‘我的名字是bob’作为测试),它会这样做
输入句子后,我按下了选项2,它应该继续输入我的代码-相反,它会显示错误消息“请先输入一个句子!”强>
如何解决此问题???您正在设置函数内部的局部变量语句选项1
。此变量在option2
中不可见,因为它仅位于option1
中,并且在option1
完成后将被清除
如果要共享变量,需要至少在选项1
中将其定义为全局
:
def option1():
print_slow("Enter sentence")
global sentence
sentence = str(input(": "))
print(" ")
menu()
但是,请注意,使用全局变量通常是代码质量差的标志。在您的情况下,让option1
返回语句
到main
,并将其从main
传递到option2
您正在设置一个局部变量语句
内部函数option1
。此变量在option2
中不可见,因为它仅位于option1
中,并且在option1
完成后将被清除
如果要共享变量,需要至少在选项1
中将其定义为全局
:
def option1():
print_slow("Enter sentence")
global sentence
sentence = str(input(": "))
print(" ")
menu()
但是,请注意,使用全局变量通常是代码质量差的标志。在您的情况下,让option1
将语句
返回到main
,并将其从main
传递到option2
更有意义。您的问题在于为语句
赋值。因为您是在函数中赋值,所以当您离开该函数的作用域时,您将丢失该值。尝试使用全局
:
sentence = ''
def option1():
global sentence # <-- this maintains its value in global scope
print_slow("Enter sentence")
sentence = str(input(": "))
print(" ")
menu()
def option2():
global sentence # <-- and here
if not sentence:
print_slow("Please enter a sentence first!")
time.sleep(0.5)
print(" ")
else:
sentenceUppercase = sentence.upper()
句子=“”
def选项1()
全局语句#您的问题在于为语句
赋值。因为您是在函数中赋值,所以当您离开该函数的作用域时,您将丢失该值。尝试使用全局
:
sentence = ''
def option1():
global sentence # <-- this maintains its value in global scope
print_slow("Enter sentence")
sentence = str(input(": "))
print(" ")
menu()
def option2():
global sentence # <-- and here
if not sentence:
print_slow("Please enter a sentence first!")
time.sleep(0.5)
print(" ")
else:
sentenceUppercase = sentence.upper()
句子=“”
def选项1()
全局句子#你为什么需要时间。睡觉?这是我的代码的一部分,但这并不相关@nbroh你是否将句子
定义为全局变量?因为您向我们展示的代码应该给出一个错误,因为在函数选项2
中,您正在检查语句
的计算结果是否为真(或假),但是,从您的代码来看,语句
似乎没有在任何地方定义。换句话说,选项1
下的语句
是一个局部变量,与选项2
中的变量不同。您的变量语句存在范围问题。我已经完成了语句=“”
就在我的代码的第一行开始处,但错误仍然出现@nbrow您为什么需要时间。睡眠?这是我代码的一部分,但并不真正相关@nbroh您是否将句子定义为全局变量?因为您向我们展示的代码应该给出一个错误,因为在函数选项2
中,您正在检查语句
的计算结果是否为真(或假),但是,从您的代码来看,语句
似乎没有在任何地方定义。换句话说,option1
下的语句
是一个局部变量,与option2
中的变量不同。您的变量语句存在范围问题。我在第一行代码的开头就做了语句=“”
,但错误仍然出现@nbro