Untitled
unknown
plain_text
4 years ago
4.3 kB
5
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...