Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Não tá rodando...

import os

def exibir_nome_do_programa():
print("""
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░
""")

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

def finalizar_app():
os.system('cls')
# os.system('clear')
print('Finalizando o app')

def opcao_invalida():
print('opção inválida!')
input('Digite uma tecla para voltar ao menu principal')
main()

def escolher_opcao():
opcao_escolhida = int(input('Escolha uma opção: '))
# opcao_escolhida = int(opcao_escolhida)
try:
if opcao_escolhida == 1:
print('Cadastrar restaurante')
elif opcao_escolhida == 2:
print('Listar restaurantes')
elif opcao_escolhida == 3:
print('Ativar restaurante')
elif opcao_escolhida == 4:
print('Finalizar o app')
else:
opcao_invalida()

except:
opcao_invalida()

def main():
os.system('cls')
exibir_nome_do_programa()
exibir_opcoes()
escolher_opcao()

if name == 'main':
main()

1 resposta

Olá, Bruno. Como vai?

Olhando para o seu código, o motivo principal de ele não estar rodando ou não iniciar a execução está relacionado a dois detalhes muito importantes na sintaxe do Python: a indentação e a verificação do ponto de entrada (__name__ == '__main__').

No Python, a indentação não é apenas para organização visual; ela define o escopo dos blocos de código (o que está dentro de cada função ou condição).

Aqui estão os pontos específicos que precisam de correção no seu script:

1. Indentação das Funções

Todo o conteúdo que pertence a uma função deve estar recuado (geralmente com 4 espaços ou 1 Tab). No seu código, os comandos print, try/except e as chamadas de método estão colados na margem esquerda, o que gera um erro do tipo IndentationError.

2. A Condicional do __name__

Na última linha do seu arquivo, você escreveu if name == 'main':. No Python, essa validação utiliza dois underlines antes e depois das palavras. O correto é if __name__ == '__main__':. É essa linha que avisa ao interpretador que o script deve começar a rodar a função main() assim que o arquivo for executado.

3. Chamada da função main() perdida

Dentro da função opcao_invalida(), há uma chamada solta para main() que ficou sem indentação e antes de a própria função main() ser declarada. O ideal é colocá-la dentro da função correspondente para reiniciar o menu.


Aqui está o seu código corrigido e estruturado com a indentação correta. Você pode copiar e testar no seu ambiente:

import os

def exibir_nome_do_programa():
    print("""
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░
""")

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

def finalizar_app():
    os.system('cls')
    # os-system('clear') # Use clear se estiver no Mac ou Linux
    print('Finalizando o app')

def opcao_invalida():
    print('Opção inválida!')
    input('Digite uma tecla para voltar ao menu principal: ')
    main() # Chama o menu principal de volta

def escolher_opcao():
    try:
        opcao_chosen = int(input('Escolha uma opção: '))
        
        if opcao_chosen == 1:
            print('Cadastrar restaurante')
        elif opcao_chosen == 2:
            print('Listar restaurantes')
        elif opcao_chosen == 3:
            print('Ativar restaurante')
        elif opcao_chosen == 4:
            finalizar_app() # Ajustado para chamar a sua função de finalizar
        else:
            opcao_invalida()
    except ValueError:
        # É uma boa prática capturar a exceção específica (ValueError) quando o input não for número
        opcao_invalida()

def main():
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()

if __name__ == '__main__':
    main()

O que mudou?

  • Bloco try-except: Repare que agora o try engloba a captura do input e a conversão para int. Se o usuário digitar uma letra, o Python gera um erro que é capturado imediatamente pelo except, direcionando para a função opcao_invalida().
  • Organização: Todas as linhas internas das funções ganharam o recuo de 4 espaços, permitindo que o Python entenda onde começa e termina cada bloco de instrução.

Ajustando esses pontos de formatação, seu sistema do "Sabor Express" vai rodar perfeitamente no terminal!

Espero que possa ter lhe ajudado!