【问题标题】:Using or in a while loop (Python)在while循环中使用或(Python)
【发布时间】:2014-01-20 21:52:43
【问题描述】:
variable1 = 0
while variable1 != "1" or variable1 != "2" or variable1 != "3":
    variable1 = input ("Enter variable1: ")
print("Succes")

即使变量被赋值为 1 或 2 或 3,我的代码也永远不会退出 while 循环。 我在这里遗漏了什么或做错了什么?我从来没有读过任何关于 Python 的文档说 or 语句在 while 循环中不起作用。根据命题演算,这应该是正确的,因为 True or False or False = True

顺便说一下,我知道我没有使用整数。

提前致谢!

【问题讨论】:

  • != to 在那里做什么? 杀了to!杀死to!杀死to! 不祥的诵经>
  • 当 variable1 = 'al;dfjakl;fkja;lkajdfj' 时会发生什么?
  • variable1 != to "1" 是语法错误。为什么里面有“to”?
  • @inspectorG4dget 那不应该在那里,我犯了一个奇怪的错字。我会解决的。
  • @Joe 那会是假的,不行,再次要求输入。

标签: python loops while-loop logic


【解决方案1】:

while 循环的条件将始终评估为 True,因为 variable1 将始终不等于 "1" 或不等于 "2"

相反,您需要在此处使用not in

variable1 = 0
while variable1 not in ("1", "2", "3"):
    varible1 = input("Enter variable1: ")
print("Succes")

但是,从您的代码结构来看,我认为您希望 variable1 是一个整数,而不是一个字符串。

如果是这样,那么您可以在 Python 3.x 上使用它:

variable1 = 0
while variable1 not in (1, 2, 3):
    varible1 = int(input("Enter variable1: "))
print("Succes")

或者,如果你使用的是 Python 2.x,你可以使用这个:

variable1 = 0
while variable1 not in (1, 2, 3):
    varible1 = int(raw_input("Enter variable1: "))
print "Succes"

【讨论】:

  • 最好使用集合而不是元组,以优化查找时间
  • 我运行它永不停息,不应该是(1,2,3)
  • @xndrme - 从他的 print 语法以及他开始与字符串进行比较的事实来看,我假设 OP 在 Python 3.x 上。如果是这样,input 将返回一个字符串对象。
  • @iCodez 好的,我在 2.7,我的错误:(
  • @inspectorG4dget - 实际上,选择如此之少,时差可以忽略不计。事实上,如果你用timeit.timeit 测试它,设置会更慢(在这种特定情况下)。
【解决方案2】:

while 循环的条件始终为真。为了使其为假,variable1 必须等于 "1""2""3",这对于单个字符串是不可能的。

>>> variable1 == "1"
>>>
>>> variable1 != "1"
False
>>> variable1 != "2"
True
>>> variable1 != "3"
True
>>> False or True or True
True # So the loop will continue execution

如果variable1 等于"1""2""3",您是否希望退出while 循环?

while not (variable1 == "1" or variable1 == "2" or variable1 == "3"):

如果variable1 等于"1""2""3",那么想象一下该条件将如何解决是很有用的:

while not (True or False or False):

while not (True):

while False: # Exit

【讨论】:

  • 我将如何改变它以使其正常工作?谢谢你的回答!
【解决方案3】:
  1. 你需要在while循环中更新变量
  2. 如果你使用input你需要比较int

variable1 = 0
while variable1 not in {1,2,3}:
    variable1 = input("Enter variable1: ")

print("Succes")

【讨论】:

  • 最好使用集合而不是列表,以优化查找时间
【解决方案4】:

您应该使用“和”而不是“或”。只要输入不是“1”且不是“2”且不是“3”,您就想继续要求输入。

【讨论】:

  • 我还不是 Python 程序员。虽然我的回答在逻辑上是有效的,但@xndrme 提供的解决方案更优雅。
【解决方案5】:

是的,使用and 有效:

variable1 = 0
while variable1 != "1" and variable1 != "2" and variable1 != "3":
    variable1 = input("Enter variable1: ")
print("Success")`

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2014-11-02
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多