Инженерный калькулятор · Шаг 10 из 10
Кнопки окна
Окно с кнопками уже есть, и оно ничего не решает само: на каждое нажатие оно спрашивает, что станет с калькулятором. Состояние — это набранная строка, текст на экране и память. Цифры и знаки дописываются, «⌫» стирает, «C» очищает, «=» считает.
Что сделать
Скажите, что станет с калькулятором после нажатия кнопки: дописать, стереть, очистить или посчитать.
Что приходит
sostoyanie— словарь{"vvod": набранное, "ekran": что на экране, "pamyat": память}; менять его нельзяknopka— что нажали:"C","⌫","="или текст, который дописать ("7","+","sin(")vypolnit— функцияvypolnit(строка, память), возвращает(ответ, новая память)na_ekran— функция «ответ → строка для экрана», ваш шаг 7slovami— функция «исключение → текст или None», ваш шаг 8
Что вернуть
Новое состояние — словарь с ключами vvod, ekran, pamyat в этом порядке.
Допишите функцию nazhatie в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Окно зовёт nazhatie на каждую кнопку и каждую клавишу и рисует то, что вы вернули. Решите шаг — и калькулятор в окне заработает.
Набрано «2+», нажали «3»: nazhatie({"vvod": "2+", "ekran": "2+", "pamyat": {}}, "3", None, None, None) — это {"vvod": "2+3", "ekran": "2+3", "pamyat": {}}. Для простого нажатия счёт не нужен, поэтому вместо трёх функций — None.
nazhatie({"vvod": "2+", "ekran": "2+", "pamyat": {}}, "3", None, None, None)
{'vvod': '2+3', 'ekran': '2+3', 'pamyat': {}}
Переданный словарь не меняется — возвращается новый.
"C"— набранное пусто, на экране"0", память прежняя."⌫"— стереть последний знак набранного. Если набранное кончается на «(», а перед ней латинские буквы ("2*sin("), стереть скобку вместе с именем: получится"2*". На экране — новое набранное, а если оно пусто —"0"."="— если набранное пусто или из одних пробелов, вернуть состояние без изменений (копией). Иначеvypolnit(набранное, память): удалось — набранное пусто, на экранеna_ekran(ответ), память — новая. Не удалось — спроситьslovami(исключение): текст — он на экране, набранное и память остаются прежними, чтобы ошибку можно было поправить;None— бросить исключение дальше.- Всё остальное дописывается к набранному. Но если набранное пусто, в памяти есть
ansи нажатие начинается с+,*,/или^, перед ним дописывается"ans": «+ 5» после ответа — это «ans+5». Минус не в счёт: с него начинают отрицательное число. На экране — новое набранное.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.