как мне выполнить двоичный выбор в цикле с помощью python

#python #binary-search

Вопрос:

просто предупреждаю, я новичок, так что ответ, вероятно, довольно прост.

поэтому я пытаюсь сделать игру в угадывание чисел, в которой вы думаете о числе от 1 до 100, а затем компьютер спрашивает вас, является ли его число x, и вы говорите, что оно либо слишком высокое, либо слишком низкое

проблема, с которой я сталкиваюсь, заключается в том, что после того, как вы скажете, что это слишком высоко или слишком низко, он просто угадывает 50 снова и снова, я гуглил около 2 часов, и я не могу понять, почему он это делает

    hi = 100
    low = 1
    mid = (hi low)// 2
    print ("Ok think of a number between 1 and 100.")
    print ("I guess")
    print (mid)
    print ("1.) Too High")
    print ("2.) Too Low")
    g2 = input ("3.) Correct")
    g2 = int(g2)
    hi = int(100)
    low = int(1)
    mid = (hi low)// 2
while g2 != 3:
    
    if g2 == 1:
        (hi) = (mid) - 1
        print ("I guess")
        print (mid)
        print ("1.) Too High")
        print ("2.) Too Low")
        g2 = input ("3.) Correct")
        g2 = int(g2)
    elif g2 == 2:
        (low) = (mid)   1
        print ("I guess")
        print (mid)
        print ("1.) Too High")
        print ("2.) Too Low")
        g2 = input ("3.) Correct")
        g2 = int(g2) 
 

Комментарии:

1. похоже, что часть кода отсутствует, или нет смысла в том, что цикл не завершается и ничего не печатается в цикле

2. Если пользователь не введет 3, он никогда не выйдет, хотя это не очень похоже на игру в угадайку

3. Ты никогда не меняешься mid .

4. Подумайте логически о шагах, которые предпринимает ваш код. mid представляет собой предположение, которое вы собираетесь напечатать, верно? Где в вашей программе это значение когда-либо меняется ? Если вы хотите, чтобы что-то происходило каждый раз в цикле, как вы должны размещать это в своем коде?

5. Вам следовало бы погуглить, как использовать отладчик, — тогда вы могли бы запускать свою программу шаг за шагом.

Ответ №1:

Вы не изменили значение mid в своих if заявлениях. Вы меняете значение high и low , но вы не вычисляете новое mid из него, поэтому оно всегда остается 50 . Вы просто должны добавить mid = (low hi) // 2 после расчета новое high или low в своем if заявлении.