【问题标题】:While loop not breaking when condition met条件满足时循环不中断
【发布时间】:2015-02-23 09:57:30
【问题描述】:

我有一个 Python 代码,它试图通过询问一些问题来猜测用户的年龄。 问题是当用户的年龄等于变量时,while 循环不会中断。这是我的代码:

age = 50
guess = raw_input("Give your age: ")
while guess != age:
  print "Are you above ",age,"?"
  x = raw_input()
  while (x != "yes") and (x != "YES") and (x != "no") and (x != "NO"):
    print "Answer with yes/YES, no/NO"
    x = raw_input()
  if (x == "yes") or (x == "YES"):
    age = 2*age-age/2
  else:
    age = age/2

  if age == guess:
    break

print "Your age is ",age

【问题讨论】:

  • guess 是一个字符串;将其转换为整数:guess = int(raw_input("Give your age: ")

标签: python python-2.7 loops while-loop break


【解决方案1】:

您需要转换为int,raw_input 返回一个字符串,因此您将string 与永远不会评估为True 的int 进行比较:

guess = int(raw_input("Give your age: "))

age == guess:
^^      ^^^
int     str

不确定代码的其余部分在做什么,但您可以使用in 来替换和:

while x not in  {"yes","YES","no", "NO"}:

你的 if 语句中也不需要括号:

if  x == "yes" or x == "YES":

【讨论】:

  • @TheodoreGlampedakis,别担心,我想这是对分搜索?
  • @TheodoreGlampedakis,剩下的就交给你了 ;) 你可能应该重命名一些变量,因为它们有点令人困惑
  • 是的。再次感谢!
【解决方案2】:

您必须在每次循环时定义中断条件。

在您的代码中,您只定义了一次guess。所以它的值不会改变。

请在while循环中添加guess,使其值发生变化,您将达到中断条件。

【讨论】:

  • 这是不正确的,年龄在循环中发生变化,所以它会达到中断条件
【解决方案3】:

最好改变无限迭代的条件。

# while guess != age:
while True:

【讨论】:

  • while guess != age:if age == guess: break 明显是多余的。他可以摆脱他们中的任何一个。无论如何,这不是递归,而是迭代。
  • @PacoAbato 表示错误。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2017-08-01
  • 2020-11-29
  • 1970-01-01
相关资源
最近更新 更多