Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数和变量问题_Python_Function - Fatal编程技术网

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