while循环有两个变量(使用python中的“或”部分)

时间:2017-11-16 22:39:38

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

我编写了一个程序,它为登录菜单提供了起始基础。它应该只允许两个输入; “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!")

2 个答案:

答案 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")