Correção da saída

Correção da saída

by Arthur Prado De Fazio -
Number of replies: 1

listadetrocos(4,[1,2,3])
[[[1, 1, 1, 1], [1, 1, 2], [2, 2]], [[1], 3]]

Em vários dos testes que fiz com a minha função, a lista devolvida é gerada de  maneira que haja várias listas dentro de listas. Alguma sugestão pra eliminar isso  fazendo uma correção quando a lista já está pronta?

In reply to Arthur Prado De Fazio

Re: Correção da saída

by José Coelho de Pina -

Em vários dos testes que fiz com a minha função, a lista devolvida é gerada de  maneira que haja várias listas dentro de listas.

Hmmm.
A chamada recursiva retorna uma lista de trocos:

[ troco[0], troco[1], troco[2] ]

Depois disso, a função deve, mais ou menos, fazer append(troco[0]), append(troco[1]), ... na lista que a chamada corrente está contruindo para ser retornada.


A função não deve fazer append([ troco[0], troco[1], ...]).

Em geral, a cara de uma função que cria e retorna uma lista é

def f(...):
    '''(...) -> list
    
    Recebe ... e cria e retona uma lista.
    '''
    lista = []
    [ ... constroi a lista ...]
    return lista

Por exemplo,

def clone_lista(objetos):
    '''(list) -> list

    Recebe uma lista objetos e cria e retona um clone
    (= cópia) da lista.
    '''
    # crie lista vazia
    clone = []

    # construa a lista
    for item in objetos:
        clone.append(item)

    # retorne a lista    
    return clone    
     

Equivalentemente

def clone_lista(objetos):
    '''(list) -> list

    Recebe uma lista objetos e cria e retona um clone
    (= cópia) da lista.
    '''
    # crie lista vazia
    clone = []
    n = len(objetos)
    
    # construa a lista
    for i in range(n):
        clone.append(objetos[i])

    # retorne a lista    
    return clone