我编写了一个程序,它为登录菜单提供了起始基础。它应该只允许两个输入; “1”或“2”。如果他们输入1,他们将继续作为现有用户,但如果他们输入2,他们将继续作为新用户。我有一个while循环来防止用户输入除这两个值之外的任何内容。
为什么代码只允许用户输入“1”来继续代码,而不是“2”。我已经在网上看了,但是我还没有看到人们编码或在while循环中的方式。任何人都可以对其进行必要的调整吗?感谢。
编辑:“bastelflp”的最佳回复。
#Program menu
YESorNo = input("""
[---------------------------------]
Welcome to the program!
[---------------------------------]
Are you an existing user?
1. [YES]
2. [NO]
-----------------------------------
Type [1] for "YES" or [2] for "NO".
""")
while YESorNo.strip() != ("1" or "2"):
YESorNo = input("""
[---------------------------------]
Welcome to the program!
[---------------------------------]
Are you an existing user?
1. [YES]
2. [NO]
-----------------------------------
Type [1] for "YES" or [2] for "NO".
""")
if YESorNo == "1":
print("Welcome back!")
elif YESorNo == "2":
print("Welcome!")
答案 0 :(得分:4)
YESorNo.strip() != ("1" or "2")
由于or
是运算符,因此在比较之前会对"1" or "2"
进行求值。字符串"1"
是真实的,因此"1" or "2"
的结果是"1"
。因此,原始表达式简化为YESorNO.strip() != "1"
。有关更多详细信息,我建议您阅读Python中的真实性。您还应该了解有关运营商评估顺序的更多信息。
要解决此问题,您可以改为:
YESorNo.strip() != "1" and YESorNo.strip() != "2"
或者这个:
not (YESorNo.strip() == "1" or YESorNo.strip() == "2")
或者这个:
YESorNo.strip() not in ["1", "2"]
前两个利用正确的操作评估顺序来做你想要的。最后一个选项使用一个选项列表进行比较,更接近原始代码。
答案 1 :(得分:3)
YESorNo.strip() != ("1" or "2")
这将按以下顺序进行评估;
首先是支架
YESorNo.strip() != "1"
然后是平等。
你需要这样做;
YESorNo.strip() not in ("1", "2")
或
not (YESorNo.strip() != "1" and YESorNo.strip() != "2")