Скачиваний:
1
Добавлен:
03.06.2024
Размер:
23.02 Кб
Скачать

ГУАП

КАФЕДРА № 41

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

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

ассистент

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

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

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

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

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

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

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

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

СТУДЕНТ ГР. №

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

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

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

1 Цель работы

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

2 Ход работы

Вариант: 16

1.4 Напишите рекурсивную функцию recursion_palindrom, на вход которой подается строка. Если строка представляет собой палиндром, то функция должна вернуть значение – True, иначе – False.

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

def recursion_palindrom(string: str):

if len(string) <= 1:

return True

else:

if string[0] == string[-1]:

return recursion_palindrom(string[1:-1])

else:

return False

inp = input()

while inp.isdigit():

print("Введите строку")

inp = input()

assert recursion_palindrom('abba') == True

assert recursion_palindrom('abbb') == False

print(recursion_palindrom(inp))

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

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

def fibonacci(n: int):

if n == 1:

return 0

elif n == 2:

return 1

else:

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

inp = int(input())

assert fibonacci(1) == 0

assert fibonacci(2) == 1

print(fibonacci(inp))

1.7 Напишите рекурсивную функцию pow_n, на вход которой подается два значения n и k (по умолчанию равно 8). Функция должна возвращать значение следующего вида: . Не учитывая неопределённости.

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

def pow_n(n: float, k: int = 8):

if k == 0:

return 1

elif k > 0:

return n*pow_n(n, k-1)

elif k < 0:

return 1/(n*pow_n(n, abs(k)-1))

inp1 = int(input())

inp2 = int(input())

while inp1==0 and inp2<0:

print('Деление на ноль, при n==0, вводите k>0')

inp1 = int(input())

inp2 = int(input())

assert (pow_n(2)) == 256

assert (pow_n(2, -2)) == 0.25

print(pow_n(inp1, inp2))

1.11 Напишите рекурсивную функцию remove_brackets, которой на вход подается строка, содержащая одну пару из открывающейся и закрывающейся скобки. Функция должна вернуть строку, состоящую из символов, находящихся в скобках исходной строки.

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

def remove_brackets(inp: str):

if inp.find('(') == -1 and inp.find(')') == -1:

return inp

elif '(' in inp:

return remove_brackets(inp[inp.find('(')+1:])

else:

return remove_brackets(inp[0: inp.find(')')])

assert remove_brackets('qwe(rty)') == 'rty'

assert remove_brackets('q(wert)y') == 'wert'

inp = str(input())

print(remove_brackets(inp))

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

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

def closure_comparison(symbol: str):

if symbol in ('>', '<', '=='):

def comparison(a: str, b: str):

if eval(str(a)+symbol+str(b)):

return True

else:

return False

return comparison

else:

return False

assert (closure_comparison('>')(6, 5)) == True

assert (closure_comparison('<')(10, 5)) == False

inp = str(input())

inp2 = input()

inp3 = input()

print(closure_comparison(inp)(inp2, inp3))

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

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

def closure_del_str(s: str):

def delete(symbol='b'):

result = s.replace(symbol, '')

return result

return delete()

assert closure_del_str('abcde') == 'acde'

assert closure_del_str('aaaad') == 'aaaad'

inp = str(input())

print(closure_del_str(inp))

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

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

def closure_count_str(s: str):

def count_str(symbol: str):

result = s.count(symbol)

return result

return count_str

assert closure_count_str('abbb')('b') == 3

assert closure_count_str('ccccc')('c') == 5

inp1 = str(input())

inp2 = str(input())

print(closure_count_str(inp1)(inp2))

3 Вывод

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

Соседние файлы в папке 5