-5

这是一个简单的菜单。如果我输入错误的数字或没有脚本崩溃。

print "1) menu 1"
print "2) menu 2"
print "q) quit"

choice = raw_input("?> ")

while choice is not 'q' or 'Q':

脚本从这里循环打印消息

    if choice == '1':   
        print "menu1" 

相同的循环在这里

    elif choice == '2':
        print "menu2"  

    else:
        print "invalid choice"
        # want to start the input question again from here

print "breaked out of the loop" 
4

2 回答 2

3

while choice is not 'q' or 'Q':被解析为

while (choice is not 'q') or 'Q':

因此,无论 的值如何choiceQ非空字符串都将评估为真。由于您永远不会更改choice循环中的值,因此它永远不会终止。你想要更多类似的东西

choice = ''
while choice not in ['q', 'Q']:
    print "1) menu 1"
    print "2) menu 2"
    print "q) quit"

    choice = raw_input("?> ")
    if choice == "1":
        print "You chose 1"
    elif choice == "2":
        print "You chose 2"

为什么你不想使用is not

>>> foo = 'Q'.lower()
>>> foo
'q'
>>> foo == 'q'
True
>>> foo is 'q'
False

至于其他关于确定choice是大写还是小写“q”的建议变体:选择您认为最易读的那个。您的程序将花费更多的时间等待您按下一个键,而不是确定它是哪个键,所以不要担心哪个键比其他键快一秒。

于 2013-06-20T22:43:50.320 回答
2

您可能应该使用一个else子句来捕获任何无效的选择:

print "1) menu 1"
print "2) menu 2"

choice = raw_input("?> ")

if choice == 1:   
     print "menu1" 
elif choice == 2:
    print "menu2
else:
    print "Not a valid choice."

您还可以使用 while 循环不断重复,直到做出有效的选择。

于 2013-06-20T22:20:01.530 回答