Pular para o conteúdo

Como usar a função input para receber um número inteiro em Python?

[

Como obter valores de entrada inteiros em Python

Se você já codificou um aplicativo de texto interativo em Python, provavelmente descobriu que precisa de uma maneira confiável de solicitar ao usuário valores inteiros como entrada. Não é suficiente simplesmente exibir um prompt e depois coletar as teclas pressionadas. Você deve verificar se a entrada do usuário realmente representa um número inteiro. Se não representar, o código deve reagir adequadamente, normalmente repetindo o prompt.

Neste tutorial, você aprenderá como criar uma função utilitária reutilizável que garantirá entradas de inteiros válidas de um usuário interativo. Ao longo do caminho, você aprenderá sobre as ferramentas do Python para obter uma string do console e converter essa string em um número inteiro.

Sempre que você estiver escrevendo um programa que interage com o teclado, é necessário codificar defensivamente para gerenciar entradas inválidas. Além disso, você aprenderá a maneira mais Pythonica de lidar com essa situação. Você tratará erros de forma robusta dentro de uma função que garantirá apenas a entrada de números inteiros.

Como obter valores de entrada inteiros em Python

Por que você deve ter cuidado com a função input() do Python 2

Devido a esse problema, o Python 2 também fornecia a função raw_input() como uma alternativa muito mais segura, mas sempre havia o risco de um programador inadvertido escolher a versão com o nome mais óbvio, input().

O Python 3 renomeou raw_input() para input() e removeu a versão antiga e arriscada de input(). Neste tutorial, você usará o Python 3, portanto, esse problema não será uma preocupação.

number_as_string = input("Digite um número inteiro: ")
number_as_integer = int(number_as_string)
print(f"O valor do número inteiro é {number_as_integer}")

Quando o trecho de código acima é executado, o interpretador pausa na função input() e solicita ao usuário que insira um número inteiro. Um cursor piscando aparece no final do prompt, e o sistema aguarda o usuário digitar uma sequência arbitrária de caracteres.

Quando o usuário pressiona a tecla Enter, a função retorna uma string contendo os caracteres digitados, sem uma nova linha. Para lembrar que o valor recebido é uma string, você nomeou a variável de recebimento como number_as_string.

Na próxima linha, você tenta analisar number_as_string como um inteiro e armazenar o resultado em number_as_integer. Você usa o construtor de classe int() para fazer a conversão. Por fim, a função print() exibe o resultado.

Lidando com entradas inválidas

Você provavelmente já percebeu que o código acima é muito otimista. Nem sempre é possível garantir que o usuário fornecerá uma entrada válida como um número inteiro. Se o usuário inserir algo diferente de um número inteiro, ocorrerá um erro de valor e o programa travará.

Para lidar com esse problema, você pode usar um bloco try-except para capturar o erro e tratar a entrada inválida de forma adequada. Veja um exemplo de como fazer isso:

while True:
try:
number_as_string = input("Digite um número inteiro: ")
number_as_integer = int(number_as_string)
except ValueError:
print("Entrada inválida. Por favor, insira um número inteiro válido.")
else:
break
print(f"O valor do número inteiro é: {number_as_integer}")

Neste exemplo, um laço while infinito é criado para solicitar continuamente ao usuário um número inteiro. Dentro do bloco try, a entrada do usuário é convertida em um número inteiro. Se ocorrer um erro de valor ao fazer essa conversão, o bloco except será executado e uma mensagem de erro será exibida. Em seguida, o laço será continuamente repetido até que o usuário forneça uma entrada válida.

Quando uma entrada válida for fornecida, o bloco else será executado e o laço será interrompido com a instrução break. Em seguida, o programa exibirá o valor convertido para o usuário.

Filtrando a entrada para inteiros válidos

No exemplo anterior, tratamos a entrada inválida exibindo uma mensagem de erro e permitindo que o usuário tente novamente. No entanto, pode ser desejável filtrar a entrada do usuário para garantir que apenas números inteiros válidos sejam aceitos.

Um método para fazer isso é usar a função str.isdigit() para verificar se a string fornecida pelo usuário consiste apenas de caracteres numéricos. Veja como implementar essa filtragem:

while True:
number_as_string = input("Digite um número inteiro: ")
if number_as_string.isdigit():
number_as_integer = int(number_as_string)
break
else:
print("Entrada inválida. Por favor, insira um número inteiro válido.")
print(f"O valor do número inteiro é: {number_as_integer}")

Neste exemplo, a função isdigit() é aplicada à string fornecida pelo usuário, verificando se ela contém apenas caracteres numéricos. Se essa condição for verdadeira, a string é convertida em um número inteiro e o laço é interrompido. Caso contrário, uma mensagem de erro é exibida e o usuário precisa tentar novamente.

Com essa filtragem adicional, você pode garantir que apenas números inteiros válidos sejam aceitos como entrada.

Criando uma função utilitária para ler inteiros válidos

Para tornar o processo de leitura de inteiros válidos ainda mais fácil de reutilizar, você pode encapsular a lógica em uma função utilitária. Aqui está um exemplo de como fazer isso:

def read_valid_integer(prompt):
while True:
number_as_string = input(prompt)
if number_as_string.isdigit():
number_as_integer = int(number_as_string)
return number_as_integer
else:
print("Entrada inválida. Por favor, insira um número inteiro válido.")
integer_value = read_valid_integer("Digite um número inteiro: ")
print(f"O valor do número inteiro é: {integer_value}")

Neste exemplo, a função read_valid_integer() é definida com um parâmetro prompt que será exibido para solicitar a entrada do usuário. A lógica de filtragem da entrada é aplicada dentro da função, e o número inteiro válido é retornado.

Ao chamar essa função, você passa uma mensagem como argumento para o parâmetro prompt. O valor inteiro retornado pela função é armazenado na variável integer_value e, em seguida, exibido para o usuário.

Essa função utilitária pode ser usada em qualquer lugar do seu código onde você precise obter um número inteiro válido do usuário, simplificando e tornando mais robusto o processo de leitura de entrada.

Conclusão

Neste tutorial, você aprendeu como obter valores de entrada inteiros em Python de forma segura e robusta. Usando a função input() e as ferramentas fornecidas pelo Python, você pode solicitar ao usuário que insira um número inteiro e validar essa entrada para garantir que ela seja válida.

Ao utilizar blocos try-except, filtragem de entrada e a criação de uma função utilitária, você pode tornar o processo de leitura de inteiros mais reutilizável em seu código e lidar com inputs inválidos de forma eficaz.

Agora que você entende como obter valores de entrada inteiros em Python, pode aplicar esse conhecimento em seus próprios projetos e programas interativos. Com as técnicas apresentadas neste tutorial, você poderá criar aplicativos robustos que interajam com os usuários de forma eficiente.

Próximos passos

Agora que você concluiu este tutorial, aqui estão alguns recursos adicionais que podem ajudar você a aprimorar suas habilidades de programação em Python:

Aproveite esses recursos adicionais para aprimorar suas habilidades de programação em Python e continuar sua jornada de aprendizado.