1
resposta

[resolvido] bug repetição ao sair da aplicação

tudo certo pessoal?

estou fazendo o projeto da formação de python orientado a objetos e estou implementando o que foi ensinado no curso 2 ao que foi feito no curso 1, porém eu adicionei algumas camadas de proteção contra usuário e deixei o sistema mais userfriendly. Agora ao errar o nome do restaurante para avaliar, ao invés do programa jogar o usuário novamente para a página inicial ele permite o usuário tentar novamente ou sair, funciona, porém perfebi um bug que quando, depois de errar um nome, ao tentar sair do programa ele entra em loop na função de saida. aqui o código da função

def avaliar_restaurante():
    '''avalia o restaurante'''
    exibir_subtitulos('Avaliar restaurante')
    nome_restaurante = input('Digite o nome do restaurante que deseja avaliar: ').lower()
    for restaurante in Restaurante.restaurantes:
        if restaurante._nome.lower() != nome_restaurante:
            print(f'Restaurante {nome_restaurante} não encontrado.\n')
            tentar_novamente2 = input('Tentar novamente? (S/N) ')
            if tentar_novamente2.lower() == 's':
                avaliar_restaurante()
            else:
                voltar_para_menu()
        else:
            try:
                nome_cliente = input('Digite seu nome: ')
                nota = float(input('Digite a nota (0 a 5): '))
                comentario = input('Digite um comentário (opcional): ')
                restaurante.receber_avaliacao(nome_cliente, nota, comentario)
                print(f'Avaliação registrada com sucesso para o restaurante {restaurante._nome}!\n')
            except ValueError as e:
                print(f'Erro ao registrar avaliação: {e}\n')
                tentar_novamente1 = input('Tentar novamente? (S/N) ')
                if tentar_novamente1.lower() == 's':
                    avaliar_restaurante()
                else:
                    voltar_para_menu()
        break     
    voltar_para_menu()

imagino que o erro seja usar o loop for ao invés de while, alguém pode me dar uma opinião?

1 resposta

mudei o loop for para o loop while e resolveu, mas como isso é algo que vou usar mais vezes no código dei um passo além e criei uma função de verificação dentro do código. quem tiver tempo e quiser dar uma olhada/validada aqui está o repositório: https://github.com/sanchobueno/backend-restaurantes-alura