Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por favor, me ajude a entender porque esse programa não sai do loop

Sei que não é exatamente o que o enunciado pediu, mas minha tentativa de resolver o problema foi a de deixar entrar um aluno por linha. Fiz esse programa aqui.

lista = []
while True:
entrada = input("Entre com Nome, Idade, Nota: ")
if entrada.lower() == 'sair':
break
aluno = tuple(entrada.split(','))
lista.append(aluno)
for al in lista:
print (f'Aluno: {al[0]}')
print (f'Idade: {al[1]}')
print (f'Nota: {al[2]}')
print ('\n')

Por algum motivo que não consigo ver, o if para sair do loop não funciona e eu não consigo entender o motivo.  Poderia me ajudar?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

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 ✓.