Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2015 16:02:29

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу объяснить, почему не меняется значение переменной.

Добрый день.
Прохожу сейчас на edx.org курс по Питону. Попалась задача. Я ее решил, но во время решение возник вопрос, который не могу понять.

Интересует выражение “ans = (high+low)/2” и его позиционирование в коде.

inpt=''
low = 0
high = 100
# "Позиция 1" -  программа постоянно спрашивает "Is your secret number 50?"
# ans = (high+low)/2
print 'Please think of a number between 0 and 100!'
while inpt != 'c':
    # "Позиция 2" - все работает норм 
    ans = (high+low)/2
    print 'Is your secret number ' + str(ans) +'?'
    inpt = raw_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 inpt == 'h':
        high = ans
    elif inpt == 'l':
        low = ans
    elif inpt == 'c':
        inpt == 'c'
    else:
        print 'Sorry, I did not understand your input.'
if inpt == 'c':
    print 'Game over. Your secret number was: ' + str(ans)

Суть вопроса: Я не понимаю, в чем разница между размещением “ans = (high+low)/2” в позиции 1 и 2.
Почему в “Позиции 1” пересчет ans не происходит, а в “Позиции 2” происходит?

Как я себе понимаю, не должно быть разницы между позицией 1 и 2, так как после ввода ‘h’ или ‘l’ меняются переменные high и low и соответственно уже новый\пересчитанный ans должен использоваться в следующей итерации. Но почему то, если ans = (high+low)/2 запихнуть в 1ую позицию, то он упорно запоминает 100+0/2 и не хочет воспринимать измененные после первой итерации low и high.

Спасибо.

Отредактировано TitanFighter (Июнь 27, 2015 16:22:28)

Офлайн

#2 Июнь 27, 2015 16:57:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Прошу объяснить, почему не меняется значение переменной.

    elif inpt == 'c':
        inpt == 'c'
ГЕНИАЛЬНО!!!!
TitanFighter
позиции 1 и 2.
Почему в “Позиции 1” пересчет ans не происходит, а в “Позиции 2” происходит?
На помощь приходит Капитан Очевидность:
Потому что позиция 1 вне цикла, а позиция 2 внутри цикла!
В позиции 1 расчет происходит один раз до цикла, в позиции 2 каждый раз пока выполняется цикл.



Офлайн

#3 Июнь 27, 2015 20:40:52

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу объяснить, почему не меняется значение переменной.

FishHook
elif inpt == ‘c’:
inpt == ‘c’
ГЕНИАЛЬНО!!!!
Я старался) Но я честно могу лучше
    if inpt == 'h':
        high = ans
    elif inpt == 'l':
        low = ans
    elif inpt == 'c':
        print 'Game over. Your secret number was: ' + str(ans)
    else:
        print 'Sorry, I did not understand your input.'

FishHook
На помощь приходит Капитан Очевидность:
Потому что позиция 1 вне цикла, а позиция 2 внутри цикла!
В позиции 1 расчет происходит один раз до цикла, в позиции 2 каждый раз пока выполняется цикл.

Это для Вас просто а вот как я предполагал:
Переменные размещаются до цикла и они меняются каждую итерацию. Я предполагал, что пересчет ans должен происходить в зависимости от изменения переменных low и high.

Но теперь понятно.
Спасибо Кеп)

Отредактировано TitanFighter (Июнь 27, 2015 20:42:06)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version