2016-09-15 8 views
-1

このコードでどこが間違っているのか説明できますか?私は、入力番号と同じ数の入力を見つけて、さまざまなステートメントを出力するまで、二項検索を繰り返し、二分探索を繰り返します。両面検索コードが役に立たない

num =int(input("Please think of a number between 0 and 100!")) 
maximum = num 
minimum = 0 
average = (minimum+maximum)/2.0 

while(average<num): 
print ("Is your secret number ", +average, "?") 
cond = input("Enter 'h' to indicate the guess is too high.Enter 'l' to indicate the guess is too low.Enter 'c' to indicate I guessed correctly.") 

if(cond == "h"): 
    maximum = minimum 
    minimum = 0 
elif(cond == "l"): 
    minimum = maximum 
    maximum = 100 
elif(cond == "c"): 
    print("Game over. Your secret number was: ", +average) 
    break 
+0

このプログラムを実行するとどのような出力が得られますか? –

+0

あなたは 'average'や' num'を更新しませんので、 'cond == 'c''以外のループはどのように終了しますか?言い換えれば、決してあなたの検索スペースを「分割する」ことはありません。 –

答えて

0

まず、推測を入力する必要はありません。あなたはいつもあなたの範囲の中間点から出発するつもりです。

ので、代わりに、は、数を考えると、ユーザのためのを待つ、その後推測。

import time 

minimum = 0 
maximum = 100 
print("Please think of a number between {} and {}!".format(minimum, maximum)) 
time.sleep(3) 

average = (minimum + maximum)/2.0 

while(True): 
    print ("Is your secret number ", +average, "?") 
    cond = input("Enter 'h' to indicate the guess is too high.Enter 'l' to indicate the guess is too low.Enter 'c' to indicate I guessed correctly.") 

第2の問題は、検索スペースを「分割する」必要があることです。推測値が高すぎる場合は、その推測値を最大値として設定し、低すぎる場合は最小値として設定します。どちらの場合でも他の値を設定する必要はありません。それは同じままです。

if(cond == "h"): 
     maximum = average 
    elif(cond == "l"): 
     minimum = average 
    elif(cond == "c"): 
     print("Game over. Your secret number was: ", +average) 
     break 

そして最後に、あなたは新しい推測を生成するために、ループをaverageたびに更新する必要があります。

average = (minimum + maximum)/2.0 
+0

あなたはフロートで分けられるべきではありません。 –

+0

@PadraicCunninghamおそらくそうではありませんが、実際にはかなり長い時間ループプロンプトが表示されます –

+0

@ cricket_007これをクリアしていただきありがとうございます。それはとてもうまくいった。 – user6820366

関連する問題