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

[Dúvida] algoritmo só imprime primeiro item da lista

Não encontrei o motivo para só imprimir o primeiro item da lista. Se alguém puder ajudar, agradeço

import os

restaurantes = ['Pizza', 'Sushi']

def exibir_nome_do_programa():
    print('Sabor Express\n\n')

def exibir_opcoes():
    print('1. Cadastrar Restaurante')
    print('2. Listar Restaurante')
    print('3. Ativar Restaurante')
    print('4. Sair\n')

def opcao_invalida():
    print('Opção Inválida\n')
    input('Digite qualquer tecla para voltar ao menu principal')
    main()

def finalizar_app():
    os.system('cls')
    print('Finalizando o app\n')

def cadastar_novo_restaurante():
    os.system('cls')
    print('Cadastro de novos restaurantes\n')
    nome_do_restaurante = input('Digite o nome do restaurane que deseja cadastrar: ')
    restaurantes.append(nome_do_restaurante)
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!')
    input('\nDigite qualquer tecla para voltar ao menu principal')
    main()

def listar_restaurantes():
    os.system('cls')
    print('Listando Restaurantes\n')

    for restaurante in restaurantes:
        print(f'.{restaurante}')
        
    input('\nDigite qualquer tecla para voltar ao menu principal')
    main()

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

        if opcao_escolhida == 1:
            cadastar_novo_restaurante()
        elif opcao_escolhida == 2:
            listar_restaurantes()
        elif opcao_escolhida == 3:
            print('Ativar resturante')
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except:
        opcao_invalida()

def main():

    os.system('cls')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()


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

Olá, Ana!

Pelo que pude observar, o seu código parece estar correto. No entanto, o problema pode estar na chamada da função main(). No final do seu código, você tem if __name__ == '__main__': main().

Aqui, você está verificando se o nome do módulo é __main__ (o que é verdadeiro quando o script é executado diretamente), e se for, você chama a função main(). No entanto, você esqueceu de colocar os parênteses após __main__, o que pode estar causando o problema.

Portanto, a linha correta seria: if __name__ == '__main__': main().

Aqui está o exemplo corrigido:

if __name__ == '__main__':
    main()

Espero ter ajudado e bons estudos!

Eu estava com o mesmo problema da função apenas mostrar o primeiro item da lista, dai ao olhar com mais calma eu vi que o espaçamento dos comandos:

input('\nDigite qualquer tecla para voltar ao menu principal') main()

na função "listar_restaurantes():" estavam errados. No meu caso eles estavam com um "tab" a mais fazendo com que a função terminasse e chamasse a main() assim que pegasse a primeira informação da lista ao invés de fazer isso após pegar todas elas. Talvez seja o mesmo caso. Se for, é só apagar o espaço a mais que dai os comandos são feitos na ordem correta:

Certo: def listar_restaurantes(): os.system('cls') print('Listando Restaurantes\n')

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

input('\nDigite uma tecla para voltar ao menu principal')
main()

Errado: def listar_restaurantes(): os.system('cls') print('Listando Restaurantes\n')

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

    input('\nDigite uma tecla para voltar ao menu principal')
    main()