Python-While循环获胜';停不下来

Python-While循环获胜';停不下来,python,while-loop,infinite-loop,Python,While Loop,Infinite Loop,我的代码似乎是在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(

我的代码似乎是在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
试试这个:

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。这些不是唯一的问题,但它们应该会让您进入调试的下一阶段。请考虑添加打印语句来跟踪程序的进展,无论它的去向和计算的数据。

尝试:

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。这些不是唯一的问题,但它们应该会让您进入调试的下一阶段。请考虑添加打印语句来跟踪程序的进展,无论程序的去向和计算的数据。

在计算机猜出答案后,您需要插入一个中断语句。
while True: # is always true
因为它总是正确的,所以循环永远不会结束,除非您使用break强制它这样做


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

您需要在计算机猜出答案后插入中断语句

while True: # is always true
因为它总是正确的,所以循环永远不会结束,除非您使用break强制它这样做


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

因为您使用的是
,而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
或者像这样:

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,此循环将终止。

因为您使用的是
,而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
或者像这样:

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,此循环将终止。

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