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

тп5

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

ГУАП

КАФЕДРА 41

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

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

Ассистент

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

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

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

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

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

РЕКУРСИЯ И ЗАМЫКАНИЯ

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

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

СТУДЕНТ ГР. №

4116

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

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

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

Цель работы: познакомиться с основными способами объявления и использования рекурсивных функций, а также механизма замыканий в Python.

Варинат 4.

Задания на рекурсию (6, 12, 13, 14)

Задание 6: Напишите рекурсивную функцию вычисления числа Фибоначчи fibonacci, на вход которой подается целочисленное значение n

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

def fibonacci(n:int):

if n==1:

return 0

if n==2 or n==3:

return 1

else:

return fibonacci(n-1) + fibonacci(n-2)

n = int(input('Введите число: '))

print(fibonacci(n))

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

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

from fib import fibonacci

def test_fibonacci1():

assert fibonacci(10) == 34

def test_fibonacci2():

assert fibonacci(7) == 8

Рисунок 2- корректная работы теста для программы 1

Задание 12. Пользователь с клавиатуры вводит целое число N. Напишите рекурсивную функцию check_pow2, принимающую на вход 2 аргумента (первый аргумент n, второй аргумент check_value=1) и проверяющую то, является ли введенное значение точной степенью двойки. Если да – выведите в терминал «YES», иначе – «NO» (без кавычек).

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

def check_pow2(n: int, check_value: int):

if n == check_value:

return "Yes"

elif n > check_value and n < 2:

return "No"

else:

return (check_pow2(n / 2, check_value))

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

print(check_pow2(n, check_value=1))

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

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

from check_pow2 import check_pow2

def test_check_pow21():

assert check_pow2(1024, 1) == 'Yes'

def test_check_pow22():

assert check_pow2(135, 1) == 'No'

Рисунок 4- корректная работы теста для программы 2

Задание 13: Напишите рекурсивную функцию negative_sum, которой на вход подается список из целочисленных значений и возвращающую сумму отрицательных элементов списка

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

def negative_sum(my_list: list[int]) -> int:

print(my_list)

if len(my_list) == 1 and my_list[0]<0:

return my_list[0]

elif len(my_list) == 1 and my_list[0]>0:

return my_list[0]-my_list[0]

elif my_list[0] < 0:

return my_list[0] + negative_sum(my_list[1:])

else:

return negative_sum(my_list[1:])

my_list = [1, -2, 4, 6, -13]

print(negative_sum(my_list))

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

Код теста для программы 3:

from negative_sum import negative_sum

def test_negative_sum1():

assert negative_sum([3,-5,-7,9,10,-7]) == -19

def test_negative_sum2():

assert negative_sum([43, 67,-100, -1, 8]) == -101

Рисунок 6- корректная работа теста программы 3

Задание 14. Напишите рекурсивную функцию recursion_pow, на вход которой подается два целочисленных значения (х – значение, возводимое в степень и у – степень). Функция должна возвращать

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

def recursion_pow(x: int, y: int):

if y == 1:

return x

else:

return x * recursion_pow(x, y - 1)

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

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

print(recursion_pow(x, y))

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

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

from recursion_pow import recursion_pow

def test_recursion_pow1():

assert recursion_pow(2, 7) == 128

def test_recursion_pow2():

assert recursion_pow(3, 4) == 81

Рисунок 8- корректная работа теста программы 4

Задания на замыкания (5, 6, 9):

Задание 5. На вход функции closure_comparison поступает один из символов «>», «<», «=» Используя механизм замыканий, сравните два значения, подаваемые на вход возвращаемой функции. В результате должно возвращаться True, если результат сравнения ИСТИНА, иначе – False. В том случае, когда на вход closure_ comparison подается неизвестный символ – результат всегда False.

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

def closure_comparison(srav):

def sravnenie(a,b):

if srav=='>' or srav=='<' or srav =='==':

return (eval(str(a) + srav + str(b)))

else:

return (False)

return sravnenie

assert closure_comparison('<')(1,3)==True

assert closure_comparison('>')(10,100)== False

print(closure_comparison('==')(20,10))

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

Задание 6. На вход функции closure_del_str подается строка. Используя механизм замыканий, удалите из строки задаваемый в возвращаемой функции символ и верните полученный результат.

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

def closure_del_str(my_str:str)-> str:

def symbol(a='р'):

return(my_str.translate({ord(a): None }))

return symbol

assert closure_del_str('руоташрарвры')('р') =='уоташавы'

assert closure_del_str('работа')("р") =='абота'

b= closure_del_str('Привет, приветик , привет')()

print(b)

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

Задание 9. Напишите функцию closure_list_pow, на вход которой подается список целочисленных или вещественных значений. Используя механизм замыкания верните функцию, принимающую значение степени, в которую необходимо возвести каждый элемент списка и возвращающую полученный результат.

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

def closure_list_pow(my_list:list)-> list:

def pow(a):

new_list= [x **a for x in my_list]

return (new_list)

return pow

assert closure_list_pow([1,2,3,4])(2)==[1,4,9,16]

assert closure_list_pow([1,2,1,4,10])(4)==[1,16,1,256, 10000]

print (closure_list_pow([1,2,5,7,8,9])(3))

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

Вывод: ознакомилась с основными способами объявления и использования рекурсивных функций, а также механизма замыканий в Python

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