Python: Выражения в определениях
Мы уже знаем, что выражения можно составлять из нескольких операций. Но если записать все вычисление в одну длинную строку, код быстро становится трудным для чтения.
Например, вот такая запись работает:
yuans_count = 50 * 1.25 * 6.91
print(yuans_count) # => 431.875Python легко вычислит это выражение. Но человеку читать такой код уже не так удобно. Сразу возникают вопросы:
- Что означает
1.25? - Что означает
6.91? - Где заканчивается один шаг вычисления и начинается следующий?
Чтобы сделать такие вычисления понятнее, переменные можно использовать внутри других выражений. Сначала программа сохраняет промежуточный результат в переменную, а затем подставляет значение этой переменной в следующее вычисление.
Переменные помогают разбивать сложные вычисления на понятные части и сохранять промежуточные результаты.
Конвертация валют через промежуточную валюту
Представим, что нужно перевести евро в юани, но напрямую такой курс нам недоступен. Тогда сделаем это в два шага: евро -> доллары -> юани. Так часто работают банки при оплате покупок за рубежом.
Шаг 1. Евро -> Доллары
Допустим, курс: 1 евро = 1.25 доллара. Хотим перевести 50 евро:
dollars_per_euro = 1.25
dollars_count = 50 * dollars_per_euro
print(dollars_count) # => 62.5В этой строке 50 * dollars_per_euro является выражением, а dollars_count представляет собой переменную, в которую записывается результат. Python сначала вычисляет выражение, а уже потом сохраняет результат в переменную.
Интерпретатору все равно, как записано выражение:
dollars_count = 62.5или
dollars_count = 50 * dollars_per_euroРезультат будет один и тот же. Но для человека второй вариант полезнее: по имени dollars_count сразу видно, что на этом шаге мы получили сумму в долларах.
Шаг 2. Доллары -> Юани
Теперь переведем 50 евро в юани, используя доллар как промежуточную валюту. Допустим, курсы валют: 1 доллар = 6.91 юаней, 1 евро = 1.25 долларов.
dollars_per_euro = 1.25
yuans_per_dollar = 6.91
dollars_count = 50 * dollars_per_euro
yuans_count = dollars_count * yuans_per_dollar
print(yuans_count)Этот код длиннее, чем одна строка 50 * 1.25 * 6.91, но читать его проще:
- видно, что
1.25это курс евро к доллару - видно, что
6.91это курс доллара к юаню - видно, что
dollars_countявляется промежуточным результатом
Особенно это станет заметно, если не возвращаться к коду хотя бы неделю. А теперь представьте что в проекте сотни тысяч строк кода. Если бы в таких проектах не было промежуточных переменных и вычислений, в них бы было невозможно разобраться.
Что нужно запомнить
- Если выражение получается слишком длинным, его лучше разбить на несколько шагов.
- Переменные помогают сохранять промежуточные результаты и делают вычисления понятнее.
- Когда переменная используется в выражении, Python подставляет ее значение и продолжает вычисление.
Задание
Напишите программу, которая берет исходное количество евро, записанное в переменную euros_count, переводит евро в доллары и выводит на экран. Затем полученное значение переводит в юани и выводит на новой строчке.
Пример вывода для 100 евро:
125.0
863.75Считаем, что:
- 1 евро = 1.25 долларов
- 1 доллар = 6.91 юаней
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = "125.0\n863.75"
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
