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:
defremove_repetidos():l=[]n=-1whilen!=0:n=int(input('Digite um numero inteiro: '))ifn!=0:l.append(n)ifn==0:returnlist(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.”
Defina “não consigo usar”. O que você tentou fazer? O que esperava acontecer? O que de fato aconteceu?
L
Solucao aceita
LostSoldier2 likes
Outra coisa a se atentar, faz sentido uma função chamada remove_repetidoscriar 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…
defremove_repetidos(lista):returnlist(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)
R
RodrigoFreiitas
Ficou assim:
defremove_repetidos():lista=ordena_lista()lista_final=list(set(lista))returnlista_finaldefordena_lista():l=cria_lista()lista_ordenada=sorted(l)returnlista_ordenadadefcria_lista():lista=[]n=Truewhilen:n=int(input('Digite um numero: '))lista.append(n)ifn==0:n=Falsereturnlista
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.
L
LostSoldier1 like
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…
defremove_repetidos(lista):returnlist(set(lista))defordena_lista(lista):returnsorted(lista)defcria_lista():return[]defpreenche_lista(lista):whileTrue:n=int(input('Digite um numero (0 para sair): '))lista.append(n)ifn==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 retornarprint("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)
R
RodrigoFreiitas2 likes
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: