2015-10-02 127 views
0

我的代码似乎工作到WHILE循环之前的行。这个想法是让计算机通过从最低和最高数量的先前猜测中挑选一个中间数字来猜测玩家1输入的数字('P1')。我不知道为什么它保持循环!Python - 虽然循环不会停止

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 
+3

你永远不会终止循环。当计算机获得正确的猜测时,if条件失败,程序永远不会做任何事情。 – Prune

+0

嗨..感谢您的意见..我已经尝试过给出的每个建议,但我仍然无法停止while循环..它只计算中间一次,并继续循环无限的结果。 – chwps

+0

正如我在我的回答中所说的,您必须正确更新mn&mx。您的原始代码根本不会更新它们,并且它使用的更新对二进制搜索算法无效。如果你需要更多的帮助,你必须遵循指导方针 - 最值得注意的是,发布你的新代码。 – Prune

回答

2

试试这个:

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。这些不是唯一的问题,但它们应该让您进入下一个调试阶段。请考虑添加打印语句来跟踪程序的进度,无论它发生在哪里以及它计算的是什么数据。

1

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

while True: # is always true 

因为它总是如此,所以直到你强制使用中断才会结束循环。

编辑:你也可以创建一个条件,如其他答案所示。

3

因为您使用的是while TrueTrue总是等于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等于假,这个循环就会终止。