✅ Решения: Практикум 2

⚡ Кратко

Все 11 задач решаются по схеме: ввод → преобразование типа → условие → вывод. Ключевые техники: цепочные сравнения, логические операторы, тернарный оператор, проверка истинности строки, подсчёт отрицательных чисел для знака произведения, градиентный налог.

Решение 1. Упорядочить числа по возрастанию

📄 solutions/task_01_ordered.py
num1 = int(input("Введите первое число: "))
num2 = int(input("Введите второе число: "))
num3 = int(input("Введите третье число: "))

if num1 < num2 < num3:
    print("Числа упорядочены по возрастанию.")
else:
    print("Числа не упорядочены по возрастанию.")

Логика: цепочное сравнение num1 < num2 < num3 истинно только тогда, когда каждое следующее число больше предыдущего. Это эквивалентно (num1 < num2) and (num2 < num3), но короче.

Решение 2. Большее число

📄 solutions/task_02_max.py
num1 = int(input("Введите первое число: "))
num2 = int(input("Введите второе число: "))

if num1 > num2:
    print(f"Большее число: {num1}")
elif num1 < num2:
    print(f"Большее число: {num2}")
else:
    print("Числа равны.")

Логика: сначала проверяем «больше», затем «меньше». Если ни то, ни другое не выполняется, числа равны. Обратите внимание: в PDF вместо значения переменной ошибочно выводилась строка "num1"; здесь использована f-string.

Решение 3. Определение чётности числа

📄 solutions/task_03_parity.py
num = int(input("Введите число: "))

# Обычный if-else
if num % 2 == 0:
    print("Чётное")
else:
    print("Нечётное")

# Тернарный оператор
result = "Чётное" if num % 2 == 0 else "Нечётное"
print(result)

Логика: остаток от деления на 2 равен 0 для чётных чисел и 1 для нечётных. Тернарный оператор позволяет выбрать строку в одну строку.

Решение 4. Категории возраста

📄 solutions/task_04_age.py
age = int(input("Введите возраст: "))

if age < 12:
    print("Вы ребёнок.")
elif age < 18:
    print("Вы подросток.")
elif age < 60:
    print("Вы взрослый.")
else:
    print("Вы пожилой.")

Логика: благодаря elif проверки идут сверху вниз. Если возраст не меньше 12, переходим к следующей проверке. Граница 18 включается в «взрослый», потому что условие age < 18 для 18 ложно.

Решение 5. Существование треугольника

📄 solutions/task_05_triangle.py
a = int(input("Введите первую сторону: "))
b = int(input("Введите вторую сторону: "))
c = int(input("Введите третью сторону: "))

if a + b > c and a + c > b and b + c > a:
    print("Такой треугольник может существовать.")
else:
    print("Такого треугольника не существует.")

Логика: для существования треугольника сумма любых двух сторон должна быть строго больше третьей. Все три условия объединены через and.

Решение 6. Пустая строка

📄 solutions/task_06_empty.py
text = input("Введите строку: ")

if text:
    print("Строка не пуста.")
else:
    print("Строка пуста.")

Логика: пустая строка в Python считается ложным значением (falsy). Условие if text: истинно для любой непустой строки.

Решение 7. Определение квадранта

📄 solutions/task_07_quadrant.py
x = float(input("Введите координату x: "))
y = float(input("Введите координату y: "))

if x > 0 and y > 0:
    print("Точка находится в первом квадранте.")
elif x < 0 and y > 0:
    print("Точка находится во втором квадранте.")
elif x < 0 and y < 0:
    print("Точка находится в третьем квадранте.")
elif x > 0 and y < 0:
    print("Точка находится в четвёртом квадранте.")
else:
    print("Точка находится на одной из осей.")

Логика: знаки координат определяют квадрант. Если хотя бы одна координата равна нулю, точка попадает на ось — этот случай обрабатывает else.

Решение 8. Допустимые значения времени

📄 solutions/task_08_time.py
hours = int(input("Введите часы: "))
minutes = int(input("Введите минуты: "))

if 0 <= hours < 24 and 0 <= minutes < 60:
    print("Корректное время.")
else:
    print("Некорректное время.")

Логика: цепочные сравнения 0 <= hours < 24 и 0 <= minutes < 60 проверяют диапазон. Оператор and требует истинности обоих условий.

Решение 9*. Знак произведения

📄 solutions/task_09_product_sign.py
a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
c = int(input("Введите третье число: "))

negative_count = (a < 0) + (b < 0) + (c < 0)

if negative_count % 2 == 0:
    print("Произведение положительное.")
else:
    print("Произведение отрицательное.")

Логика: произведение положительно, когда количество отрицательных множителей чётное (0 или 2). В Python True == 1 и False == 0, поэтому сумма булевых значений равна количеству отрицательных чисел.

Решение 10. Расчёт налога

📄 solutions/task_10_tax.py
income = float(input("Введите доход: "))

if income <= 10000:
    tax = income * 0.05
elif income <= 50000:
    tax = 10000 * 0.05 + (income - 10000) * 0.10
else:
    tax = 10000 * 0.05 + 40000 * 0.10 + (income - 50000) * 0.20

net_income = income - tax

print(f"Налог: {tax}")
print(f"Итоговая сумма после уплаты налога: {net_income}")

Логика: налог считается по градиентной шкале. Для дохода 45,000: 5% с первых 10,000 = 500, 10% с оставшихся 35,000 = 3,500. Итого 4,000, а не 4,500, как в PDF. Возможно, в PDF допущена опечатка; формула выше соответствует условию задачи.

⚠️ Важно: Пример вывода в PDF для дохода 45,000 показывает налог 4,500. Если следовать описанию «5% на 10,000 и 10% на превышение», правильный налог: 10000 * 0.05 + 35000 * 0.10 = 500 + 3500 = 4000. Мы придерживаемся логики условия, а не опечатки в примере.

Решение 11. Проверка экстремальной погоды

📄 solutions/task_11_weather.py
temperature = float(input("Введите температуру: "))
wind_speed = float(input("Введите скорость ветра: "))
precipitation = float(input("Введите уровень осадков: "))

extreme = (
    (temperature < -10 and wind_speed > 20)
    or temperature > 35
    or precipitation > 50
)

if extreme:
    print("Предупреждение: экстремальная погода!")
else:
    print("Погода в пределах нормы.")

Логика: сложное условие разбито на промежуточную переменную extreme. Это улучшает читаемость и облегчает отладку. Можно было записать и в одну строку внутри if, но именованная переменная делает намерение явным.