【问题标题】:Python - While loop won't stopPython - While 循环不会停止
【发布时间】:2015-12-30 03:50:41
【问题描述】:

我的代码似乎可以在 WHILE 循环之前运行。这个想法是让计算机通过从先前猜测的最低和最高数量中选择一个中间数字来尝试猜测玩家 1('P1')输入的数字。我不知道为什么它一直在循环!

import random

P1 = raw_input("The number should be between 0 to 100: \n") 
P1 = int(P1)
previousguess = []
count2 = 0

for c in range(2):
    cg2 = random.randint(0,100)
    print "Computer has guessed: %d" %cg2
    if P1 != cg2:
        previousguess.append(cg2) #adding the guess into "Previous Guess" list
        print previousguess

mn = min(previousguess)
mx = max(previousguess)

while True:
    if P1 != cg2:
        cg2 = (mn+mx)/2 #guess based on middle of highest and lowest
        print "Computer has guessed: %d" %cg2
        previousguess.append(cg2)
        count2+=1

else:
    print "The Computer has guessed it in %d times" %count2

【问题讨论】:

  • 你永远不会终止循环。当计算机猜测正确时,if 条件失败,程序永远什么都不做。
  • 嗨..感谢您的 cmets..我已经尝试了给出的每个建议,但仍然无法停止 while 循环..它只计算了中间一次并继续无限循环该结果。
  • 正如我在回答中所说,您必须正确更新 mn & mx。您的原始代码根本不会更新它们,并且它使用的更新对于二进制搜索算法无效。如果您需要更多帮助,则必须遵循指南 - 最值得注意的是,发布您的新代码。

标签: python while-loop infinite-loop


【解决方案1】:

因为您使用的是while True,而True 总是等于True,所以这个循环永远不会停止。你可以这样做:

while True:
    if P1 != cg2:
        cg2 = (mn+mx)/2 #guess based on middle of highest and lowest
        print "Computer has guessed: %d" %cg2
        previousguess.append(cg2)
        count2+=1

    else:
        print "The Computer has guessed it in %d times" %count2 
        break # use break to break the loop

或者像这样:

while P1 != cg2:
    cg2 = (mn+mx)/2 #guess based on middle of highest and lowest
    print "Computer has guessed: %d" %cg2
    previousguess.append(cg2)
    count2+=1

如果P1 != cg2 等于 False,则此循环将终止。

【讨论】:

    【解决方案2】:

    您需要在计算机猜到答案后插入一个 break 语句。

    while True: # is always true
    

    因为它总是正确的,所以循环永远不会结束,直到你使用 break 强制它这样做。

    编辑:您还可以创建一个条件,如另一个答案所示。

    【讨论】:

      【解决方案3】:

      试试这个:

      while P1 != cg2:
          cg2 = (mn+mx)/2 #guess based on middle of highest and lowest
          print "Computer has guessed: %d" %cg2
          previousguess.append(cg2)
          count2+=1
      

      您还需要在循环中正确更新 mn 和 mx。这些不是唯一的问题,但它们应该让您进入下一阶段的调试。请考虑添加打印语句来跟踪程序的进度,包括它的去向和计算的数据。

      【讨论】:

        猜你喜欢
        • 2021-08-18
        • 1970-01-01
        • 2016-01-19
        • 2013-03-12
        • 2020-03-23
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 2019-06-25
        相关资源
        最近更新 更多