Задачник · модуль 1 · Данные и имена

Справочник по Python · задачник · модуль 1

Задачи 1.1

1.1

Задачи к главе
«Переменные»

Первые программы: дать данным имена, посчитать по формуле и вывести результат. Главное здесь не арифметика, а привычка: данные сверху, расчёт отдельными строками, вывод в конце.

Глава справочника
1.1 Переменные в программировании
Можно использовать
главы 1.1
Разборов
3 с решением
Практика
16 задач без решения
Уже изучено — этим и решаем

Ввода с клавиатуры пока нет — он появится в главе 1.5. Поэтому исходные данные записываются в первые строки программы, а решение проверяется так: меняем данные наверху и запускаем снова. Вывод — через print() с запятыми: f-строки разберём в главе 1.3.

§1Разборы: как решать и оформлять

Три задачи решены полностью. Смотрите не только на ответ, но и на оформление: исходные данные сверху, расчёт отдельными строками с понятными именами, вывод — в конце.

Разбор 1

Покупка в магазине

★☆☆базовая

В магазине купили несколько одинаковых тетрадей. Известны цена одной тетради и их количество. Выведите количество и сумму к оплате.

Как рассуждаем

  1. Выписываем, что дано: цена и количество. Каждому числу — своё имя, которое объясняет смысл.
  2. Решаем, что нужно найти: сумма = цена × количество.
  3. Сначала считаем и сохраняем результат в переменную total, потом выводим.
main.pyрешение
# Исходные данные
price = 45   # цена одной тетради, руб.
count = 3    # сколько тетрадей купили

# Расчёт
total = price * count

# Вывод
print("Тетрадей:", count)
print("К оплате:", total, "руб.")
Вывод в терминалрезультат запуска
Тетрадей: 3
К оплате: 135 руб.

Проверка на других данных

Пример 1
Данные в начале программы
price = 120
count = 5
Вывод
Тетрадей: 5
К оплате: 600 руб.
Почему не print(45 * 3)

Такая строка тоже напечатает 135, но через месяц уже непонятно, что такое 45 и 3. С именами price и count программа объясняет себя сама, а новые данные меняются в одном месте — наверху.

Разбор 2

Счёт за электричество

★★☆средняя

Известны показания счётчика в прошлом и в этом месяце и тариф — цена одного киловатт-часа. Посчитайте расход за месяц и сумму к оплате.

Как рассуждаем

  1. Расход — это разница показаний: текущее минус прошлое. Это отдельная величина, у неё будет своё имя.
  2. Сумма — расход, умноженный на тариф. Считаем её по имени used, а не повторяем вычитание второй раз.
  3. Выводим обе величины с единицами измерения, чтобы вывод читался без программы перед глазами.
main.pyрешение
# Исходные данные
previous = 12450   # показание в прошлом месяце, кВт·ч
current = 12630    # показание в этом месяце, кВт·ч
tariff = 6.5       # цена 1 кВт·ч, руб.

# Расчёт
used = current - previous
cost = used * tariff

# Вывод
print("Расход:", used, "кВт·ч")
print("К оплате:", cost, "руб.")
Вывод в терминалрезультат запуска
Расход: 180 кВт·ч
К оплате: 1170.0 руб.

Проверка на других данных

Пример 1
Данные в начале программы
previous = 800
current = 1000
tariff = 5
Вывод
Расход: 200 кВт·ч
К оплате: 1000 руб.
Промежуточный результат — тоже переменная

Можно было написать cost = (current - previous) * tariff и обойтись без used. Но расход нужен дважды — в выводе и в расчёте суммы. Одно имя вместо двух одинаковых выражений: меньше кода и некуда ошибиться при правке.

Откуда .0 во втором примере

В первом примере тариф дробный, 6.5, — и сумма получается дробной: 1170.0. Во втором тариф целый, и сумма целая. Тип результата зависит от типов данных — подробно это в главе 1.2.

Разбор 3

Движение товара на складе

★★☆средняя

Утром на складе лежит некоторое количество коробок. За день пришла поставка на 120 коробок, продали 75, а вечером половину остатка передали в другой магазин. Выведите остаток после каждой операции.

Как рассуждаем

  1. Одна величина меняется несколько раз — значит, нужна одна переменная stock и составное присваивание.
  2. Операции идут в порядке условия. Порядок строк важен: каждая работает с тем значением, что лежит в переменной на этот момент.
  3. После каждой операции выводим промежуточный остаток — так легко проверить программу по шагам.
main.pyрешение
# Исходные данные
stock = 200   # коробок на складе утром

# Операции за день
stock += 120   # пришла поставка
print("После поставки:", stock)

stock -= 75    # продали
print("После продаж:", stock)

stock /= 2     # половину передали в другой магазин
print("Вечером осталось:", stock)
Вывод в терминалрезультат запуска
После поставки: 320
После продаж: 245
Вечером осталось: 122.5

Проверка на других данных

Пример 1
Данные в начале программы
stock = 50
Вывод
После поставки: 170
После продаж: 95
Вечером осталось: 47.5
Трассировка: что лежит в stock
СтрокаДействиеstock
stock = 200начальное значение200
stock += 120200 + 120320
stock -= 75320 − 75245
stock /= 2245 / 2122.5

Такую таблицу стоит рисовать на черновике, когда результат не сходится: сразу видно, на какой строке значение ушло не туда.

Половина коробки

/= всегда даёт дробное число, поэтому получилось 122.5. В жизни коробку не разрежешь — как получить целую часть, узнаем в главах 1.2 и 1.8. Пока важно заметить: программа честно посчитала то, что написано.

§2Задачи для самостоятельной работы

Решений здесь нет — только условие и примеры, на которых решение нужно проверить. Сложность отмечена звёздами: ★☆☆ — прямое применение главы, ★★☆ — нужно собрать несколько шагов, ★★★ — есть подвох или требуется догадка.

Задача 1.1.1

Забор вокруг участка

★☆☆базовая

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

Примеры для проверки

Пример 1
Данные в начале программы
length = 30
width = 20
Вывод
Длина забора: 100 м
Пример 2
Данные в начале программы
length = 15
width = 8
Вывод
Длина забора: 46 м
Подсказка

Забор идёт по периметру: две длины и две ширины.

Задача 1.1.2

Время загрузки файла

★☆☆базовая

Размер файла — в мегабайтах, скорость интернета — в мегабайтах в секунду. Сколько секунд займёт загрузка?

Примеры для проверки

Пример 1
Данные в начале программы
file_size = 700
speed = 25
Вывод
Время загрузки: 28.0 с
Пример 2
Данные в начале программы
file_size = 1500
speed = 60
Вывод
Время загрузки: 25.0 с
Подсказка

Время = объём / скорость. Обратите внимание, какого вида число получится после деления.

Задача 1.1.3

Стоимость одного дня аренды

★☆☆базовая

Велосипед взяли в аренду на несколько дней и заплатили за всё сразу. Сколько стоил один день?

Примеры для проверки

Пример 1
Данные в начале программы
rent = 3000
days = 4
Вывод
Один день: 750.0 руб.
Пример 2
Данные в начале программы
rent = 1000
days = 4
Вывод
Один день: 250.0 руб.
Подсказка

Общую сумму делим на количество дней и сохраняем результат в переменную с понятным именем.

Задача 1.1.4

Проездной или разовые поездки

★☆☆базовая

За месяц студент совершает определённое число поездок на автобусе, одна поездка стоит фиксированную сумму. Сколько он потратит за месяц?

Примеры для проверки

Пример 1
Данные в начале программы
trips = 44
fare = 62
Вывод
За месяц: 2728 руб.
Пример 2
Данные в начале программы
trips = 20
fare = 55
Вывод
За месяц: 1100 руб.
Подсказка

Одна переменная для результата, один print() с запятыми.

Задача 1.1.5

Ламинат для комнаты

★☆☆базовая

Даны длина и ширина комнаты в метрах. Выведите площадь пола — столько квадратных метров ламината нужно купить без запаса.

Примеры для проверки

Пример 1
Данные в начале программы
length = 5.5
width = 4
Вывод
Площадь пола: 22.0 кв. м
Пример 2
Данные в начале программы
length = 3
width = 2.5
Вывод
Площадь пола: 7.5 кв. м
Подсказка

Площадь прямоугольника — длина × ширина. Если одна из сторон дробная, результат тоже будет дробным.

Задача 1.1.6

Возраст через несколько лет

★☆☆базовая

Известен возраст человека и через сколько лет состоится событие. Выведите, сколько ему будет тогда.

Примеры для проверки

Пример 1
Данные в начале программы
age = 17
years = 5
Вывод
Через 5 лет будет: 22
Пример 2
Данные в начале программы
age = 30
years = 12
Вывод
Через 12 лет будет: 42
Подсказка

Будущий возраст сохраните в переменную, а в выводе перечислите текст и значения через запятую.

Задача 1.1.7

Погода для туриста

★★☆средняя

Прогноз дан в градусах Цельсия, а турист привык к Фаренгейту. Переведите температуру: умножьте на 1.8 и прибавьте 32. Выведите обе величины в одной строке, как в примерах.

Примеры для проверки

Пример 1
Данные в начале программы
celsius = 25
Вывод
25 °C = 77.0 °F
Пример 2
Данные в начале программы
celsius = -10
Вывод
-10 °C = 14.0 °F
Подсказка

Значения и текст перечисляются в print() через запятую — пробелы между ними поставятся сами.

Задача 1.1.8

Счёт в кафе

★★☆средняя

Компания заказала два кофе и один десерт. Известны цена кофе и цена десерта. Выведите стоимость кофе, стоимость десерта и общий счёт — каждую величину отдельной строкой.

Примеры для проверки

Пример 1
Данные в начале программы
coffee = 180
dessert = 250
Вывод
Кофе: 360 руб.
Десерт: 250 руб.
Счёт: 610 руб.
Пример 2
Данные в начале программы
coffee = 150
dessert = 320
Вывод
Кофе: 300 руб.
Десерт: 320 руб.
Счёт: 620 руб.
Подсказка

Стоимость двух кофе понадобится и в выводе, и в общем счёте — посчитайте её один раз.

Задача 1.1.9

Смета на покраску

★★☆средняя

Для ремонта покупают несколько банок краски и несколько кистей. Известны цены и количество. Выведите стоимость краски, стоимость кистей и общую сумму.

Примеры для проверки

Пример 1
Данные в начале программы
paint_price = 890
cans = 3
brush_price = 250
brushes = 2
Вывод
Краска: 2670 руб.
Кисти: 500 руб.
Всего: 3170 руб.
Пример 2
Данные в начале программы
paint_price = 1200
cans = 1
brush_price = 180
brushes = 4
Вывод
Краска: 1200 руб.
Кисти: 720 руб.
Всего: 1920 руб.
Подсказка

Две промежуточные суммы — две переменные. Общая сумма складывается из них, а не пересчитывается заново.

Задача 1.1.10

Траты на такси за три дня

★★☆средняя

Известно, сколько потрачено на такси в понедельник, вторник и среду. Выведите общую сумму и среднюю трату за день.

Примеры для проверки

Пример 1
Данные в начале программы
monday = 450
tuesday = 300
wednesday = 600
Вывод
Всего: 1350 руб.
В среднем за день: 450.0 руб.
Пример 2
Данные в начале программы
monday = 120
tuesday = 90
wednesday = 150
Вывод
Всего: 360 руб.
В среднем за день: 120.0 руб.
Подсказка

Сначала общая сумма, потом средняя — от уже посчитанной суммы.

Задача 1.1.11

Рассрочка без переплаты

★★☆средняя

Телефон купили в рассрочку: сумма делится поровну на несколько месяцев. Выведите ежемесячный платёж, сколько выплачено за первые 5 месяцев и сколько осталось.

Примеры для проверки

Пример 1
Данные в начале программы
price = 36000
months = 12
Вывод
Платёж в месяц: 3000.0
Выплачено за 5 месяцев: 15000.0
Осталось: 21000.0
Пример 2
Данные в начале программы
price = 24000
months = 8
Вывод
Платёж в месяц: 3000.0
Выплачено за 5 месяцев: 15000.0
Осталось: 9000.0
Подсказка

Три величины, каждая считается из предыдущей.

Задача 1.1.12

Счёт за мобильную связь

★★☆средняя

Счёт складывается из абонентской платы, оплаты дополнительных гигабайт и SMS. Даны абонентская плата, число дополнительных гигабайт и цена одного, число SMS и цена одной. Выведите каждую часть счёта и итог.

Примеры для проверки

Пример 1
Данные в начале программы
subscription = 450
extra_gb = 3
gb_price = 120
sms = 10
sms_price = 2.5
Вывод
Абонентская плата: 450
Доп. интернет: 360
SMS: 25.0
Итого: 835.0
Пример 2
Данные в начале программы
subscription = 300
extra_gb = 0
gb_price = 150
sms = 4
sms_price = 3
Вывод
Абонентская плата: 300
Доп. интернет: 0
SMS: 12
Итого: 312
Подсказка

Каждая часть счёта — отдельная переменная. Во втором примере дополнительных гигабайт нет — часть счёта равна нулю, и это нормально.

Задача 1.1.13

Поменять значения через третью переменную

★★☆средняя

В переменных a и b лежат числа. Поменяйте их значения местами с помощью вспомогательной переменной и выведите результат. (Короткий способ появится в главе 1.6 — здесь решаем тем, что уже знаем.)

Примеры для проверки

Пример 1
Данные в начале программы
a = 5
b = 9
Вывод
a = 9
b = 5
Пример 2
Данные в начале программы
a = -1
b = 100
Вывод
a = 100
b = -1
Подсказка

Прежде чем записать в a новое значение, сохраните старое во временную переменную — иначе оно потеряется.

Задача 1.1.14

Баланс карты за неделю

★★★повышенная

На карте лежит сумма. За неделю: пришла зарплата 30000 руб., оплатили аренду 18000 руб., потом банк начислил за месяц кешбэк — сумма на карте выросла в 1.01 раза, и наконец половину остатка перевели на накопительный счёт. Выведите баланс после каждой операции. Используйте одну переменную для баланса.

Примеры для проверки

Пример 1
Данные в начале программы
balance = 5000
Вывод
После зарплаты: 35000
После аренды: 17000
После кешбэка: 17170.0
На карте осталось: 8585.0
Пример 2
Данные в начале программы
balance = 0
Вывод
После зарплаты: 30000
После аренды: 12000
После кешбэка: 12120.0
На карте осталось: 6060.0
Подсказка

Для каждой операции — своё составное присваивание: +=, -=, *=, /=. Длинный хвост после точки у дробных чисел — это нормально: округлять вывод научимся в главах 1.3 и 1.9.

Задача 1.1.15

Рецепт на другое число порций

★★★повышенная

Рецепт блинов рассчитан на 4 порции: 300 г муки, 500 мл молока и 2 яйца. Даны нужное число порций. Пересчитайте все продукты.

Примеры для проверки

Пример 1
Данные в начале программы
portions = 6
Вывод
Мука: 450.0 г
Молоко: 750.0 мл
Яйца: 3.0 шт.
Пример 2
Данные в начале программы
portions = 2
Вывод
Мука: 150.0 г
Молоко: 250.0 мл
Яйца: 1.0 шт.
Подсказка

Найдите, во сколько раз новое число порций больше исходного, и умножьте на это число каждый продукт. Составное присваивание сокращает запись.

Задача 1.1.16

Средняя скорость в поездке

★★★повышенная

Первую часть пути машина проехала за одно время, вторую — за другое. Даны расстояния в километрах и время в часах для обеих частей. Выведите среднюю скорость на всём пути.

Примеры для проверки

Пример 1
Данные в начале программы
distance1 = 180
time1 = 3
distance2 = 100
time2 = 1
Вывод
Средняя скорость: 70.0 км/ч
Пример 2
Данные в начале программы
distance1 = 100
time1 = 2
distance2 = 300
time2 = 2
Вывод
Средняя скорость: 100.0 км/ч
Подсказка

Подвох: средняя скорость — это не среднее двух скоростей. Это весь путь, делённый на всё время. В первом примере «среднее скоростей» дало бы 80, а правильный ответ другой.

§3Как проверить своё решение

  1. Запишите данные из колонки «Данные в начале программы» в первые строки решения.
  2. Запустите программу и сравните вывод с колонкой «Вывод» — символ в символ: пробелы, двоеточия, точка вместо запятой.
  3. Замените данные на значения из следующего примера и запустите ещё раз. Решение верное, если при любых данных менять приходится только верхние строки.
Оформление, которое проверяют

Имена переменных называют смысл: total_cost, а не x. Данные — вверху, расчёт — отдельными строками, вывод — в конце. Одно и то же выражение не повторяется: результат сохраняется в переменную и дальше используется по имени.

Задачи к главе 1.1 · Переменные · Задачник по Python Автор: Макаров Максим Николаевич