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:
- Chamada
input()
com um prompt explicando o que o senhor deve digitar. - Atribua o resultado a uma variável com nome descritivo.
- 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.
OBSERVAÇÃO: Usando input()
processa todas as entradas como literais de cadeia de caracteres, a entrada dos usuários não é executada como código. No entanto, o senhor deve ter cuidado com as entradas dos usuários e avaliá-las antes de executá-las em seu programa, usá-las em consultas a bancos de dados ou confiar nelas de outra forma.
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 try
… except
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, blue
e 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.
Observação: Ao trabalhar com senhas e outras informações confidenciais, como chaves de API, o senhor deve certificar-se de nunca enviá-las ao GitHub ou divulgá-las de outra forma. Usando getpass
protege apenas a entrada de informações confidenciais. O senhor ainda precisa armazenar as informações de forma segura.
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
, greaterThan
e 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!