Python代码循环,当我不想要它时

时间:2018-01-26 13:44:07

标签: python

x = 0
while True:
  choice = int(input ("Choose 1 or 2"))

  if choice == 2:
    print("You chose 2")
    x == 1
  if choice == 1:
    print("You chose 1")
    x == 1
  if choice >2: 
    print("I said 1 or 2.")
    x == 0
  if choice <1:
    print("I said 1 or 2")
    x == 0

因此,如果我选择1或2,我希望它停止,但如果我选择其他情况,我希望它循环,但它总是循环,无论有人可以帮助这个?

4 个答案:

答案 0 :(得分:2)

你必须从无限循环中明确break

while True:
    choice = int(input("Choose 1 or 2")) 
    if choice in (1, 2):
        print("You chose {}".format(choice))
        break
    print("I said 1 or 2")

另请注意,x == 1不是赋值,而是一个布尔表达式 - 它本身 - 不执行任何操作,除非在未定义x时引发错误。

答案 1 :(得分:1)

如上所述,您的代码具有无限while True循环。循环条件是固定的,没有break语句,所以它自然会永远循环。

  1. 如果你的目标是在x == 1时退出,那么你需要在循环条件下测试它。 while True永远不会停止。确保您使用x 分配x = 1 - 一个等号。

    x = 0
    while not x:
      choice = int(input ("Choose 1 or 2"))
    
      if choice == 2:
        print("You chose 2")
        x = 1
      if choice == 1:
        print("You chose 1")
        x = 1
      if choice >2: 
        print("I said 1 or 2.")
      if choice <1:
        print("I said 1 or 2")
    
  2. 或者,您可以明确地break退出循环。那么你甚至不需要x

    while True:
      choice = int(input ("Choose 1 or 2"))
    
      if choice == 2:
        print("You chose 2")
        break
      if choice == 1:
        print("You chose 1")
        break
      if choice >2: 
        print("I said 1 or 2.")
      if choice <1:
        print("I said 1 or 2")
    
  3. 第三个选项是在循环条件中检查choice

    choice = None
    while choice not in {1, 2}:
      choice = int(input ("Choose 1 or 2"))
    
      if choice == 2:
        print("You chose 2")
      if choice == 1:
        print("You chose 1")
      if choice >2: 
        print("I said 1 or 2.")
      if choice <1:
        print("I said 1 or 2")
    
  4. 有一些不必要的重复。我建议稍微重构一下,以消除重复的代码。

    while True:
      choice = int(input("Choose 1 or 2"))
    
      if choice in {1, 2}:
        break
      else:
        print("I said 1 or 2.")
    
    print("You chose " + str(choice))
    

答案 2 :(得分:0)

您的代码中有多处错误。

While True将完全执行此操作:它将循环直到True变为False。问题是你的代码无法做到这一点,即无限循环。

您可以在成功输入后使用break,因为已经提供了其他答案,或者您可以执行以下操作:

x = 0
flag = True

while flag:
    choice = int(input('Choose 1 or 2: '))
    if choice in [1, 2]:
        print('You chose', choice)
        x = choice
        flag = False
    else:
        print('I said 1 or 2.')

最初,布尔值flag设置为True。 while循环检查条件并看到flag设置为true,因此它进入循环。

将采用用户的输入,将其分配给变量choiceif choice in [1, 2]:是检查输入是1还是2的简单方法。它会检查choice是否匹配列表[1, 2]中的任何元素。如果是,则用户的输入有效。

成功输入后,将输入分配给x,然后将标志设置为False。 while循环的下一次迭代将再次检查条件,但是看到flag设置为False,并且将自己从循环中分离出来。

将打印无效输入,但会将flag保持为True,从而启动循环的另一次迭代。

您的代码还包含x == 0,您的意思是x = 0。您打算做的是为变量x赋值,但==是一个布尔运算符,用于检查两个布尔表达式之间的相等性。您想要使用赋值运算符=

答案 3 :(得分:-1)

您可以添加中断语句

x = 0
while True:
  choice = int(input ("Choose 1 or 2"))

  if choice == 2:
    print("You chose 2")
    x=1
    break
  if choice == 1:
    print("You chose 1")
    x=1
    break 
  if choice >2: 
    print("I said 1 or 2.")
    x=0
  if choice <1:
    print("I said 1 or 2")
    x=0