Untitled
unknown
plain_text
4 years ago
4.3 kB
7
Indexable
import random
import numpy as np
def main():
lst = [12, 15, 7]
print(f'maxR({lst}) = {maxR(lst)} --> Deveria ser 15')
print()
lst = [51]
print(f'maxR({lst}) = {maxR(lst)} --> Deveria ser 51')
print()
lst = []
print(f'maxR({lst}) = {maxR(lst)} --> Deveria ser None')
print()
lst = [12, -15, 7]
print(f'somaR({lst}) = {somaR(lst)} --> Deveria ser 4')
print()
lst = [51]
print(f'somaR({lst}) = {somaR(lst)} --> Deveria ser 51')
print()
lst = []
print(f'somaR({lst}) = {somaR(lst)} --> Deveria ser 0')
print()
def teste_vazios():
# lista = list(np.random.randint(low = -20,high=30,size=5))
lista = []
print("\n\n Teste somaR() para lista = []")
print(f" {lista} = {somaR(lista)}")
print(" Teste maxR() para lista = []")
print(f" {lista} = {maxR(lista)}")
def main():
n = random.randint(100,100)
testes_soma = []
testes_maximo = []
for i in range(1,101):
print()
lista = list(np.random.randint(low = -30,high=30,size=10))
soma_python = sum(lista)
maximo_python = max(lista) # max() do python não funciona para [], ver teste_vazios()
soma_recursiva = somaR(lista)
maximo_recursivo = maxR(lista)
testes_soma.append(True if soma_python == soma_recursiva else False)
teste_soma = "CERTO" if testes_soma[-1] else "ERRADO"
testes_maximo.append(True if maximo_python == maximo_recursivo else False)
teste_maximo = "CERTO" if testes_maximo[-1] else "ERRADO"
print(f"### Teste {i}/{n} - Soma: {teste_soma} | Máximo: {teste_maximo}")
print(f" lista = {lista}")
print(f" somaR(lista) = {soma_python} | maxR(lista) = {maximo_python}")
print(f" sum(lista) = {soma_recursiva} | max(lista) = {maximo_recursivo}")
#Contabilização dos acertos e rros das funções countruídas com base nas built-in
acertos_soma, erros_soma = 0, 0
for i in testes_soma:
if i:
acertos_soma += 1
else:
erros_soma += 1
acertos_maximo, erros_maximo = 0, 0
for i in testes_maximo:
if i:
acertos_maximo += 1
else:
erros_maximo += 1
#Impressão dos Resultados
print(f"\n\n###### RESULTADO DOS TESTES DE SOMA ######")
print(f" - Foram feitos {n} testes.\n -> {acertos_soma} Certos\n -> {erros_soma} Errados")
print(f"\n###### RESULTADO DOS TESTES DE MAXIMO ####")
print(f" - Foram feitos {n} testes.\n -> {acertos_maximo} Certos\n -> {erros_maximo} Errados")
## ------------------------------------------------------------------
def maxR( lista ):
''' (list) -> int
recebe uma lista de numeros inteiros e retorna o valor do maior elemento.
Exemplos:
- para a entrada [12, 15, 7], a funcao deve retornar 15.
- para a entrada [51], a funcao deve retornar 51.
- para a entrada [], a funcao deve retornar None.
OBS: Esse é um exercício para treinar a aplicação de recursão. Por isso,
não use a função nativa max() do Python para resolver esse exercício.
'''
if lista == []:
return None
elif len(lista) == 1:
return lista[0]
else:
if lista[-1] <= lista[-2]:
lista.pop()
else:
lista.pop(-2)
return maxR(lista)
## ------------------------------------------------------------------
def somaR( lista ):
''' (list) -> int
recebe uma lista de numeros inteiros e retorna a soma de todos os elementos da lista.
Exemplo:
- para a entrada [12, -15, 7], a funcao deve retornar 4.
- para a entrada [51], a funcao deve retornar 51.
- para a entrada [], a funcao deve retornar 0 (zero).
OBS: Esse é um exercício para treinar a aplicação de recursão. Por isso,
não use a função nativa sum() do Python para resolver esse exercício.
'''
if len(lista) == 0: return 0
else:
if len(lista) == 1:
return lista[0]
else:
lista[0] += lista.pop()
return somaR(lista)
## ------------------------------------------------------------------
if __name__ == '__main__':
main()Editor is loading...