Решение задания 1: Округление вверх и вниз
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: Сумма чисел
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: Счётчик факториала
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: Симулятор кассы
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: Учёт доходов и расходов
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: Числа Фибоначчи
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: Число Армстронга
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 попыток
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: Определение простого числа
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: Упорядоченность цифр
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: Сумма цифр
number = int(input("Введите число: "))
digit_sum = 0
while number > 0:
digit_sum += number % 10
number //= 10
print(f"Сумма цифр: {digit_sum}")
Логика решения: на каждой итерации добавляем последнюю цифру к сумме и отбрасываем её.
Решение дополнительного задания 12: Перевёрнутое число
number = int(input("Введите число: "))
reversed_number = 0
while number > 0:
reversed_number = reversed_number * 10 + number % 10
number //= 10
print(f"Перевёрнутое число: {reversed_number}")
Логика решения: на каждом шаге сдвигаем уже накопленный результат влево на один разряд и прибавляем последнюю цифру исходного числа.