✅ Решения заданий

⚠️ Рекомендация: попробуйте решить задания самостоятельно, прежде чем смотреть ответы. Решения — это последняя инстанция, когда собственные попытки исчерпаны.

Решение задания 1: Округление вверх и вниз

📄 task_01_rounding.py
import math

number = float(input("Введите число: "))
ceil_value = math.ceil(number)
floor_value = math.floor(number)

print(f"Округление вверх: {ceil_value}")
print(f"Округление вниз: {floor_value}")

Логика решения: math.ceil округляет к ближайшему большему целому, а math.floor — к меньшему. f-strings делают вывод читаемым.

Решение задания 2: Сумма чисел

📄 task_02_sum.py
num = int(input("Введите число: "))
sum_result = 0
i = 1

while i <= num:
    sum_result += i
    i += 1

print(f"Сумма чисел от 1 до {num} = {sum_result}")

Логика решения: переменная sum_result накапливает сумму, а i проходит от 1 до num. На каждой итерации добавляется текущее значение i.

Решение задания 3: Счётчик факториала

📄 task_03_factorial.py
import math

number = int(input("Введите число: "))
factorial = 1
i = 1

while i <= number:
    factorial *= i
    i += 1

factorial2 = math.factorial(number)

print(f"Факториал числа {number} первым способом: {factorial}")
print(f"Факториал числа {number} вторым способом: {factorial2}")
print(f"Результаты равны? {factorial == factorial2}")

Логика решения: первый способ вычисляет произведение чисел от 1 до number в цикле. Второй использует встроенную функцию math.factorial. Результаты сравниваются оператором ==.

Решение задания 4: Симулятор кассы

📄 task_04_cash_register.py
import math

total = 0.0

while True:
    price = float(input("Введите цену товара: "))
    if price == 0:
        break
    total += price

rounded_total = round(total)
payment = math.ceil(rounded_total / 100) * 100
change = payment - rounded_total

print(f"Сумма покупки: {rounded_total} евро")
print(f"Покупатель передал: {payment} евро")
print(f"Сдача: {change} евро")

Логика решения: цикл while True читает цены до ввода 0. Сумма округляется до целого через round. Количество купюр по 100 евро вычисляется округлением вверх, чтобы покрыть всю сумму. Сдача — разница между оплатой и суммой.

Решение задания 5: Учёт доходов и расходов

📄 task_05_budget.py
income = 0
expenses = 0

while True:
    value = float(input("Введите доход, расход или '0' для получения итога: "))
    if value == 0:
        break
    if value > 0:
        income += value
    else:
        expenses += abs(value)

balance = income - expenses

print(f"Доходы: {income}")
print(f"Расходы: {expenses}")
print(f"Итоговый баланс: {balance}")

Логика решения: положительные значения добавляются к income, отрицательные — к expenses через abs. Баланс — разница доходов и расходов.

Решение задания 6: Числа Фибоначчи

📄 task_06_fibonacci.py
n = int(input("Введите количество чисел: "))
a, b = 0, 1
i = 0

while i < n:
    print(a, end=" ")
    a, b = b, a + b
    i += 1
print()

Логика решения: переменные a и b хранят два последовательных числа Фибоначчи. На каждой итерации печатается a, затем пара обновляется. Цикл повторяется n раз.

Решение задания 7: Число Армстронга

📄 task_07_armstrong.py
number = int(input("Введите число: "))
original_number = number
num_digits = 0
temp = number

while temp > 0:
    num_digits += 1
    temp //= 10

sum_of_powers = 0
temp = number

while temp > 0:
    digit = temp % 10
    sum_of_powers += digit ** num_digits
    temp //= 10

if original_number == sum_of_powers:
    print(f"Число {original_number} является числом Армстронга.")
else:
    print(f"Число {original_number} не является числом Армстронга.")

Логика решения: сначала считаем количество цифр. Затем в новом цикле извлекаем каждую цифру, возводим в степень num_digits и накапливаем сумму. Если сумма равна исходному числу — это число Армстронга.

Решение задания 8: Угадай за 5 попыток

📄 task_08_guess_number.py
import random

secret_number = random.randint(1, 10)
attempts = 5

while attempts > 0:
    guess = int(input("Попробуйте угадать число от 1 до 10: "))
    if guess == secret_number:
        print("Поздравляем! Вы угадали число.")
        break
    attempts -= 1
    if attempts > 0:
        print(f"Неверно! У вас осталось {attempts} попытки.")
    else:
        print(f"Вы не угадали. Загаданное число было: {secret_number}.")

Логика решения: цикл продолжается, пока есть попытки. При правильном ответе срабатывает break. При неправильном уменьшается счётчик, и, если попытки кончились, выводится загаданное число.

Решение задания 9: Определение простого числа

📄 task_09_prime.py
number = int(input("Введите число: "))

if number <= 1:
    print("Число должно быть больше 1.")
else:
    is_prime = True
    i = 2
    while i * i <= number:
        if number % i == 0:
            is_prime = False
            break
        i += 1

    if is_prime:
        print(f"Число {number} является простым.")
    else:
        print(f"Число {number} не является простым.")

Логика решения: числа меньше или равные 1 сразу отвергаются. Для остальных проверяются делители от 2 до √number. Если делитель найден, число составное.

Решение задания 10: Упорядоченность цифр

📄 task_10_sorted_digits.py
number = int(input("Введите число: "))
previous_digit = number % 10
number //= 10
is_sorted = True

while number > 0:
    current_digit = number % 10
    if current_digit > previous_digit:
        is_sorted = False
        break
    previous_digit = current_digit
    number //= 10

if is_sorted:
    print("Цифры упорядочены по возрастанию.")
else:
    print("Цифры не упорядочены по возрастанию.")

Логика решения: цифры извлекаются справа налево. Для возрастания каждая следующая справа цифра должна быть не меньше предыдущей. Если находим нарушение, устанавливаем флаг is_sorted = False.

Решение дополнительного задания 11: Сумма цифр

📄 task_11_digit_sum.py
number = int(input("Введите число: "))
digit_sum = 0

while number > 0:
    digit_sum += number % 10
    number //= 10

print(f"Сумма цифр: {digit_sum}")

Логика решения: на каждой итерации добавляем последнюю цифру к сумме и отбрасываем её.

Решение дополнительного задания 12: Перевёрнутое число

📄 task_12_reverse.py
number = int(input("Введите число: "))
reversed_number = 0

while number > 0:
    reversed_number = reversed_number * 10 + number % 10
    number //= 10

print(f"Перевёрнутое число: {reversed_number}")

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