GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Lista ordena Python

python
Tags: #<Tag:0x00007fbf1fb70300>

#1

Bom dia galera, não consigo usar a função lista.sort(), eu tenho que receber números e adiciona-los em uma lista, remover os repetidos e ordenar, meu código está assim:

def remove_repetidos():
    
 l = []

 n = -1

 while n != 0:
     n = int(input('Digite um numero inteiro: '))
     
     if n != 0:
      l.append(n)

     if n == 0:
      return list(set(l))

“A complexidade de depurar é o dobro da de escrever o código. Portanto, se você escrever código o mais inteligente possível, por definição você não será esperto o suficiente para depurá-lo.”


#2

Defina “não consigo usar”. O que você tentou fazer? O que esperava acontecer? O que de fato aconteceu?


#3

Outra coisa a se atentar, faz sentido uma função chamada remove_repetidos criar uma lista vazia, pedir para digitar números, adicioná-los na lista para depois removê-los?

Sua função está com responsabilidades que não são dela, melhor passar a lista como parâmetro…

def remove_repetidos(lista):
    return list(set(lista))

E toda aquela lógica estar fora da função…

Tenha em mente também que o método sort não retorna uma lista ordenada, apenas altera o objeto dela ou seja isso é inválido

listaOrdenada = lista.sort()
print(listaOrdenada)

Isso é o correto

lista.sort()
print(lista)

Se quer uma nova lista já ordenada, pode usar a função sorted

listaOrdenada = sorted(lista)
print(listaOrdenada)

#4

Ficou assim:

def remove_repetidos():
    lista = ordena_lista()
    lista_final = list(set(lista))
    return lista_final
    

    
def ordena_lista():
    l = cria_lista()
    lista_ordenada = sorted(l)
    return lista_ordenada
    
       

def cria_lista():
    lista = []

    n = True

    while n:
        n = int(input('Digite um numero: '))
        lista.append(n)
        
    if n == 0:
        n = False
        return lista

Como que eu faço para iniciar sem ter que chamar uma função ? Por que no corretor automático do meu curso da erro se tiver que chamar alguma função para o programa iniciar.


#5

Está confuso seu código, lembra sobre o que falei sobre responsabilidades?

Pois então, sua função remove também ordena, sua função ordena também cria… quanto a inicializar sem função não entendi muito bem, mas o conceito de função é ser chamada e executar algo (pondento ou não retornar algo)…

Veja se isso melhora a visibilidade e dá sentido ao código…

def remove_repetidos(lista):
    return list(set(lista))

def ordena_lista(lista):
    return sorted(lista)

def cria_lista():
    return []

def preenche_lista(lista):
    while True:
        n = int(input('Digite um numero (0 para sair): '))
        lista.append(n)

        if n == 0:
            break # para o while

# modulo principal (chama e manipula as funções)
if __name__ == '__main__':
    nova_lista = cria_lista()

    preenche_lista(nova_lista) # não precisa retornar
    print("lista criada e preenchida", nova_lista)

    lista_sem_repetidos = remove_repetidos(nova_lista)
    print("lista sem repetidos", lista_sem_repetidos)

    lista_ordenada = ordena_lista(lista_sem_repetidos)
    print("lista ordenada", lista_ordenada)

#6

Descobri que estava quebrando a cabeça por nada, mas pelo menos aprendi aqui a organizar melhor as funções, o real problema você tinha resolvido la encima quando disse:

O que eu não podia fazer era usar um input ou uma def sem parâmetro, o corretor já ia gerar uma lista para usar na def, então ficou simples assim os exercícios:

#Ex.1
def remove_repetidos(lista):
    
    lista_final = list(set(lista))
    lista_final.sort()
    return lista_final

#Ex.2    
def soma_elementos(lista):

    lista.append(0)
    lista_somada = sum(lista)
    return lista_somada

#Ex.3
 def maior_elemento(lista):
    
 lista = max(lista)

 return lista

#7

Rodrigo, como vc testou essas funções? Poderia postar aqui?