2016-09-17 18 views
0

私はBisectional Number推測ゲームに取り組んでいて、自動的に動作させたいのですが、コードがループしているようです。ループが終了しないのはなぜですか?

提案がありますか?

私はそれが動作すると思います
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 

あなたがここにguess = int((high + low) // 2)と逆に整数の除算を使用しているので、あなたが明示的にint型に変換する必要はありません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)) 
関連する問題