Untitled

 avatar
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...