2016-09-17 90 views
0

我一直在研究對分數猜測遊戲,我想讓它自動工作,但代碼似乎陷入了循環。爲什麼循環永遠不會退出?

有什麼建議嗎?

x = 75 

low = 0 
high = 100 

guessing = True 

while guessing: 

    guess = int((high + low) // 2) 

    if guess == x: 
     guessing = False 
    elif guess < x: 
     high = guess 
    else: 
     low = guess 

print("Your number is ", str(guess)) 
+2

你應該通過你的算法「手工」,看看它是什麼。正如Kalpesh所說,你已經將「elif ... else」邏輯逆轉了。 –

+0

現在我覺得啞巴了。感謝您的幫助 –

回答

0

我認爲它會工作:

x = 75 
low = 0 
high = 100 
guessing = True 
while guessing: 
    guess = (high + low) // 2 
    print("guess:",guess) 
    if guess == x: 
     guessing = False 
    elif guess < x: 
     low = guess 
    else: 
     high = guess 
print("Your number is ", guess) 

輸出:

guess: 50 
guess: 75 
Your number is 75 

你並不需要明確地將其轉換爲int,因爲使用的是整數除法這裏guess = int((high + low) // 2)和反向elif ..else邏輯..

希望這會幫助你。

0

對於這樣的事情,最好限制可能的迭代次數。

max_iter = 25 
x = 42 
low , high = 0 , 100 

for _ in range(max_iter): 
    guess = (high + low) // 2 
    if guess == x: 
     break 
    low , high = (guess , high) if x > guess else (low , guess) 

print("Your number is {}".format(guess))