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.”
Defina “não consigo usar”. O que você tentou fazer? O que esperava acontecer? O que de fato aconteceu?
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)
2 curtidas
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.
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)
1 curtida
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
2 curtidas
Rodrigo, como vc testou essas funções? Poderia postar aqui?