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!