Как исправить переменную, которая не обновляется в цикле while (python) - PullRequest
0 голосов
/ 05 февраля 2019

Я делаю программу, которая угадывает число, о котором вы думаете, сообщая программе, больше или меньше число.Я не получаю ошибок, но не могу обновить переменную «угадать» в цикле while, она остается равной 50. Формула для более высокого-более низкого приведена в учебнике, поэтому я не могу это изменить.

Я попытался переместить переменную внутри цикла while, но он не обновляется.

print('Hello.')
print('Pick a secret number between 0 and 100.')
low = 0
high = 101
guess = 50
while True:
    print('Is your secret number',guess)
    use = input('Enter yes/higher/lower:\n').lower()
    if use == 'yes':
        print('Great!')
        break
    elif use == 'higher':
        low = guess
        guess = (guess-low)//2+low
    elif use == 'lower':
        high = guess
        guess = (high-guess)//2+guess
    else:
        print('I did not understand.')

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

IIUC, low, high и guess необходимо обновить для каждого цикла.Ваши новые guess должны быть средними значениями ваших новых low и high.

. Таким образом, ваше предположение остается прежним.Например, если пользователь отвечает 'higher', guess-low равен 0.Разделите на 2 все еще 0, затем добавьте на low, то есть guess.

Вы, вероятно, хотите это:

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

и

high =  guess
guess = (high + low) // 2
0 голосов
/ 05 февраля 2019

Это потому, что вы использовали неверную логику.

Прямо сейчас, то, что происходит,

low = guess
guess = (guess - low) // 2 + low

Поскольку low = guess приведенное выше утверждение эквивалентно,

guess = (guess - guess) // 2 + low
# guess = 0 + low
# guess = low

Аналогично, для высокого значения

high = guess
guess = (high - guess) //2 + guess

Поскольку high = guess вышеупомянутое утверждение эквивалентно,

guess = (high - high) // 2 + guess
# guess = 0 + guess
# guess = guess

Именно поэтому оно всегда застревает на 50.


Фактическая логика для его работы следующая:

elif use == 'higher':
    low = guess
    guess = (guess + high) // 2
elif use == 'lower':
    high = guess
    guess = (guess + low) // 2

Измените фрагмент на этот.Это будет работать!


Надеюсь, это поможет!:)

0 голосов
/ 05 февраля 2019

Это странно, потому что с вашей формулой что-то не так.

    elif use == 'higher':
        low = guess
        guess = (guess-low)//2+low
    elif use == 'lower':
        high = guess
        guess = (high-guess)//2+guess

В этой части, начиная с low == high == guess, результат guess - low и high - guess всегда будет равен 0. Делим это на2 также дает 0. Следовательно, обе строки становятся эквивалентными guess = guess.

Это потому, что вы переназначаете low и high, что, как я полагаю, вы хотите сохранить нижний и верхний пределыдиапазон угадывания.

Возможно, вы имеете в виду guess += (high - guess) // 2 и guess -= (guess - low) // 2?

0 голосов
/ 05 февраля 2019

Ваша проблема, кажется, в переменной 'перераспределение значений' (я не уверен, что это слово я французский), с равными:

=

Вы должны использовать

угадайте + = значение

или

угадайте = угадайте + угадайте

или

угадай = угадай - угадай

или

угадай - = угадай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...