/
school120
/
if-else
Обзор
Документация
Войти
/
school120
/
if-else
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
task1.py
101 строка
11 KB
Gorbach
initial commit
22 сен 2025, 11:38
22 сен 2025, 11:38
4ea6b66
Код
Авторство
О чём код?
# Эта программа решает задачу «Билет в кино». Она получает от пользователя три числа, проверяет правила из условия # и вычисляет итоговую стоимость билета с учётом возрастных скидок и воскресной акции, затем выводит результат. # Комментарии ниже написаны максимально подробно, чтобы разобрался даже человек, который никогда не писал код. # --------------------------------------------------------------- # БЛОК №1. СЧИТЫВАНИЕ ДАННЫХ С КЛАВИАТУРЫ # --------------------------------------------------------------- # В Python любая программа может общаться с пользователем через функцию input(). # Когда доходит до вызова input(), программа ставит выполнение на паузу и ждёт, пока мы что-то напечатаем и нажмём Enter. # Например, пользователь может ввести: 25 5 1 # Это значит: возраст 25 лет, день недели номер 5 (пятница), зал №1. # Метод .split() разбивает полученный текст на отдельные кусочки (слова), разделённые пробелами. # Для строки "25 5 1" метод split() вернёт список строк ['25', '5', '1']. # Функция map() позволяет применить одну и ту же операцию ко всем элементам списка. Здесь мы применяем int() к каждой строке, # превращая строки в настоящие числа: '25' -> 25, '5' -> 5, '1' -> 1. # После превращения мы говорим Python распределить эти три числа в три отдельные переменные age, day и hall. # Такое присваивание через запятую называется распаковкой: первое число попадает в age, второе в day, третье в hall. # Переменная — это «ящик», который хранит значение, а имя переменной — наклейка на этом ящике. age, day, hall = map(int, input().split()) # --------------------------------------------------------------- # БЛОК №2. ПРОВЕРКА, ЧТО ВВЕДЁННЫЕ ДАННЫЕ СМЫСЛОВЫЕ # --------------------------------------------------------------- # Нам нужно убедиться, что пользователь не ввёл чепуху. # Мы проверяем сразу несколько условий, и если хотя бы одно условие истинно, надо вывести 0. # В строке ниже используется ключевое слово if. Оно означает «если». После условия ставится двоеточие «:» — так Python # понимает, что дальше (под отступом) находится блок команд, которые нужно выполнить, если условие истинно. # Отступ (четыре пробела) показывает, какие строки относятся к блоку. Это обязательное правило синтаксиса Python. # Расписываем каждую часть выражения для ясности: # age <= 0 -> возраст меньше или равен нулю, так не бывает. # day <= 0 -> номер дня недели меньше единицы, тоже ошибка. # day > 7 -> номер дня недели больше 7, а в неделе всего 7 дней. # hall < 1 -> номер зала меньше 1, зала «0» не существует. # hall > 2 -> номер зала больше 2, по условию есть только два зала. # Между отдельными проверками стоит логический оператор or (по-русски «или»). # Оператор or даёт True (истину), если хотя бы одна проверка обнаружила неправильные данные. if age <= 0 or day <= 0 or day > 7 or hall < 1 or hall > 2: # Все строки внутри блока if начинаются с отступа. Это значит, что они выполняются только когда условие выше истинно. # Раз мы попали сюда, значит данные некорректны. По условию задачи в такой ситуации надо вывести 0. # Функция print() выводит значение на экран и автоматически переносит курсор на новую строку. print(0) else: # Ключевое слово else переводится как «иначе». Оно срабатывает, если условие в if оказалось ложным. # Сюда мы попадём только если ни одно из условий ошибочности не сработало. Значит, данные нормальные и можно считать цену. # --------------------------------------------------------------- # БЛОК №3. НАЧАЛО РАСЧЁТА ЦЕНЫ БЕЗ СКИДОК # --------------------------------------------------------------- # По умолчанию билет стоит 300 рублей: это базовая цена, прежде чем применены скидки. # Переменная price будет хранить текущую цену, которую мы будем постепенно уменьшать. price = 300 # --------------------------------------------------------------- # БЛОК №4. ВОЗРАСТНЫЕ СКИДКИ # --------------------------------------------------------------- # Ниже идёт цепочка if / elif / elif. Python проверяет условия сверху вниз и выполняет только первую подходящую ветку. # После того как одна ветка сработала, остальные уже не проверяются. Ключевое слово elif читается как «else if», то есть # «иначе, если». Оно позволяет проверять дополнительные варианты. # Условие age < 7: если возраст меньше 7 лет, запускается эта ветка. Знак «*» означает умножение. # Запись price *= .5 — сокращённая форма price = price * 0.5. Точка перед пятёркой показывает, что это дробное число 0.5, # которое означает «половина» (50%). Проще говоря, price *= .5 делит цену пополам. # Получается, что цена уменьшается на 50%. Была 300 -> станет 150. if age < 7: price *= .5 # Если первое условие было ложным, проверяем следующее. Диапазон 7 <= age <= 17 означает «возраст от 7 до 17 включительно». # Здесь скидка 30%, то есть клиента просят заплатить только 70% от базовой суммы. 0.7 — это 70% в десятичной форме. # Оператор "*=" снова обозначает «умножить и сохранить результат в переменной price». elif 7 <= age <= 17: price *= .7 # Третья проверка: возраст 60 или больше. Для пенсионеров действует скидка 40%, значит надо заплатить 60%. # Число 0.6 — это именно 60%. Запись price *= .6 уменьшает текущую цену ещё сильнее. # Если возраст 30 лет, то ни одно из условий выше не выполнится, и цена останется равной 300. elif age >= 60: price *= .6 # Если возраст не попал ни под одну скидку, дополнительных действий не требуется — переменная price останется равной 300. # --------------------------------------------------------------- # БЛОК №5. ДОПОЛНИТЕЛЬНАЯ АКЦИЯ ДЛЯ ЗАЛА №2 В ВОСКРЕСЕНЬЕ # --------------------------------------------------------------- # Это независимая проверка. Она работает вне зависимости от того, была ли скидка по возрасту. # Условие hall == 2 проверяет, что человек пойдёт именно во второй зал. Двойное равенство «==» означает проверку равенства. # Одновременно смотрим, что day == 7, то есть воскресенье. Оператор and («и») требует, чтобы оба условия были истинны. if hall == 2 and day == 7: # Цена ещё раз уменьшается на 20%, оставляя 80% от текущего значения. # Например, если после возрастной скидки цена стала 210 рублей, умножение на 0.8 даст 168 рублей. # Число 0.8 читается как «ноль целых 8 десятых» — это 80%. price *= .8 # --------------------------------------------------------------- # БЛОК №6. ФОРМАТИРОВАНИЕ И ВЫВОД ИТОГОВОЙ ЦЕНЫ # --------------------------------------------------------------- # На предыдущих этапах мы использовали числа с плавающей точкой (например, 0.7 или 0.8). # Из-за этого переменная price тоже стала типом float (число с десятичной частью). # Нам нужно вывести целое число рублей без копеек. Функция int() отбрасывает дробную часть. # Пример: int(168.75) -> 168. Это допустимо, потому что посчитать цену с точностью до копеек не требовалось. # Принт работает так: вычисляет то, что стоит в скобках, а затем печатает результат на экране. print(int(price))