Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Meu código deu Bug depois da fatoração

Venho fazendo o passo a passo junto com os vídeos, pausando e voltando diversas vezes para que ele funcione perfeitamente, porém depois de fatorar, quando listo os restaurantes, aparece apenas o primeiro .Pizza e todos os outros somem. Se escolho a opção 3 'Ativar restaurante' aparece igual a imagem

Bug com nome do restaurante

Na opção 4 'Finalizar o app' também aparece o nome dos últimos restaurantes cadastrados.

Segue meu código

import os 

restaurantes = ['Pizza','Sushi']

def exibir_nome_do_programa():
    print('''
      
╭━━━╮╱╱╭╮╱╱╱╱╱╱╱╭━━━╮
┃╭━╮┃╱╱┃┃╱╱╱╱╱╱╱┃╭━━╯
╰━━╮┃╭╮┃╭╮┃╭╮┃╭╯┃╭━━┻╋╋┫╭╮┃╭┫┃━┫━━┫━━┫
┃╰━╯┃╭╮┃╰╯┃╰╯┃┃╱┃╰━━┳╋╋┫╰╯┃┃┃┃━╋━━┣━━┃
╰━━━┻╯╰┻━━┻━━┻╯╱╰━━━┻╯╰┫╭━┻╯╰━━┻━━┻━━╯
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯
      ''')

def exibir_opções():
    print('1. Cadastrar Restaurante')
    print('2. Listar Restaurantes')
    print('3. Ativar Restaurante')
    print('4. Sair\n')

def finalizar_app():
    exibir_subtitulo('Finalizando o app')

def voltar_ao_menu_principal():
    input('\nDigite uma tecla para voltar ao menu: ')
    main()

def opcao_inválida():
    print('Opção Inválida!\n')
    voltar_ao_menu_principal()

def exibir_subtitulo(texto):
    os.system('cls')
    print(texto)
    print()

def cadastrar_novo_restaurante():
    exibir_subtitulo('Cadastro de Novos Restaurantes')
    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    restaurantes.append(nome_do_restaurante)
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!\n')
    voltar_ao_menu_principal()

def listar_restaurantes():
    exibir_subtitulo('Listando Restaurantes')

    for restaurante in restaurantes:
        print(f'.{restaurante}')

        voltar_ao_menu_principal()

def escolher_opção():
    try:
        opção_escolhida = int(input('Escolha uma opção: '))
        #opção_escolhida = int(opção_escolhida)

        if opção_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opção_escolhida == 2:
            listar_restaurantes()
        elif opção_escolhida == 3:
            print ('Ativar restaurante')
        elif opção_escolhida == 4:
            finalizar_app()
        else:
            opcao_inválida()
    except:
        opcao_inválida()
def main():
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opções()
    escolher_opção()


if __name__ == '__main__':
    main()
2 respostas
solução!

Boa tarde, Rodrigo! Tudo bem com você?

O erro apresentado ao acessar a opção "Listar Restaurantes" está acontecendo devido a um erro de tabulação (espaçamento) na função listar_restaurantes. Foi adicionado uma tabulação a mais na chamada da função voltar_ao_menu_principal() dentro do laço for, fazendo com que após imprimir o primeiro item da lista restaurantes a função do menu principal seja chamada interrompendo o laço for. Para corrigir esse erro, basta seguir os passos apresentados abaixo:

  • Localize a função listar_restaurantes e clique a esquerda da chamada da função voltar_ao_menu_principal()
  • Pressione uma vez as teclas SHIFT + TAB para remover a indentação
  • O código deve ficar da seguinte forma:
    def listar_restaurantes():
        exibir_subtitulo('Listando Restaurantes')
    
        for restaurante in restaurantes:
            print(f'.{restaurante}')
        voltar_ao_menu_principal()
    
  • Salve o arquivo, e execute-o novamente

Os demais erros citados, também serão corrigidos com a mudança listada acima, como demonstrado no GIF abaixo:

GIF apresentando a execução do código após a correção no terminal do VsCode do aluno

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

Rafael tks pela ajuda!!

Impressionante como uma simples tabulação pode modificar o resultado final... isso significa que tenho que ter mais atenção na construção do projeto.

Obrigado !