
Тема № 3.2
Декораторы, ошибки и исключения
Практика

Содержание практики
- Решение практических задач с декораторами функций.
- Работа по обработки исключений.
- Блоки try / except.
- Обработка исключений.
- Блоки finally и else.

Задача «Ревью кода 1»
count = 0
p = 0
for i in range(1, 10):
x = int(input())
if x 0:
p = p * x
count = count + 1
if count 0:
print(x)
print(p)
else:
print('NO')
На обработку поступает последовательность из 10 целых чисел. Известно, что вводимые числа по абсолютной величине не превышают 10 6 . Нужно написать программу, которая выводит на экран количество неотрицательных чисел последовательности и их произведение. Если неотрицательных чисел нет, требуется вывести на экран «NO». Найдите все ошибки в этой программе (их ровно 4).
Примечание 1. Число x не превышает по абсолютной величине 10 6 , если −10 6 ≤x ≤10 6 .
Примечание 2. При необходимости вы можете добавить необходимые строки кода.
count = 0
p = 1
for i in range(1,11):
x = int(input())
if x -1:
p = p * x
count = count + 1
if count 0:
print(count)
print(p)
else:
print('NO')

Задача «Ревью кода 2»
mx = 0
s = 0
for i in range(11):
x = int(input())
if x
s = x
if x mx:
mx = x
print(s)
print(mx)
На обработку поступает последовательность из 10 целых чисел. Известно, что вводимые числа по абсолютной величине не превышают 10 6 .
Нужно написать программу, которая выводит на экран сумму всех отрицательных чисел последовательности и максимальное отрицательное число в последовательности. Если отрицательных чисел нет, требуется вывести на экран «NO».
Найдите все ошибки в этой программе (их ровно 5). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
mx = - pow(10, 6)
s = 0
for i in range(1, 11):
x = int(input())
if x
s += x
if 0 x mx:
mx = x
if s
print(s)
print(mx)
else:
print('NO')

Задача «Ревью кода 3»
На обработку поступает последовательность из 7 целых чисел. Известно, что вводимые числа по абсолютной величине не превышают 10 6 .
Нужно написать программу, которая подсчитывает и выводит сумму всех чётных чисел последовательности или 0, если чётных чисел в последовательности нет. Программист торопился и написал программу неправильно.
Найдите все ошибки в этой программе (их ровно 4).
s = 0
for i in range(7):
n = int(input())
if n % 2 == 0:
s = s + n
print(s)
s = 1
for i in range(1, 7):
n = input()
if i % 2 == 0:
s = s + n
print(s)

Задача «Ревью кода 4»
На обработку поступает натуральное число. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 3. Если в числе нет цифр, кратных 3, требуется на экран вывести «NO». Программист торопился и написал программу неправильно.
Найдите все ошибки в этой программе (их ровно 5).
Примечание 1. Число 0 делится на любое натуральное число.
Примечание 2 . При необходимости вы можете добавить нужные строки кода.
n = int(input())
max _ digit = -1
while n 0:
digit = n % 10
if digit % 3 == 0:
if digit max _ digit:
max _ digit = digit
n //= 10
if max _ digit == -1:
print('NO')
else:
print(max _ digit)
n = int(input())
max _ digit = n % 10
while n 0:
digit = n % 10
if digit % 3 == 0:
if digit
digit = max _ digit
n = n % 10
if max _ digit == 0:
print('NO')
else:
print(max _ digit)

Задача «Ревью кода 5»
На обработку поступает натуральное число. Нужно написать программу, которая выводит на экран его первую (старшую) цифру. Программист торопился и написал программу неправильно.
Найдите все ошибки в этой программе (их ровно 2). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
n = int(input())
while n 9:
n //= 10
print(n)
n = int(input())
while n 0:
n %= 10
print(n)

Задача «Ревью кода 6»
На обработку поступает натуральное число. Нужно написать программу, которая выводит на экран произведение цифр введенного числа. Программист торопился и написал программу неправильно.
Найдите все ошибки в этой программе (их ровно 3). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
n = input()
n = int(input())
product = n % 10
product = 1
while n = 10:
while n 0:
digit = n % 10
digit = n % 10
product = product * digit
product = product * digit
n //= 10
n //= 10
print(product)
print(product)

Задача «Ревью кода 7»
total = 0
with open(data.txt, encoding='utf-8') as file:
for _ in file.readlines:
total == total + 1
print(total)
Дан файл data.txt. Требовалось написать программу, которая определяет, сколько строк содержится в данном файле, и выводит полученный результат. Программист торопился и написал программу неправильно.
Найдите и исправьте все ошибки, допущенные в этой программе (их ровно 3).
Примечание . Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
total = 0
with open('data.txt', encoding='utf-8') as file:
for _ in file.readlines():
total = total + 1
print(total)

Задача «Подели и возведи»
Необходимо ввести два целых числа. Если числа делятся друг на друга, то поделить и возвести результат в квадрат, иначе вывести сообщение «Что-то пошло не так…».
Напишите такую программу и определите виды ошибок подходящие для данной задачи.
Примечание. Обязательно использование try-except.
Результат:
try:
a = input("Введите первое число: ")
b = input("Введите второе число: ")
result = int(a)/int(b)
except (ValueError, ZeroDivisionError):
print("Что-то пошло не так...")
else:
print("Результат в квадрате: ", result**2)

Задача «Вот и сказочке конец, а кто слушал – молодец»
Необходимо ввести два целых числа. Если числа делятся друг на друга, то поделить и возвести результат в квадрат, иначе вывести сообщение «Что-то пошло не так…».
Также в любом случае вывести в конце сообщение «Вот и сказочке конец, а кто слушал – молодец»
Напишите такую программу и определите виды ошибок подходящие для данной задачи.
Примечание. Обязательно использование try-except.
Результат:
try:
a = input("Введите первое число: ")
b = input("Введите второе число: ")
result = int(a)/int(b)
except (ValueError, ZeroDivisionError):
print("Что-то пошло не так...")
else:
print("Результат в квадрате: ", result**2)
finally:
print("Вот и сказочке конец, а кто слушал - молодец.")
![Задача «float или не float – вот в чём вопрос» Составьте список, содержащий 3-5 элементов. В интерактивном режиме запросите у пользователя значения для каждого элемента списка, составьте соответствующий словарь. Алгоритм должен содержать проверку одинаковости типов вводимых значений. Под проверкой одинаковости подразумевается попытка преобразования вводимых данных в числовой формат: float, а в случае невозможности преобразовать остаётся str. Результат: a = ['first', 'second', 'third', 'fourth', 'fifth'] b = [] for i in range(5): print(f'Введите аргумент № {i + 1}') x = input() try: x = float(x) except ValueError: print('Упсс - нельзя привести к числу! записываем аргумент как есть' ) b.append(x) c = dict(zip(a, b)) print(c)](http://fsd.mir-olymp.ru/html/2025/04/20/i_68048d40be2c0/img_phpgHmPCl_-3.2_11.jpg)
Задача «float или не float – вот в чём вопрос»
Составьте список, содержащий 3-5 элементов. В интерактивном режиме запросите у пользователя значения для каждого элемента списка, составьте соответствующий словарь. Алгоритм должен содержать проверку одинаковости типов вводимых значений. Под проверкой одинаковости подразумевается попытка преобразования вводимых данных в числовой формат: float, а в случае невозможности преобразовать остаётся str.
Результат:
a = ['first', 'second', 'third', 'fourth', 'fifth']
b = []
for i in range(5):
print(f'Введите аргумент № {i + 1}')
x = input()
try:
x = float(x)
except ValueError:
print('Упсс - нельзя привести к числу! записываем аргумент как есть' )
b.append(x)
c = dict(zip(a, b))
print(c)

Задача «Полужирный, курсив, подчёркивание»
Напишите программу на Python для создания цепочки декораторов функций (полужирный, курсив, подчеркивание).
"hello world"
Результат:
def make _ bold(fn):
def wrapped():
return "" + fn() + ""
return wrapped
def make _ italic(fn):
def wrapped():
return "" + fn() + ""
return wrapped
def make _ underline(fn):
def wrapped():
return "" + fn() + ""
return wrapped
@make _ bold
@make _ italic
@make _ underline
def hello():
return "hello world"
print(hello())

Ваши
вопросы

Рефлексия
- Что было самым интересным на сегодняшнем занятии?
- Что было самым сложным?