Oi! Como vai?
O problema aqui é que a comparação com 'sair' não remove espaços digitados. Se você digitar ' sair ' (com espaços), entrada.lower() == 'sair' não bate. Use strip() antes de comparar e limpe os campos após o split.
Ajuste seu código assim:
lista = []
while True:
entrada = input("Entre com Nome, Idade, Nota (ou 'sair'): ")
entrada_limpa = entrada.strip().lower()
if entrada_limpa == 'sair':
break
partes = [p.strip() for p in entrada.split(',')]
if len(partes) != 3:
print("Formato invalido. Use: nome, idade, nota")
continue
aluno = tuple(partes)
lista.append(aluno)
# exibir uma unica vez ao final
for al in lista:
print(f"Aluno: {al[0]}")
print(f"Idade: {al[1]}")
print(f"Nota: {al[2]}")
print()
Pontos importantes:
strip().lower() garante que 'sair' seja reconhecido com ou sem espaços e em qualquer caixa.- Validação de entrada impede indexação fora do esperado quando não houver 3 valores.
- Impressão fora do
while evita repetir a lista inteira a cada cadastro.
Veja este exemplo:
Entrada:
Joao, 20, 8.5
Maria,21,9
sair
Saida:
Aluno: Joao
Idade: 20
Nota: 8.5
Aluno: Maria
Idade: 21
Nota: 9
Versao sem acentuacao (faz a mesma coisa):
lista = []
while True:
entrada = input("Entre com Nome, Idade, Nota (ou 'sair'): ")
e = entrada.strip().lower()
if e == 'sair':
break
partes = [p.strip() for p in entrada.split(',')]
if len(partes) != 3:
print("Formato invalido. Use: nome, idade, nota")
continue
aluno = tuple(partes)
lista.append(aluno)
for al in lista:
print(f"Aluno: {al[0]}")
print(f"Idade: {al[1]}")
print(f"Nota: {al[2]}")
print()
Breve explicacao: o codigo lê a entrada, normaliza com strip().lower(), confere se e 'sair', valida que ha 3 campos separados por virgula, guarda cada aluno como tupla e imprime tudo no final.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.