Python 3.x 你能创建一个改变的输入吗?

Python 3.x 你能创建一个改变的输入吗?,python-3.x,input,Python 3.x,Input,我正在创建一个类似测验的程序,并决定将“while True”循环函数(如下所示)定义为一个函数。为此,我需要更改输入。然而,无论我重新设置问题的格式多少次,我似乎都无法做到这一点。代码如下: def whiletrueloop(): while True: choicenumber=input(choice) if choicenumber.lower() not in (options): print(repeatsentenc

我正在创建一个类似测验的程序,并决定将“while True”循环函数(如下所示)定义为一个函数。为此,我需要更改输入。然而,无论我重新设置问题的格式多少次,我似乎都无法做到这一点。代码如下:

def whiletrueloop():
    while True:
        choicenumber=input(choice)
        if choicenumber.lower() not in (options):
            print(repeatsentence)
        else:
            break

choice=("What is bigger, an elephant or a mouse?")
choicenumber=("choice1")
options=('elephant','mouse')
repeatsentence=("That isn't an answer!")
whiletrueloop()


if choicenumber=="elephant":
    print("Correct!")
elif choicenumber=="mouse":
    print("Wrong!")

我认为代码的主要问题与choicenumber变量的范围有关。将其设置为带有行的全局变量

choicenumber = ("choice1")
在函数中,它在本地分配给输入值,但在代码末尾的if-else决策中使用的是全局范围变量。您可以通过在代码末尾插入此选项来测试这一点:

elif choicenumber == "choice1":
    print("Global!")
您将始终显示“全局”,因为函数中的局部值将被忽略,而不是全局值

有几种方法可以解决这个问题。一种是将choicenumber变量声明为函数中的全局变量:

while True:
    global choicenumber
    choicenumber=input(choice)
然而,使用全局变量被认为是一种不好的做法,其原因可以查阅

另一种方法是使用函数返回choicenumber的值以响应函数调用:

def whiletrueloop():
    while True:
        choicenumber=input(choice)
        if choicenumber.lower() not in (options):
            print(repeatsentence)
        else:
            return choicenumber

choice=("What is bigger, an elephant or a mouse?")
options=('elephant','mouse')
repeatsentence=("That isn't an answer!")

choicenumber = whiletrueloop()

if choicenumber=="elephant":
    print("Correct!")
elif choicenumber=="mouse":
    print("Wrong!")