为什么我的while循环没有终止?

时间:2016-04-16 16:55:50

标签: python python-3.x while-loop

我正在尝试为我的计算机编程课完成关于pygame的任务;我对这种事情并不是特别精通,所以如果我在提问时犯了一些错误,请原谅。

我正在尝试修改教科书中的一些源代码,目的是允许用户设置一组块在窗口中移动的速度,以及位置更新之间的延迟。在程序的开头是一个while循环,旨在让用户在预定的设置之间进行选择,或者创建自己的。

choice = ""
while choice != "E" or "e" or "Elect" or "elect" or "ELECT" or "C" or "c" or "Create" or "create" or "CREATE" :
    choice = input("Would you like to elect a speed setting for the vectors, or create your own? (Type 'E' for elect or 'C' for create) ")

当我尝试在shell中运行程序时,在输入'e'时,它再次给了我while循环的输入语句。为什么“选择”没有被设置为我的输入?

3 个答案:

答案 0 :(得分:2)

if choice != "E" or "e"可以明确转换为if (choice != "E") or ("e")。换句话说,无论choice != "E"是真还是假,整个表达式总是返回True,因为"e"不是空字符串,所以始终求值为True

>>> if True or "e":
...     print("entered")
entered

>>> if False or "e":
...     print("entered")
entered

你应该做的是:

while choice.lower() not in ("e", "elect", "c", "create"):

答案 1 :(得分:1)

您的其他or评价为True。所以,当条件分解为while choice != 'E' or True时,你将不会终止。您需要反复使用if choice != 'string',或者最好只检查while choice not in list_of_bad_strings

答案 2 :(得分:1)

尝试:

choice = ""
while choice.lower() not in ("e", "elect", "c", "create"):
    choice = input("Would you like to elect a speed setting for the vectors,, create your own? (Type 'E' for elect, 'C' for create) ")

<强> WHY

您遇到的问题是choice != "E" or "e" or ...表示(choice != "E") or ("e") or (...)"e"评估为True,因为它不是None0False或空序列。所以你的条件总是如此。