到目前为止我已经创建了这段代码......
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,应该继续我的代码 - 而是提供错误信息'请先输入一个句子!'
我该如何解决这个问题?
答案 0 :(得分:2)
您在函数sentence
中设置了本地变量option1
。此变量在option2
中不可见,因为它仅位于option1
内,并且会在option1
完成后清除。
如果您想共享变量,则需要至少在global
中将其定义为option1
:
def option1():
print_slow("Enter sentence")
global sentence
sentence = str(input(": "))
print(" ")
menu()
但请注意,使用全局变量通常表示代码质量不佳。在您的情况下,让option1
返回sentence
到main
并将其从main
传递给option2
会更有意义。
答案 1 :(得分:1)
您的问题在于为sentence
分配值。由于您在函数中分配它,当您离开该函数的范围时,您将丢失该值。尝试使用global
:
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()
或者您可以使用参数来回传递它。