就像上面提到的 Blue Ice 一样,问题在于这一行:
while(choice>3 or choice<1):
问题是,如果选择大于 3 或小于 1,则仅运行此 while 循环,但在此循环内,您正在测试此条件:
while (((choice == 1 or choice == 2 or choice == 3) and (count < 10))):
此代码始终无法访问,因为要运行第一个 while 循环,它需要 1、2 或 3 以外的数字才能进入循环。这意味着这个while循环永远不会运行,因为您要测试的第一个条件被保证为假,因此您和比较永远不会评估为真,因为True and False is False
无论如何
就我个人而言,我不会像您那样创建输入提示,因为它不像其他选项那样易于维护。可以使用字典在 python 中创建菜单,这是我喜欢的方式。您所做的是将键存储为选项,将值存储为对您要执行的函数的引用。我更喜欢这个,因为它消除了在循环中设置所有布尔测试的需要,并且它使添加或删除选项更容易。
创建您要求的菜单的代码看起来像这样。
options = { 1 : option_1,
2 : option_2,
3 : option_3
}
user_input = int(raw_input("1, 2, or 3"))
#The () are required because otherwise you will get the memory address of the function and the funciton itself won't run
options[user_input]()
这当然意味着您必须将代码放在函数中(要做到这一点,语法看起来像这样)
def function():
do stuff
注意在字典中函数是如何在没有 () 的情况下存储的。这样做是因为没有括号,它是对函数本身的引用(如果您执行打印,您会看到它为您提供内存地址),使用括号,函数将执行。然后你只需通过像这样在字典查找中添加括号来调用该函数options[user_input]()
对不起,我不完全理解你在 10 次之后的提示是做什么的,因为你应该在每次他们搞砸时提示他们更正他们的输入,但我相信使用这种方法来做你想做的事看起来像这样:
#Count to see how many times they mess up
count = 0
#Options dictionary
options = { 1 : option_1,
2 : option_2,
3 : option_3
}
#I am using Python 3 BTW
print("Enter 1, 2 or 3 ")
#And I am assuming they will give good input
user_input = int(raw_input("1, 2, or 3"))
#This more closly mimics what you are doing but like I said I would avoid this so you don't have to hard code how many options you have
#while((user_input is not 1) or (user_input is not 2) or (user_input is not 3))
#try this
#It makes sure you are not out of bounds for an any number of elements
while(user_input < 0 and user_input > len(options)):
#if you are ask for new input
user_input = int(raw_input("1, 2, or 3"))
#increment count
count += 1
#check if they messed up 10 times
if(count == 10):
print("Enter 1, 2, or 3")
#reset count so it will tell them on the next 10th time
count = 0
#to break the while loop above you must have valid input so call the function
options[user_input]()
#And of course you need to define you functions to do the different options
def option_1():
do option_1 stuff
def option_2():
do option_2 stuff
def option_3():
do option_3 stuff
同样,虽然这与您所拥有的非常不同,但是以这种方式添加新选项要容易得多,因为您只需要添加一个新函数并将选项添加到字典中,您不必担心每个选项的测试你有。
TL;DR:Python 字典是输入的方式,不要针对每种情况进行测试