Como ler a entrada do usuário pelo teclado em Python – Real Python

Muitas vezes, o senhor pode querer tornar seus programas Python mais interativos, respondendo dinamicamente à entrada do usuário. Aprender a ler a entrada do usuário pelo teclado abre possibilidades interessantes e pode tornar seu código muito mais útil.

A capacidade de coletar entradas do teclado com o Python permite criar programas que podem responder de forma exclusiva com base nas preferências, decisões ou dados fornecidos por diferentes usuários. Ao buscar a entrada e atribuí-la a variáveis, seu código pode reagir a condições ajustáveis em vez de apenas executar fluxos lógicos estáticos. Isso personaliza os programas para usuários individuais.

O input() é a maneira mais simples de obter dados do teclado do usuário em Python. Quando chamada, ela solicita a entrada do usuário com um prompt que você especifica e espera que o usuário digite uma resposta e pressione o botão Enter antes de continuar. Essa string de resposta é retornada pelo input() portanto, o senhor pode salvá-la em uma variável ou usá-la diretamente.

Usando apenas Python, o senhor pode começar a criar programas interativos que aceitam dados personalizáveis do usuário diretamente no terminal. Aceitar a entrada do usuário é uma habilidade essencial que permite uma codificação Python mais dinâmica e permite transformar scripts simples em aplicativos personalizados.

Como ler a entrada do teclado em Python com input()

O senhor pode criar programas robustos e interativos aproveitando as vantagens do input(). Ele abre possibilidades para a criação de scripts que respondem dinamicamente com base em condições ajustáveis, dados personalizados e tomada de decisões em tempo real por parte do usuário. É uma opção ideal quando o senhor deseja ler a entrada do teclado com o Python.

Os primeiros passos são simples. Basta iniciar o shell do interpretador Python e o senhor poderá utilizar imediatamente o input() para interatividade básica.

Para experimentá-lo, primeiro abra seu terminal e inicie o aplicativo Python REPL digitando python e pressionando Entrar. Isso exibirá o conhecido >>> Python indicando que o REPL está pronto. Usar input(), passando qualquer string entre parênteses:

Depois de executar o código, a string que o senhor especificou em input() será renderizada na tela, e o senhor poderá digitar qualquer resposta. Sua resposta também será impressa na tela quando o senhor pressionar Enter. Isso ocorre porque o REPL imprime automaticamente os valores de retorno – nesse caso, o valor retornado por input().

A melhor prática ao usar input() é atribuí-la a uma variável que o senhor possa usar posteriormente no código. Por exemplo, o senhor pode pedir ao usuário que digite seu nome. Atribuir input() para o name variável:

Isso imprime o prompt Qual é o nome do senhor? e faz uma pausa, aguardando a entrada do teclado. Depois que o usuário digita um nome e pressiona Enter, a string de texto é armazenada no arquivo name variável. Dessa vez, sua entrada não será impressa automaticamente no REPL, pois uma variável armazena o valor.

Agora o senhor pode usar a variável em qualquer parte do seu código na mesma sessão, como imprimir uma saudação personalizada:

Seu programa reagiu com base no nome personalizado que o senhor forneceu. Ele usou o nome que o senhor forneceu na variável input() solicitação.

Esse é o padrão essencial ao trabalhar com a entrada de teclado do Python:

  1. Chamada input() com um prompt explicando o que o senhor deve digitar.
  2. Atribua o resultado a uma variável com nome descritivo.
  3. Use essa variável posteriormente em seu código.

Seguindo esse modelo, o senhor pode começar a criar todos os tipos de scripts interativos adaptados a dados personalizados de diferentes usuários. Seus programas podem reunir entradas de todos os tipos, como nomes, números e listas, o que os torna bastante úteis no processamento de dados de seus usuários.

Esse é apenas o passo inicial que o senhor pode dar ao usar o input() em seu programa interativo. Há outras modificações que o senhor pode fazer para garantir que a função aceite todos os tipos de dados.

Leitura de tipos de dados específicos com a função Input

A regra geral para input() é que ele coleta entrada textual e fornece strings. Muitas vezes, seu código precisa de números, booleanos ou outros tipos de dados. Por exemplo, talvez o senhor precise obter inteiros para operações matemáticas, flutuantes para cálculos com decimais, ou Booleanos para condições lógicas.

Como input() retorna strings, o senhor precisa converter todas as entradas no tipo de dados desejado antes de usá-las no seu código. Se o senhor solicitar uma entrada numérica, o resultado ainda será retornado como uma cadeia de caracteres:

A função de entrada aceita o valor numérico. Quando o senhor verifica o age seu tipo é uma string. Esse é o comportamento padrão da função. Mas e se o senhor precisar fazer cálculos com esses números? O senhor pode converter a string de entrada em inteiros e floats.

Felizmente, o Python facilita a conversão de converter strings de entrada em qualquer tipo de dados necessário. O senhor pode passar o input() em uma função de conversão de tipo como int(), float(), ou bool() para transformá-lo sob demanda. Por exemplo, usando o int() converterá a entrada para o tipo de número inteiro desejado:

O senhor envolveu input() em uma função de conversão de tipos, int(). Isso converte qualquer string numérica em um número inteiro. Agora, quando o senhor verifica o tipo do age ele retorna int.

O senhor pode usar a mesma abordagem para converter entradas numéricas em floats. Por exemplo, talvez o senhor queira registrar o peso do usuário:

No exemplo, o senhor converte "165" para o valor de ponto flutuante 165.0. O senhor verifica o tipo de weight para confirmar que a conversão funcionou como esperado.

O senhor usará int() ou float() sempre que o senhor precisar de um valor numérico. A entrada sempre começará como uma cadeia de caracteres, mas o senhor pode convertê-la em números conforme necessário. Esse é um ponto importante a ser observado para garantir que o senhor obtenha os resultados desejados do seu programa interativo.

Tratamento de erros com input() em Python

Poderão ocorrer erros se o usuário envolver input() em uma função de conversão e ela receber um tipo de dados diferente do esperado. O programa gerará um erro de ValueError e será encerrado. Não é assim que o senhor quer que o programa se comporte. Experimente o próximo exemplo para ver como o programa rejeitará uma entrada de tipo de dados diferente:

Esse código gera um ValueError pois o Python não pode converter "Thirty-five" em um número inteiro. Seus usuários podem não compreender o erro.

Para lidar com esse caso, o senhor pode capturar a exceção antes que o usuário a veja. No próximo exemplo, o senhor escreverá um script em um arquivo Python. Crie uma pasta em seu diretório preferido.

Abra seu editor favorito e crie um novo arquivo Python, que deverá ser salvo na pasta que o senhor acabou de criar. O senhor pode dar a ele o nome que quiser. Neste caso, ele se chama integer_input.py. Digite o seguinte código:

O código acima utilizou o tryexcept blocos de código no tratamento de exceções. O conteúdo dentro do bloco de código try é o código que pode gerar um erro. Neste exemplo, o código está tentando converter a entrada do usuário em um número inteiro. O bloco except é o bloco que será executado se houver um erro no bloco try correspondente. Por exemplo, ele pode capturar um ValueError.

Salve o arquivo e, em seguida, no terminal, navegue até o local onde o arquivo Python foi salvo. O senhor pode executá-lo com este comando:

O conteúdo do arquivo será carregado, perguntando ao senhor Quantos anos o senhor tem?. Agora, se o senhor digitar uma string como "Thirty-five", o programa tratará o erro com elegância e fornecerá informações sobre o motivo pelo qual a entrada não foi bem-sucedida. Ele lhe dará outra chance de inserir os valores corretos e será executado até o fim.

Conversão de entrada com int() e float() oferece ao senhor a flexibilidade de aceitar entradas numéricas e textuais. Manipulação do ValueError torna o programa mais robusto e fácil de usar quando são inseridos tipos incorretos, além de fornecer mensagens de erro significativas ao usuário.

Leitura de várias entradas a partir da entrada do usuário

Há cenários em que seu programa exigiria várias entradas de um usuário. Esse pode ser o caso quando o usuário pode ter várias respostas para uma pergunta.

Em Python, a função list permite que o senhor armazene e organize uma sequência de elementos. As listas são boas para armazenar várias entradas de usuários. O senhor pode solicitar que os usuários insiram várias entradas, que o programa pode armazenar em uma lista. Abra sua pasta e crie um novo arquivo Python, list_input.py. Digite o seguinte código:

Esse código Python recebe a entrada do usuário, esperando três cores secundárias separadas por vírgulas. O usuário usa um compreensão de lista para iterar sobre substrings separadas por vírgulas. Para cada substring, o .strip() remove todos os espaços em branco à esquerda ou à direita. A lista de cores processada é então impressa.

Em seu terminal, execute o arquivo Python para ver o código em ação:

Seu programa colocará o que o usuário digitar como string em uma lista. Em seguida, ele imprimirá a lista no terminal. Nesse caso, o programa não verifica se as entradas estão corretas. Por exemplo, o senhor poderia digitar red, yellow, bluee ele as renderizaria no terminal.

E se o senhor quisesse verificar as entradas e compará-las com o correto antes de imprimi-las no terminal? Isso é possível.

O senhor pode criar programas ainda mais dinâmicos, como questionários, usando o input() juntamente com listas, conjuntos ou dicionários. Crie um novo arquivo Python chamado multiple_inputs.py e salve-o em sua pasta. Nesse arquivo, adicione este código para solicitar várias entradas do usuário:

Esse código solicita que o usuário insira três das cores da bandeira do Quênia e verifica se ele adivinhou corretamente comparando a entrada com o valor kenya_flag_colors set. Ele usa um while loop para solicitar repetidamente ao usuário uma entrada de cor e adicioná-la ao user_colors. O loop é executado enquanto o user_colors tenha menos de três itens.

O senhor usa o .lower() string method para converter todas as entradas em cadeias de caracteres minúsculas. Ao converter cada cor em minúsculas, o senhor garante uma correspondência sem distinção entre maiúsculas e minúsculas durante a comparação, pois todas as cores em kenya_flag_colors também estão em minúsculas.

Por exemplo, se o usuário digitar Greena comparação ainda a reconhecerá como uma resposta correta devido à conversão uniforme em letras minúsculas.

Quando o loop termina, o código verifica se cada uma das suposições do usuário é uma das cores reais. Em caso afirmativo, uma mensagem de sucesso é impressa junto com as cores do usuário. Caso contrário, uma mensagem de falha é impressa com as cores reais da bandeira do Quênia.

Agora o senhor pode executar o multiple_inputs.py em seu terminal para ver o código em ação:

Nesses exemplos, o senhor usa input() com uma lista ou um conjunto para solicitar repetidamente a entrada do usuário e coletar os resultados. Em seguida, o senhor pode validar a entrada em relação aos valores esperados para fornecer feedback ao usuário.

Aqui está outro exemplo de como o senhor pode coletar a entrada do usuário sem solicitar repetidamente, como no último exemplo. Ele é escalonável, pois o senhor pode adicionar mais perguntas de resposta múltipla ao programa. Crie outro arquivo Python e nomeie-o quiz.py. Dentro do arquivo, digite o seguinte código:

No código acima, o senhor faz perguntas ao usuário, verifica suas respostas e fornece feedback. O senhor define um dicionário chamado questions contendo as perguntas como chaves e as respostas corretas como valores em conjuntos. O senhor pode adicionar mais perguntas e respostas ao dicionário.

O código percorre os itens do dicionário usando .items(). Dentro do loop, ele insere um while True para solicitar repetidamente que o usuário digite o número correto de respostas.

O senhor converte a entrada do usuário em um set depois de convertê-la primeiro em uma lista com o .split(). Em seguida, o senhor compara o comprimento do conjunto para ver se o usuário forneceu o número esperado de respostas. Caso contrário, imprime uma mensagem informando ao usuário quantas respostas ele deve fornecer e repete o loop. Quando o número de respostas estiver correto, o senhor passa para a próxima pergunta.

Em seguida, o senhor compara o conjunto de respostas do usuário com o conjunto correto usando ==. Se forem iguais, o senhor imprime um Correto . Caso contrário, uma mensagem mostra as respostas corretas. Agora o senhor pode executar o arquivo no terminal para ver o código do questionário em ação:

Confira o tutorial do questionário para saber como criar um aplicativo de questionário mais completo. Isso também mostrará ao senhor como aproveitar o input() em seus projetos maiores e mais envolvidos.

Protegendo entradas sensíveis do usuário

Em algumas situações, o senhor gostaria de ocultar a entrada de um usuário no terminal. Os exemplos seriam entradas como senhas, chaves de API e até mesmo endereços de e-mail. Nessas condições, o senhor pode usar o pacote da biblioteca padrão getpass para obter o efeito pretendido.

O getpass módulo foi criado especificamente para proteger entradas confidenciais no terminal. Ao usar esse pacote, as entradas do teclado não serão impressas na tela. O senhor pode até pensar que nada está acontecendo, mas está. No exemplo a seguir, o senhor usará uma entrada de e-mail para mostrar como pode proteger informações confidenciais em seu programa.

Crie um arquivo Python em sua pasta de tutorial e nomeie-o sensitive.py. Dentro desse arquivo, digite o seguinte código:

Esse script importa getpass e o utiliza para ocultar a entrada do endereço de e-mail. O senhor também tem uma variável de ambiente, que é armazenada fora do script. O senhor usa a variável variável de ambiente para evitar adicionar informações confidenciais diretamente ao seu código. O senhor acessa as variáveis de ambiente usando getenv() no campo os módulo.

O senhor usa o idioma name-main para verificar se o script Python está sendo executado ou importado. Se for o script principal que está sendo executado, ele chama main().

O getpass.getpass() funciona como a função input() mas não exibe nada na tela enquanto o senhor digita. Antes de executar o arquivo, o senhor precisa armazenar o valor do e-mail fora desse arquivo. Em seu terminal, adicione o seguinte:

Essa é uma forma básica de garantir que informações confidenciais não apareçam no programa principal. Uma maneira de organizar as variáveis de ambiente relacionadas a um projeto é armazená-las em um arquivo .env . O senhor deve certificar-se de que esse arquivo nunca seja carregado em espaços públicos, como o GitHub ou a nuvem.

Agora, execute o arquivo sensitive.py e digite o e-mail que o senhor definiu na variável de ambiente:

Ao digitar o endereço de e-mail, o senhor não verá nenhum valor no terminal. Isso garante que nenhum olho curioso possa ver suas informações confidenciais. Depois de confirmar, o senhor passará para a próxima etapa do programa. Se o endereço de e-mail estiver errado, o senhor não passará para a próxima etapa do programa.

Automatizando a avaliação da entrada do usuário com o PyInputPlus

O senhor pode criar programas robustos e complicados com base no input() . No entanto, essa tarefa se torna complicada se o senhor tiver que lidar com todos os erros, verificar o tipo de entrada e processar os resultados.

As bibliotecas de terceiros podem aumentar sua capacidade de aceitar e processar as entradas de teclado do usuário no terminal. Uma dessas bibliotecas é a PyInputPlusque oferece ferramentas úteis para aceitar e manipular a entrada do usuário sem problemas.

O módulo PyInputPlus é um pacote Python que se baseia e aprimora o input() para validar e solicitar novamente a entrada do usuário. Ele foi criado em 2019 pelo Al Sweigart, autor de Automatize as coisas chatas com Pythone tem como objetivo reduzir o tedioso código de validação de entrada fornecendo um conjunto de tipos de entrada e opções de validação.

O senhor pode especificar argumentos como min, max, greaterThane outros parâmetros ao recuperar a entrada. Ele solicitará novamente ao usuário se a entrada não passar nos testes. Isso significa que o senhor não precisa escrever loops e validação para continuar perguntando ao usuário até que ele forneça uma entrada válida. Outros recursos incluem limites de tempo limite, funções de validação personalizadas e limites de novas tentativas opcionais antes de rejeitar a entrada.

De modo geral, o PyInputPlus elimina a necessidade de lidar manualmente com casos de entrada inválida em seu código. Ao incorporar a validação e o re-prompting nas chamadas de função de entrada, o PyInputPlus reduz a duplicação de código e ajuda a criar programas de linha de comando e prompts interativos mais robustos em Python.

O exemplo a seguir mostrará como esse módulo pode diminuir sua carga de trabalho. Primeiro, o senhor precisa instalar a biblioteca PyInputPlus em seu terminal. O senhor deve fazer isso em um arquivo ambiente virtual.

Um ambiente virtual impedirá que a biblioteca seja instalada globalmente em seu computador e será limitada ao seu projeto. Em seu prompt, digite o seguinte comando para criar o ambiente virtual:

O senhor criou uma pasta chamada venv. Ative esse ambiente virtual usando o seguinte comando:

Depois de ativar o ambiente virtual, o senhor pode instalar o PyInputPlus. O senhor usará o pip para instalar o pacote no ambiente. Em seu terminal, digite este comando:

Depois de instalar o pacote com sucesso, você poderá importá-lo para o arquivo que criará a seguir.

Crie um arquivo Python e nomeie-o inputplus.py. No arquivo, digite o seguinte código que o ajudará a fazer experiências com o PyInputPlus:

Com esse código, o senhor pode definir o intervalo de idade que aceitará em seu programa. Se o usuário inserir um número dentro do intervalo, o programa imprimirá a idade no console e será encerrado. Caso contrário, o programa solicitará novamente que o usuário digite a idade:

Como o senhor pode ver acima, o programa solicitará novamente que o usuário digite uma idade menor que 0 e maior que 120, conforme especificado no código. Depois que o senhor digita uma entrada aceitável, o código continua e é executado imprimindo a idade.

Com o PyInputPlus, o senhor reduz a complexidade do uso do input() em sua forma básica. O código também é breve e conciso, garantindo que o senhor possa criar programas interativos complexos.

No próximo exemplo, o senhor criará um aplicativo bancário que será executado no terminal. O exemplo mostrará o quanto o senhor pode fazer com a biblioteca para aprimorar o input().

Agora, na mesma pasta, crie outro arquivo Python. O senhor pode nomeá-lo banking_app.py. Dentro do arquivo, o senhor pode digitar o seguinte código:

Depois de salvar o arquivo, o senhor pode executá-lo no terminal. Seu aplicativo de banco virtual será iniciado, solicitando que o senhor digite diferentes opções.

O saldo inicial da conta bancária está definido como $1000. O senhor pode alterar esse valor para qualquer número positivo. O programa entra em um loop infinito, exibindo o saldo atual da conta e oferecendo três opções: Depósito, Retirare Sair.

O usuário é solicitado a escolher uma das opções usando pyip.inputChoice().
Se o usuário escolher Sair, o loop é encerrado e o programa imprime uma mensagem de despedida. Essa interatividade pode permitir que o usuário realize várias transações:

Se o usuário escolher Depósitoo programa solicita que o senhor digite o valor do depósito com um limite de US$ 10.000 e o saldo da conta é atualizado de acordo, na mesma sessão.

A mesma interatividade é obtida ao sacar da conta bancária. Se ainda estiver na mesma sessão, o aplicativo atualizará o saldo bancário automaticamente:

E se o usuário decidir sacar uma quantia maior do que o saldo bancário? Seu programa será capaz de lidar com a anomalia de forma elegante, com uma mensagem compreensível:

De acordo com o código, os usuários não podem inserir valores maiores do que o saldo bancário atual para saques. O programa solicitará o valor permitido para prosseguir. O usuário também pode escolher a opção exit para prosseguir. Dessa forma, o PyInputPlus torna seus programas dinâmicos.

Conclusão

Agora você tem uma compreensão abrangente da manipulação da entrada do usuário em Python e explorou várias técnicas e módulos para aprimorar suas habilidades de programação interativa.

O senhor começou a se aprofundar no básico, usando o módulo input() para coletar a entrada do usuário e explorar métodos para determinar e manipular os tipos de dados. Esse conhecimento básico é fundamental para a criação de programas versáteis que possam se adaptar a diversas entradas de usuário.

Em seguida, os senhores praticaram estratégias de tratamento de erros, garantindo que seus programas tratem com elegância entradas inesperadas, aprimorando a experiência do usuário e a robustez do programa. Em seguida, o senhor usou o getpass que oferece uma maneira segura de aceitar informações confidenciais, como senhas, sem exibi-las na tela.

Por fim, o senhor criou um aplicativo bancário usando o PyInputPlus. Isso não apenas reforçou sua compreensão da validação de entrada, mas também demonstrou a aplicação prática desses conceitos na criação de programas interativos e dinâmicos.

Agora, o senhor pode modelar entidades da vida real, como bancos, e criar programas intrincados e interativos com várias respostas diretamente no seu terminal. Esse conhecimento abre as portas para a criação de aplicativos envolventes e fáceis de usar que respondem de forma inteligente à entrada do usuário, fornecendo uma base sólida para sua jornada na programação Python.

Parabéns por ter concluído este tutorial e boa sorte na aplicação dessas novas habilidades em seus projetos futuros!