ia-guiao-de-programacao-fun.../aula1.py

121 lines
2.7 KiB
Python
Raw Permalink Normal View History

# Exercicio 1.1
2024-09-17 10:51:44 +00:00
def comprimento(lista):
return comprimento(lista[1:]) + 1 if lista else 0
2024-09-17 10:51:44 +00:00
# Exercicio 1.2
2024-09-17 10:51:44 +00:00
def soma(lista):
return soma(lista[1:]) + lista[0] if lista else 0
2024-09-17 10:51:44 +00:00
# Exercicio 1.3
2024-09-17 10:51:44 +00:00
def existe(lista, elem):
return False if not lista else (
True if lista[0] == elem else existe(lista[1:], elem))
2024-09-17 10:51:44 +00:00
# Exercicio 1.4
2024-09-17 10:51:44 +00:00
def concat(l1, l2):
return l1 if not l2 else concat(l1 + [l2[0]], l2[1:])
2024-09-17 10:51:44 +00:00
# Exercicio 1.5
2024-09-17 10:51:44 +00:00
def inverte(lista):
return [lista[-1]] + inverte(lista[:-1]) if lista else []
2024-09-17 10:51:44 +00:00
# Exercicio 1.6
2024-09-17 10:51:44 +00:00
def capicua(lista):
return lista[0] == lista[-1] and capicua(lista[1:-1]) if lista else True
2024-09-17 10:51:44 +00:00
# Exercicio 1.7
2024-09-17 10:51:44 +00:00
def concat_listas(lista):
return lista[0] + concat_listas(lista[1:]) if lista else []
2024-09-17 10:51:44 +00:00
# Exercicio 1.8
2024-09-17 10:51:44 +00:00
def substitui(lista, original, novo):
if not lista:
return []
if lista[0] == original:
lista[0] = novo
return [lista[0]] + substitui(lista[1:], original, novo)
2024-09-17 10:51:44 +00:00
# Exercicio 1.9
2024-09-17 10:51:44 +00:00
def fusao_ordenada(lista1, lista2):
if not lista1:
return lista2
if not lista2:
return lista1
if lista1[0] < lista2[0]:
return [lista1[0]] + fusao_ordenada(lista1[1:], lista2)
return [lista2[0]] + fusao_ordenada(lista1, lista2[1:])
2024-09-17 10:51:44 +00:00
# Exercicio 1.10
2024-09-17 10:51:44 +00:00
def lista_subconjuntos(lista):
if not lista:
return [[]]
return lista_subconjuntos(lista[1:]) + [lista[:1] + x for x in lista_subconjuntos(lista[1:])]
2024-09-17 10:51:44 +00:00
# Exercicio 2.1
2024-09-17 10:51:44 +00:00
def separar(lista):
if not lista:
return ([], [])
new_lista = separar(lista[1:])
return ([lista[0][0]] + new_lista[0], [lista[0][1]] + new_lista[1])
2024-09-17 10:51:44 +00:00
# Exercicio 2.2
2024-09-17 10:51:44 +00:00
def remove_e_conta(lista, elem):
if not lista:
return ([], 0)
if lista[0] == elem:
new_lista = remove_e_conta(lista[1:], elem)
return (new_lista[0], new_lista[1] + 1)
new_lista = remove_e_conta(lista[1:], elem)
return ([lista[0]] + new_lista[0], new_lista[1])
2024-09-17 10:51:44 +00:00
# Exercicio 3.1
2024-09-17 10:51:44 +00:00
def cabeca(lista):
return lista[0] if lista else None
2024-09-17 10:51:44 +00:00
# Exercicio 3.2
2024-09-17 10:51:44 +00:00
def cauda(lista):
return lista[1:] if lista else []
2024-09-17 10:51:44 +00:00
# Exercicio 3.3
2024-09-17 10:51:44 +00:00
def juntar(l1, l2):
if not l1 and not l2:
return []
if comprimento(l1) != comprimento(l2):
return None
jl = juntar(l1[1:], l2[1:])
return [(l1[0], l2[0])] + jl if jl is not None else None
2024-09-17 10:51:44 +00:00
# Exercicio 3.4
2024-09-17 10:51:44 +00:00
def menor(lista):
if not lista:
return None
if len(lista) == 1:
return lista[0]
m = menor(lista[1:])
return lista[0] if lista[0] < m else m
2024-09-17 10:51:44 +00:00
# Exercicio 3.6
2024-09-17 10:51:44 +00:00
def max_min(lista):
if not lista:
return None
if len(lista) == 1:
return (lista[0], lista[0])
mm = max_min(lista[1:])
return (lista[0] if lista[0] > mm[0] else mm[0], lista[0] if lista[0] < mm[1] else mm[1])