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

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

Задачи 1.2

1.2

Задачи к главе
«Типы данных»

Числа бывают целыми и дробными, текст — строкой, и программа обращается с ними по-разному. В задачах этой главы данные часто приходят «не того типа» — строкой из формы или таблицы — и их нужно привести.

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

Ввода с клавиатуры пока нет — он появится в главе 1.5. Поэтому исходные данные записываются в первые строки программы, а решение проверяется так: меняем данные наверху и запускаем снова. Теперь доступны //, %, **, функции type(), int(), float(), str() и len().

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

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

Разбор 1

Количество пришло строкой

★☆☆базовая

Интернет-магазин получает из формы заказа количество товара — строкой, как любой текст из формы. Цена одной штуки известна числом. Посчитайте стоимость заказа.

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

  1. Смотрим на типы: "12" в кавычках — строка, 35 — целое число.
  2. Строку и число перемножать нельзя по смыслу: "12" * 35 повторит строку 35 раз. Сначала переводим строку в число через int().
  3. Для отладки выводим типы до и после преобразования — так видно, что именно лежит в переменных.
main.pyрешение
# Исходные данные
count_text = "12"   # количество из формы заказа: строка
price = 35          # цена одной штуки, руб.

# Преобразование и расчёт
count = int(count_text)
total = count * price

# Вывод
print("Тип из формы:", type(count_text))
print("Тип после int():", type(count))
print("Стоимость заказа:", total, "руб.")
Вывод в терминалрезультат запуска
Тип из формы: <class 'str'>
Тип после int(): <class 'int'>
Стоимость заказа: 420 руб.

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

Пример 1
Данные в начале программы
count_text = "3"
price = 990
Вывод
Тип из формы: <class 'str'>
Тип после int(): <class 'int'>
Стоимость заказа: 2970 руб.
Что было бы без int()

count_text * price не упадёт с ошибкой: строка умножится на число и повторится 35 раз — получится 121212…. Программа молча выдаст бессмыслицу. Поэтому тип данных «на входе» проверяют первым делом.

Оформление

Исходная строка и число после преобразования лежат в разных переменных: count_text и count. Суффикс _text сразу подсказывает, что внутри строка.

Разбор 2

Длительность фильма

★★☆средняя

В каталоге кинотеатра длительность фильма записана в минутах. На афише нужно показать её в часах и минутах.

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

  1. Полных часов в минутах — это сколько раз 60 помещается в числе: целочисленное деление //.
  2. Оставшиеся минуты — то, что не поместилось в полные часы: остаток от деления %.
  3. Оба действия делим на одно и то же число 60, но отвечают они на разные вопросы: «сколько целых» и «сколько осталось».
main.pyрешение
# Исходные данные
total_minutes = 135   # длительность фильма, мин

# Расчёт
hours = total_minutes // 60     # полных часов
minutes = total_minutes % 60    # минут сверх полных часов

# Вывод
print("Длительность:", hours, "ч", minutes, "мин")
Вывод в терминалрезультат запуска
Длительность: 2 ч 15 мин

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

Пример 1
Данные в начале программы
total_minutes = 59
Вывод
Длительность: 0 ч 59 мин
Пример 2
Данные в начале программы
total_minutes = 180
Вывод
Длительность: 3 ч 0 мин
Почему не /

135 / 60 даёт 2.25 — это 2 часа и четверть часа, а не 2 часа 25 минут. Для «часы и минуты» нужна пара // и %: одна отвечает, сколько целых, другая — сколько осталось.

Разбор 3

Линия под заголовком отчёта

★★☆средняя

Программа печатает отчёт. Под заголовком должна идти линия из знаков = ровно такой же длины, как заголовок, а ниже — сколько символов в заголовке.

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

  1. Длину строки даёт len() — пробелы тоже считаются символами.
  2. Строку можно повторить умножением: "=" * 5 даёт =====. Умножаем знак на длину заголовка.
  3. Если заголовок поменяется, линия подстроится сама — число символов нигде не вписано руками.
main.pyрешение
# Исходные данные
title = "Отчёт за сентябрь"

# Расчёт
title_length = len(title)
line = "=" * title_length

# Вывод
print(title)
print(line)
print("Символов в заголовке:", title_length)
Вывод в терминалрезультат запуска
Отчёт за сентябрь
=================
Символов в заголовке: 17

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

Пример 1
Данные в начале программы
title = "Итоги"
Вывод
Итоги
=====
Символов в заголовке: 5
Одна запись — два смысла

* для чисел — умножение, для строки и числа — повторение. Язык выбирает действие по типам значений. Поэтому знать тип каждой переменной — не формальность, а способ предсказать, что сделает строка кода.

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

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

Задача 1.2.1

Длина пароля

★☆☆базовая

Сервис требует пароль не короче 8 символов. Выведите, сколько символов в пароле, — дальше сравнивать научимся в модуле 2.

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

Пример 1
Данные в начале программы
password = "qwerty123"
Вывод
Символов в пароле: 9
Пример 2
Данные в начале программы
password = "cat"
Вывод
Символов в пароле: 3
Пример 3
Данные в начале программы
password = "мой пароль 2026"
Вывод
Символов в пароле: 15
Подсказка

Одна встроенная функция из главы 1.2 возвращает количество символов строки.

Задача 1.2.2

Разделитель для чека

★☆☆базовая

Кассовый чек печатается на ленте фиксированной ширины. Выведите строку-разделитель: знак, повторённый нужное число раз, а под ней — её длину.

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

Пример 1
Данные в начале программы
symbol = "-"
width = 32
Вывод
--------------------------------
Ширина ленты: 32
Пример 2
Данные в начале программы
symbol = "*~"
width = 6
Вывод
*~*~*~*~*~*~
Ширина ленты: 12
Подсказка

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

Задача 1.2.3

Сколько недель длится проект

★☆☆базовая

Проект рассчитан на некоторое количество дней. Менеджеру нужно знать, сколько это полных недель и сколько дней остаётся сверх них.

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

Пример 1
Данные в начале программы
days = 234
Вывод
Полных недель: 33
Дней сверх недель: 3
Пример 2
Данные в начале программы
days = 7
Вывод
Полных недель: 1
Дней сверх недель: 0
Пример 3
Данные в начале программы
days = 5
Вывод
Полных недель: 0
Дней сверх недель: 5
Подсказка

В неделе 7 дней. «Сколько целых» и «сколько осталось» — два разных оператора деления.

Задача 1.2.4

Упаковка яиц

★☆☆базовая

Птицефабрика раскладывает яйца по коробкам фиксированной вместимости. Выведите, сколько получится полных коробок и сколько яиц останется.

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

Пример 1
Данные в начале программы
eggs = 100
per_box = 12
Вывод
Полных коробок: 8
Осталось яиц: 4
Пример 2
Данные в начале программы
eggs = 60
per_box = 10
Вывод
Полных коробок: 6
Осталось яиц: 0
Подсказка

«Сколько целых» и «сколько осталось» — два разных оператора деления.

Задача 1.2.5

Что пришло из анкеты

★☆☆базовая

Анкета передала возраст и рост строками. Выведите типы исходных значений, типы после преобразования (возраст — целое, рост — дробное) и сами значения.

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

Пример 1
Данные в начале программы
age_text = "17"
height_text = "1.75"
Вывод
<class 'str'> <class 'str'>
<class 'int'> <class 'float'>
Возраст: 17 Рост: 1.75
Пример 2
Данные в начале программы
age_text = "42"
height_text = "1.8"
Вывод
<class 'str'> <class 'str'>
<class 'int'> <class 'float'>
Возраст: 42 Рост: 1.8
Подсказка

type() можно передать в print() как обычное значение.

Задача 1.2.6

Сколько вариантов PIN-кода

★☆☆базовая

PIN-код состоит из цифр от 0 до 9. Дано количество цифр в коде. Выведите, сколько всего разных кодов можно составить.

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

Пример 1
Данные в начале программы
digits = 4
Вывод
Вариантов: 10000
Пример 2
Данные в начале программы
digits = 6
Вывод
Вариантов: 1000000
Подсказка

На каждой позиции 10 вариантов, позиций несколько — это степень.

Задача 1.2.7

Вес груза в тоннах

★★☆средняя

Транспортная компания принимает вес груза в килограммах, а в накладной пишет тонны и килограммы. Переведите вес, как в примерах.

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

Пример 1
Данные в начале программы
kg = 3750
Вывод
3750 кг = 3 т 750 кг
Пример 2
Данные в начале программы
kg = 999
Вывод
999 кг = 0 т 999 кг
Пример 3
Данные в начале программы
kg = 12005
Вывод
12005 кг = 12 т 5 кг
Подсказка

В тонне 1000 кг. Нулевое число тонн — нормальный результат, его тоже нужно вывести.

Задача 1.2.8

Числа из таблицы

★★☆средняя

Из выгрузки таблицы пришли два значения выручки — строками. Выведите, что получится, если «сложить» их как есть, и настоящую сумму.

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

Пример 1
Данные в начале программы
day1_text = "25"
day2_text = "17"
Вывод
Склеились: 2517
Сумма: 42
Пример 2
Данные в начале программы
day1_text = "1000"
day2_text = "250"
Вывод
Склеились: 1000250
Сумма: 1250
Подсказка

Первый вывод — сложение строк как есть. Для второго каждую строку сначала переведите в целое число.

Задача 1.2.9

Копейки в рубли

★★☆средняя

Платёжная система хранит суммы в копейках. Выведите сумму в рублях и копейках, как в примерах.

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

Пример 1
Данные в начале программы
kopecks = 12345
Вывод
123 руб. 45 коп.
Пример 2
Данные в начале программы
kopecks = 99
Вывод
0 руб. 99 коп.
Пример 3
Данные в начале программы
kopecks = 50000
Вывод
500 руб. 0 коп.
Подсказка

В рубле 100 копеек.

Задача 1.2.10

Страницы в каталоге

★★☆средняя

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

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

Пример 1
Данные в начале программы
items = 47
per_page = 10
Вывод
Полных страниц: 4
Товаров на неполной странице: 7
Пример 2
Данные в начале программы
items = 30
per_page = 12
Вывод
Полных страниц: 2
Товаров на неполной странице: 6
Подсказка

Та же пара операторов, что в разборе про фильм, — только в другой задаче.

Задача 1.2.11

Длинное SMS

★★☆средняя

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

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

Пример 1
Данные в начале программы
message = "Добрый день! Ваш заказ собран и ждёт вас в пункте выдачи на улице Ленина, дом 5, до пятницы."
Вывод
Символов: 92
Полных частей: 1
Символов в неполной части: 22
Пример 2
Данные в начале программы
message = "Код: 4821"
Вывод
Символов: 9
Полных частей: 0
Символов в неполной части: 9
Подсказка

Длину даёт len(). Её удобно сохранить в переменную: она нужна в трёх местах.

Задача 1.2.12

Сумма заказа из выгрузки

★★☆средняя

Из выгрузки пришли цена (дробная) и количество (целое) — обе строками. Выведите стоимость заказа.

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

Пример 1
Данные в начале программы
price_text = "250.5"
qty_text = "4"
Вывод
Стоимость: 1002.0
Пример 2
Данные в начале программы
price_text = "99.5"
qty_text = "2"
Вывод
Стоимость: 199.0
Подсказка

Цену переводите в float, количество — в int. int("250.5") остановит программу с ошибкой.

Задача 1.2.13

Длительность звонка

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

Телефонная станция хранит длительность звонка в секундах. В детализации нужен формат «часы, минуты, секунды».

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

Пример 1
Данные в начале программы
seconds = 7384
Вывод
7384 с = 2 ч 3 мин 4 с
Пример 2
Данные в начале программы
seconds = 59
Вывод
59 с = 0 ч 0 мин 59 с
Пример 3
Данные в начале программы
seconds = 3600
Вывод
3600 с = 1 ч 0 мин 0 с
Подсказка

В часе 3600 секунд. Минуты считайте не от всех секунд, а от того, что осталось после полных часов.

Задача 1.2.14

Размер файла в мегабайтах

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

Файловый менеджер знает размер файла в байтах. Выведите, сколько это полных мегабайт и сколько байт сверх них. В одном мегабайте 220 байт.

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

Пример 1
Данные в начале программы
size = 5000000
Вывод
Полных мегабайт: 4
Байт сверх них: 805696
Пример 2
Данные в начале программы
size = 1048576
Вывод
Полных мегабайт: 1
Байт сверх них: 0
Пример 3
Данные в начале программы
size = 1000
Вывод
Полных мегабайт: 0
Байт сверх них: 1000
Подсказка

Посчитайте размер мегабайта один раз через ** и сохраните в переменную. Во втором примере размер ровно 1 МБ.

Задача 1.2.15

Сколько до конца пары

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

Пара заканчивается в 11:30. Даны текущие часы и минуты. Выведите, сколько часов и минут осталось до конца пары.

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

Пример 1
Данные в начале программы
now_hours = 10
now_minutes = 14
Вывод
До конца пары: 1 ч 16 мин
Пример 2
Данные в начале программы
now_hours = 11
now_minutes = 5
Вывод
До конца пары: 0 ч 25 мин
Пример 3
Данные в начале программы
now_hours = 9
now_minutes = 0
Вывод
До конца пары: 2 ч 30 мин
Подсказка

Время удобно сравнивать, переведя всё в минуты от начала суток. Разницу потом обратно разложите на часы и минуты.

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

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

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

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