我正在尝试为我的计算机编程课完成关于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循环的输入语句。为什么“选择”没有被设置为我的输入?
答案 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
,因为它不是None
,0
,False
或空序列。所以你的条件总是如此。