Como criar um menu interativo no terminal com Python

Publicado em: 20/03/2026
Tempo de leitura: 10 minutos

Criar uma interface eficiente para o usuário não exige sempre o desenvolvimento de janelas complexas ou botões coloridos. Muitas vezes, um script robusto precisa apenas de um método de interação direto no terminal. Aprender como criar um menu interativo no terminal com Python é uma habilidade fundamental para desenvolvedores que desejam automatizar tarefas, gerenciar scripts de sistema ou construir ferramentas de linha de comando (CLI) profissionais e amigáveis.

Ao longo deste guia, vamos explorar desde a lógica básica de repetição até a implementação de seleções dinâmicas. Veremos como organizar o fluxo de dados para que o usuário sinta que está operando um software real, e não apenas rodando linhas de código isoladas. Para quem está iniciando na lógica de programação com Python, este projeto é um excelente exercício prático para consolidar conceitos de controle de fluxo e funções.

Por que criar um menu no terminal?

Interfaces de linha de comando são extremamente leves e eficientes. Elas não exigem bibliotecas gráficas pesadas e funcionam em praticamente qualquer servidor ou máquina remota. Quando você aprende a estruturar menus, você transforma um script simples em uma ferramenta de automação com Python que pode ser operada por qualquer pessoa, sem que ela precise ler o código-fonte para entender quais argumentos passar.

Além disso, o domínio do terminal é uma característica marcante de programadores experientes. Entender como o sistema recebe entradas e processa saídas de forma textual é a base para o desenvolvimento de back-end e DevOps. Segundo a Wikipédia, a interface de linha de comando (CLI) permite um controle muito mais preciso sobre as funções do sistema operacional.

Estrutura Básica de um Menu Interativo

A espinha dorsal de qualquer menu interativo em Python é o loop while. Este loop garante que o programa não feche imediatamente após a primeira ação, permitindo que o usuário realize múltiplas tarefas em uma única sessão. Dentro desse loop, utilizamos o comando de entrada de dados para capturar a escolha do usuário.

Definindo a Função Principal

Para manter o código limpo, é recomendável encapsular o menu dentro de uma função. Isso facilita a manutenção e permite que você chame o menu de diferentes partes do seu projeto, se necessário. Veja como começar a estruturar essa lógica inicial:

Python
def exibir_menu():
    print("\n--- MENU DE OPÇÕES ---")
    print("1. Saudação")
    print("2. Calcular Soma")
    print("0. Sair")
    return input("Escolha uma opção: ")

Nesse trecho, usamos apenas o comando print no Python para desenhar a interface visual e a função input() para aguardar a interação. É um começo simples, mas funcional.

Implementando a Lógica de Escolha com Condicionais

Uma vez que capturamos a entrada do usuário, precisamos decidir o que o programa deve fazer. Para isso, utilizamos as estruturas condicionais. Em Python, a forma mais comum de gerenciar múltiplas opções é através da cadeia if-elif-else.

Processando as Opções

O processamento ocorre dentro de um loop infinito que só é interrompido quando a opção de saída é selecionada. É importante tratar a entrada como uma string ou convertê-la para um número inteiro, garantindo que o programa não quebre caso o usuário digite algo inesperadamente.

Python
def iniciar_sistema():
    while True:
        opcao = exibir_menu()
        
        if opcao == "1":
            print("Olá! Bem-vindo ao nosso menu interativo.")
        elif opcao == "2":
            num1 = int(input("Digite o primeiro número: "))
            num2 = int(input("Digite o segundo número: "))
            print(f"A soma é: {num1 + num2}")
        elif opcao == "0":
            print("Saindo do sistema...")
            break
        else:
            print("Opção inválida! Tente novamente.")

O uso do break é essencial aqui. Sem ele, o usuário ficaria preso no loop “para sempre”. Note que você também pode utilizar o if, elif e else no Python para validar se a entrada está correta antes de prosseguir com a lógica do negócio.

Melhorando a Experiência com Limpeza de Tela

Um menu que apenas acumula texto no terminal pode se tornar confuso rapidamente. Para dar um aspecto profissional, podemos limpar a tela a cada nova interação. Para isso, utilizamos o módulo os do Python, que permite enviar comandos diretamente ao sistema operacional.

Usando o Módulo OS

Como cada sistema operacional (Windows, Linux ou macOS) possui um comando de limpeza diferente, precisamos criar uma lógica que identifique onde o script está rodando. Isso garante a portabilidade do seu código.

Python
import os
import platform

def limpar_tela():
    if platform.system() == "Windows":
        os.system("cls")
    else:
        os.system("clear")

Ao integrar essa função no início do seu loop, o usuário terá sempre uma visão limpa do menu, focando apenas no que é importante no momento. Trabalhar com módulos OS em Python é um passo fundamental para quem deseja criar scripts que interagem profundamente com a máquina.

Organizando Ações com Funções e Dicionários

À medida que seu menu cresce, colocar todo o código dentro dos blocos if tornará o arquivo ilegível. A melhor prática de engenharia de software é separar as ações em funções específicas. Além disso, você pode usar um dicionário para mapear as opções para as funções, o que elimina a necessidade de dezenas de elif.

Mapeamento de Funções

Dicionários em Python são extremamente poderosos. Você pode armazenar referências de funções como valores. Isso torna o código modular e muito mais fácil de expandir futuramente.

Python
def acao_saudacao():
    print("Executando módulo de saudação...")

def acao_ajuda():
    print("Exibindo guia de ajuda do sistema.")

# Mapeamento
acoes = {
    "1": acao_saudacao,
    "2": acao_ajuda
}

# No loop principal:
if opcao in acoes:
    acoes[opcao]() # Chama a função dinamicamente

Esta técnica é comum em grandes frameworks e ajuda a evitar o “código espaguete”. Para entender melhor como estruturar essas coleções de dados, vale a pena estudar sobre dicionários no Python.

Tratamento de Erros no Menu

Um erro comum ao criar menus é assumir que o usuário sempre digitará o que é esperado. Se você pedir um número e o usuário digitar uma letra, o programa irá travar. Para evitar isso, utilizamos blocos de tratamento de exceções.

Protegendo a Entrada de Dados

O uso de try/except garante que o seu menu sobreviva a entradas malformadas. Isso é especialmente importante em menus que realizam cálculos ou manipulam arquivos.

Python
try:
    escolha = int(input("Digite sua opção numérica: "))
except ValueError:
    print("Erro: Por favor, digite apenas números inteiros.")

Aplicar o try except no Python é uma marca de software resiliente. De acordo com as diretrizes da Python Software Foundation, “erros nunca devem passar silenciosamente”, mas sim ser tratados de forma amigável para o usuário.

Adicionando Estética com Cores e Caracteres Especiais

Embora o terminal seja baseado em texto, ele suporta cores através de códigos ANSI. Você pode destacar avisos de erro em vermelho ou mensagens de sucesso em verde para melhorar a legibilidade. Bibliotecas como colorama facilitam esse processo, mas você também pode fazer isso manualmente.

“A experiência do usuário em uma CLI depende da clareza visual e do feedback imediato das ações realizadas.”

Simples decorações com caracteres como =, * ou - ajudam a separar visualmente as seções do seu programa, criando uma hierarquia de informações clara para quem está operando.

Código Completo do Projeto

Abaixo, apresentamos o código unificado que implementa todas as práticas mencionadas: limpeza de tela, tratamento de erros, mapeamento de funções e um loop contínuo. Este script serve como um excelente template inicial para qualquer ferramenta CLI que você deseje construir.

Python
import os
import platform

def limpar_tela():
    sistema = platform.system()
    if sistema == "Windows":
        os.system("cls")
    else:
        os.system("clear")

def saudacao():
    print("\n[INFO] Bem-vindo ao Sistema de Automação Academify!")
    input("\nPressione Enter para voltar ao menu...")

def sobre():
    print("\n[SOBRE] Este script foi desenvolvido para ensinar interfaces CLI em Python.")
    print("Versão: 1.0.0")
    input("\nPressione Enter para voltar ao menu...")

def menu_principal():
    while True:
        limpar_tela()
        print("==============================")
        print("      MENU INTERATIVO        ")
        print("==============================")
        print("1. Ver Saudação")
        print("2. Sobre o Script")
        print("0. Sair")
        print("==============================")
        
        escolha = input("Selecione uma opção: ")

        if escolha == "1":
            saudacao()
        elif escolha == "2":
            sobre()
        elif escolha == "0":
            print("\nEncerrando o programa. Até logo!")
            break
        else:
            print("\n[ERRO] Opção inválida! Tente novamente.")
            import time
            time.sleep(1.5)

if __name__ == "__main__":
    try:
        menu_principal()
    except KeyboardInterrupt:
        print("\n\nOperação cancelada pelo usuário. Saindo...")

Dicas Avançadas para Menus Profissionais

Se você deseja levar seus menus para o próximo nível, considere explorar bibliotecas dedicadas à criação de interfaces de linha de comando. Ferramentas como Click e Typer automatizam a criação de argumentos e ajudas visuais. Para interfaces ainda mais ricas, a biblioteca Rich permite criar tabelas, barras de progresso e estilizações complexas com facilidade.

Outro ponto importante é a organização dos arquivos. Se seu menu interativo for o ponto de entrada de uma aplicação grande, considere usar módulos e pacotes no Python para separar a lógica da interface da lógica de negócios. Isso facilita a realização de testes unitários e garante que seu código possa ser reaproveitado em outros projetos sem carregar o menu junto.

Perguntas Frequentes

Como fazer o menu aceitar letras maiúsculas e minúsculas?

Utilize o método .lower() ou .upper() na entrada do usuário. Exemplo: opcao = input().lower(). Isso padroniza a resposta independente de como o usuário digitou.

É possível usar as setas do teclado para selecionar as opções?

Nativamente com input() não é possível. Para isso, você precisará de bibliotecas externas como pick ou inquirer, que interceptam as teclas de direção do teclado.

Como criar um menu com submenus?

Basta criar uma nova função de menu e chamá-la dentro de uma das opções do menu principal. O novo loop while do submenu controlará aquela tela até que o usuário decida voltar.

Como rodar esse menu em um servidor Linux?

Basta carregar o arquivo .py para o servidor e executá-lo com python3 nome_do_arquivo.py. A lógica de limpeza de tela com os.system('clear') funcionará perfeitamente via SSH.

Posso adicionar cores ao texto do terminal?

Sim. Você pode usar sequências de escape ANSI (ex: \033[92m para verde) ou bibliotecas como Colorama para garantir que as cores funcionem tanto em Windows quanto em Linux.

Como evitar que o programa feche ao digitar uma letra onde se espera um número?

Sempre envolva a conversão int(input()) em um bloco try...except ValueError. Isso captura o erro e permite que você mostre uma mensagem amigável em vez de encerrar o script.

Qual a vantagem de usar dicionários no lugar de IFs no menu?

O dicionário torna o código mais “limpo” (Clean Code) e escalável. Adicionar uma nova opção torna-se apenas uma nova linha no dicionário, sem aumentar a complexidade de aninhamento.

Como fazer o menu esperar o usuário ler a mensagem antes de limpar a tela?

Utilize um input("Pressione Enter para continuar...") logo após exibir a mensagem de sucesso ou erro. Isso pausa a execução até que haja uma interação do usuário.

Dominar a criação de menus no terminal abre portas para o desenvolvimento de ferramentas internas poderosas e scripts de automação eficientes. Pratique a estrutura básica e, aos poucos, adicione camadas de complexidade e estética para tornar seus programas Python cada vez mais profissionais.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Fundamentos
    Foto do Leandro Hirt

    Descubra como usar o operador ternário no Python

    O operador ternário no Python é uma daquelas ferramentas que, uma vez dominadas, mudam completamente a forma como você escreve

    Ler mais

    Tempo de leitura: 10 minutos
    18/03/2026
    Fundamentos
    Foto do Leandro Hirt

    Descubra o match-case: como usar pattern matching no Python

    O desenvolvimento de software com a linguagem Python sempre foi pautado pela legibilidade e simplicidade. Com o lançamento da versão

    Ler mais

    Tempo de leitura: 10 minutos
    14/03/2026
    Fundamentos
    Foto do Leandro Hirt

    Descubra como map e filter agilizam seu código Python

    Se você já escreve scripts e aplicações, sabe que processar grandes volumes de dados pode ser um desafio para a

    Ler mais

    Tempo de leitura: 10 minutos
    09/03/2026
    Fundamentos
    Foto do Leandro Hirt

    List comprehension vs generator expression: qual usar?

    No vasto ecossistema da programação, entender as nuances entre diferentes formas de processar dados é o que separa um iniciante

    Ler mais

    Tempo de leitura: 10 minutos
    07/03/2026
    FundamentosBibliotecas e Módulos
    Foto do Leandro Hirt

    Descubra como gerar números aleatórios seguros com secrets

    Você já parou para pensar como o seu computador decide qual será o próximo número em um sorteio? No mundo

    Ler mais

    Tempo de leitura: 9 minutos
    27/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o operador walrus (:=) no Python

    O ecossistema do Python é conhecido por sua simplicidade e legibilidade, mas isso não significa que a linguagem pare de

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026