给予';语法错误:无效语法';以python 3的格式

给予';语法错误:无效语法';以python 3的格式,python,format,syntax-error,python-3.7,Python,Format,Syntax Error,Python 3.7,我正在尝试创建一个函数,在这个函数中,你输入选项,用户选择一个 Python一直在第6行和第9行给我一条错误消息,格式是 我有python 3.7.4 def choice(choices, message): print(message) print("Do you want to :") answer = "" for i, x in enumerate(choices): print(f"{i}: {x}") while answer

我正在尝试创建一个函数,在这个函数中,你输入选项,用户选择一个

Python一直在第6行和第9行给我一条错误消息,格式是

我有python 3.7.4

def choice(choices, message):
    print(message)
    print("Do you want to :")
    answer = ""
    for i, x in enumerate(choices):
        print(f"{i}: {x}")
    while answer > len(choices):
        while type(answer) != int: 
            answer = input(f"Enter a number between 1 - {len(choices)}:  ")
            try:
                answer = int(answer)
            except:
                pass

choice(["run", "or hide"], "You are being hunted")

我在代码中看到的一个错误是

while answer > len(choices):
您无法判断
answer
是否大于
choices
的长度,因为
answer
是字符串,而
len(choices)
是整数。您也没有用任何值填充
答案
。要在python中从用户处获取输入,我们可以使用名为
input()
的函数。可以替换以下行:

print("Do you want to :")
answer = ""
这一行:

answer = input("Do you want to: ")
此行以字符串形式从用户获取输入,然后将其存储在变量
answer
中。然后,我们必须记住在使用变量
answer
时使用
int()
函数。稍后我会展示这个

另一个是while循环。如果要在while循环中组合条件,则不能将它们作为单独的循环,因为这只会使一个循环位于另一个循环的内部。您可以将条件与单词
组合在一起。现在循环应该是这样的:

while answer > len(choices) or type(answer) != int: 
    answer = input(f"Enter a number between 1 - {len(choices)}:  ")
    try:
        answer = int(answer)
    except:
        pass
def choice(choices, message):
    print(message)
    for i, x in enumerate(choices):
        print(f"{i}: {x}")
    answer = input("What do you want to do: ")
    while int(answer) > len(choices): 
        answer = input(f"Enter a number between 0 - {len(choices) - 1}:  ")

choice(["run", "or hide"], "You are being hunted")
但这仍然是不完整的。这里的问题是,在我们知道答案是否为整数之前,它正在测试答案是否大于选项的长度。然后我们必须改变这两个条件

while type(answer) != int or answer > len(choices): 
    answer = input(f"Enter a number between 1 - {len(choices)}:  ")
    try:
        answer = int(answer)
    except:
        pass
现在,
try
是不必要的,所以我们可以删除它,而
answer=int(answer)
是没有意义的,所以我们也删除了它。我们也不需要数字测试条件。我们以以下循环结束:

while answer > len(choices): 
    answer = input(f"Enter a number between 0 - {len(choices) - 1}:  ")
整个代码应该如下所示:

while answer > len(choices) or type(answer) != int: 
    answer = input(f"Enter a number between 1 - {len(choices)}:  ")
    try:
        answer = int(answer)
    except:
        pass
def choice(choices, message):
    print(message)
    for i, x in enumerate(choices):
        print(f"{i}: {x}")
    answer = input("What do you want to do: ")
    while int(answer) > len(choices): 
        answer = input(f"Enter a number between 0 - {len(choices) - 1}:  ")

choice(["run", "or hide"], "You are being hunted")

请为您的错误提供完整的堆栈。您确定您实际使用的是Python 3.7.4吗?我仍然在print语句(第4行)的最后一个引号处看到错误