Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТП6

.docx
Скачиваний:
0
Добавлен:
12.04.2025
Размер:
67.11 Кб
Скачать

ГУАП

КАФЕДРА 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ассистент

Е.К. Григорьев

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №6

ДЕКОРАТОРЫ И ГЕНЕРАТОРНЫЕ ФУНКЦИИ

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4116

.

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

Цель работы: познакомиться с основными способами использования декораторов и генераторов в Python.

Вариант 4:

Часть 1. Задания на декораторы (1,6,9):

Задание 1. Напишите декоратор pow_list_result, который будет возводить в квадрат результирующее значение (элементы списка) функции sum_list, на вход которой подается целочисленный список и возвращается сумма его элементов.

Код программы 1 с тестами:

def sum_list(func):

def wrapper(my_list):

return sum(func(my_list))

return wrapper

@sum_list

def pow_list_result(my_list):

return [x ** 2 for x in my_list]

assert pow_list_result([1,2])==5

assert pow_list_result([1,2,4])==21

my_list = [1, 2, 3, 4]

print(pow_list_result(my_list))

Рисунок 1- результат работы программы 1

Задание 6. Напишите декоратор fahrenheit, который будет переводить в градусы Фаренгейта возвращаемое значение функцией temperature_celsius, на вход которой подается значение температуры в градусах Цельсия, и оно же возвращается.

Код программы 2 с тестами:

def fahrenheit(func):

def wrapper(c):

c = 1.8 * func(c) + 32

return c

return wrapper

@fahrenheit

def temperature_celsius(c):

return c

assert temperature_celsius(40)== 104.0

assert temperature_celsius(32.5)== 90.5

c= float(input("Введите градусы: "))

print (temperature_celsius(c))

Рисунок 2- результат работы программы 2

Задание 9. Напишите декоратор time_run, вычисляющий время выполнения декорируемой функции и возвращающий время выполнения вместо результата декорируемой функции. В качестве декорируемой напишите функцию algebraic_sum, на вход которой подается два значения N и k (по умолчанию равно 2). Функция должна возвращать результат следующего выражения: 1^k + 2^k + 3^k + … + N^k .

Код программы 3:

import time

def time_run(func):

def wrapper (n,k):

start_time =time.perf_counter()

func(n, k)

end_time= time.perf_counter()

return (end_time - start_time)/0.001

return wrapper

@time_run

def algebraic_sum(n, k=2):

k=0

for i in range(1,n+1):

k+= i**k

return k

print (f'{algebraic_sum(3,2):.11f}')

Рисунок 3- результат работы программы 3

Часть 2. Задания на генераторы (6, 10, 11)

Задание 6. Напишите генераторную функцию alphabet, возвращающую по запросу буквы английского алфавита (в строгой последовательности) в нижнем регистре.

Код программы 4:

def alphabet():

for letter in range(ord('a'),ord('z')+1):

yield chr(letter)

for letter in alphabet():

print(letter,end = " ")

Рисунок 4- результат работы программы 4

Задание 10. Напишите генераторную функцию list_mod, на вход которой подается список целочисленных значений и значение k. Функция должна возвращать только те элементы списка, значение которых удовлетворяют следующему условию: list_mode[i] mod k == 0.

Код программы 5 с тестами:

def list_mod (my_list:list, k):

for i in my_list:

if i % k==0:

yield i

assert list(list_mod([1, 2, 4, 7], 3)) == []

assert list(list_mod([-10, -7, -6, 0, 3, 5, 9, 13], 3)) == [-6, 0, 3, 9]

my_list=[1,2,3,-4,5,6,7,8,9,10]

k=int (input("Введите k: "))

for i in list_mod(my_list,k):

print(i)

Рисунок 5- результат работы программы 5

Задание 11. Напишите генераторную функцию list_odd, на вход которой подается список целочисленных значений. Функция должна возвращать только те четные значения из поданного на ее вход списка

Код программы 6 с тестами:

def list_mod (my_list:list, k):

for i in my_list:

if i % k==0:

yield i

assert list(list_mod([1, 2, 4, 7], 3)) == []

assert list(list_mod([-10, -7, -6, 0, 3, 5, 9, 13], 3)) == [-6, 0, 3, 9]

my_list=[1,2,3,-4,5,6,7,8,9,10]

k=int (input("Введите k: "))

for i in list_mod(my_list,k):

print(i,end = " ")

Рисунок 6- результат работы программы 6

Вывод: изучены основные способы использования декораторов и генераторов в Python.

Соседние файлы в предмете Технологии программирования