HOWTO · Python
Como ler a entrada do utilizador como números inteiros em Python
Leia a entrada do utilizador como números inteiros em Python 3: converta um único valor com int(input()), leia vários números inteiros de uma só linha com split() e map() e trate entradas inválidas com try-except.
Nesta página
Em Python 3, a função input() devolve sempre uma string. Para trabalhar com o valor introduzido como número, converta essa string com int(). Este artigo mostra como ler um único número inteiro, como tratar uma entrada que não é um inteiro válido e como ler vários números inteiros numa só linha.
Este artigo abrange o Python 3. O Python 2 utilizava raw_input() para a mesma tarefa e atingiu o seu fim de vida em 2020, pelo que os exemplos abaixo utilizam input() ao longo de todo o texto.
Ler um número inteiro com int(input())
Comece por ler a entrada como uma string e, em seguida, converta-a:
user_input = input("Please enter an integer: ")
integer_value = int(user_input)
print("You entered:", integer_value)
print(type(integer_value))
Saída:
Please enter an integer: 42
You entered: 42
<class 'int'>
A conversão e a leitura são frequentemente combinadas numa única linha, que se comporta exatamente da mesma forma:
integer_value = int(input("Please enter an integer: "))
Se o utilizador introduzir algo que não é um número inteiro, como hello ou 3.5, int() levanta um ValueError e o programa termina. A secção seguinte mostra como lidar com esse caso.
Tratar entradas inválidas com try-except
Envolva a conversão num bloco try-except para intercetar o ValueError e voltar a pedir, em vez de o programa falhar:
while True:
user_input = input("Please enter an integer: ")
try:
integer_value = int(user_input)
print("You entered:", integer_value)
break
except ValueError:
print("That's not a valid integer. Please try again.")
O ciclo continua a pedir até a conversão ser bem-sucedida. Só então o break termina o ciclo.
Saída:
Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10
Validar a entrada desta forma é uma boa prática em programas interativos: um erro de escrita deve custar ao utilizador apenas mais um pedido, e não toda a execução.
Ler vários números inteiros numa só linha
Quando um programa precisa de vários números de uma só vez, permita que o utilizador os escreva numa única linha, separados por espaços. split() divide a linha em partes de string e map() converte cada parte com int():
numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))
print(numbers)
print("Sum:", sum(numbers))
Saída:
Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108
Uma compreensão de lista faz o mesmo trabalho e é igualmente comum:
numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]
Se precisar de um número fixo de valores, desempacote o resultado diretamente. Aqui, o utilizador tem de introduzir exatamente dois números inteiros:
a, b = map(int, input("Enter two numbers: ").split())
print("a =", a)
print("b =", b)
Saída:
Enter two numbers: 3 17
a = 3
b = 17
Introduzir mais ou menos valores do que o esperado levanta um ValueError, pelo que deve combinar este padrão com o ciclo try-except da secção anterior quando o número de valores for importante.
O que int() aceita e o que rejeita
int() é mais tolerante do que muitas pessoas esperam. Ignora os espaços em branco no início e no fim, aceita um sinal + ou - opcional e permite sublinhados entre os dígitos:
print(int(" 42 "))
print(int("+7"))
print(int("1_000"))
Saída:
42
7
1000
Rejeita tudo o que não seja um literal de número inteiro em forma de string, incluindo "3.5", "12a" e a string vazia "" — todos estes casos levantam ValueError. Se a entrada puder conter valores decimais, converta com float(), ou utilize int(float(text)) quando for aceitável descartar a parte fracionária.
Conclusão
Ler números inteiros em Python 3 resume-se a um único padrão: input() devolve uma string e int() transforma-a num número inteiro. Utilize um ciclo try-except para que as entradas inválidas sejam pedidas novamente, em vez de fazerem o programa falhar, e recorra a split() com map() ou a uma compreensão de lista quando precisar de vários números inteiros de uma só linha.
FAQ
-
Como leio a entrada do utilizador como um número inteiro em Python 3?
Utilizeint(input()):input()lê uma linha como uma string eint()converte-a num número inteiro. -
Como leio vários números inteiros de uma única linha?
Divida a linha e converta cada parte, por exemplolist(map(int, input().split()))ou[int(x) for x in input().split()]. -
O que acontece se o utilizador introduzir um valor que não é um número inteiro?
int()levanta umValueError. Intercete-o com um blocotry-excepte volte a pedir. -
Porque não posso fazer aritmética diretamente sobre o resultado de input()?
Porqueinput()devolve uma string, e não um número. Somar uma string e um número inteiro levanta umTypeErroraté converter a string comint(). -
Qual é a diferença entre Python 2 e Python 3 na leitura de entradas?
O Python 2 lia a entrada de texto comraw_input(), enquanto o Python 3 utilizainput(). A conversão comint()funciona da mesma forma em ambos, mas o Python 2 já não é mantido, pelo que o código novo deve utilizar Python 3.