/ / Como posso ler entradas como inteiros? - python, python-2.7, python-3.x, int

Como posso ler entradas como inteiros? - python, python-2.7, python-3.x, int

Por que esse código não insere inteiros? Tudo na web diz para usar raw_input(), mas eu li no Stack Overflow (em um thread que não lidou com entrada de inteiro) que raw_input() foi renomeado para input() em Python 3.x.

play = True

while play:

x = input("Enter a number: ")
y = input("Enter a number: ")

print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)

if input("Play again? ") == "no":
play = False

Respostas:

202 para resposta № 1

Python 2.x

Havia duas funções para obter a entrada do usuário, chamada input e raw_input. A diferença entre eles é, raw_input não avalia os dados e retorna como está, em forma de string. input irá avaliar o que você entrou e o resultado da avaliação será retornado. Por exemplo,

>>> import sys
>>> sys.version
"2.7.6 (default, Mar 22 2014, 22:59:56) n[GCC 4.8.2]"
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type "int">)

Os dados 5 + 17 é avaliado e o resultado é 22. Quando avalia a expressão 5 + 17, ele detecta que você está adicionando dois números e assim o resultado também será do mesmo int tipo. Então, a conversão de tipo é feita gratuitamente e 22 é devolvido como resultado de input e armazenado em data variável. Você pode pensar em input Enquanto o raw_input composto com um eval ligar.

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type "int">)

Nota: você deve ter cuidado quando estiver usando input no Python 2.x. Eu expliquei porque alguém deve ter cuidado ao usá-lo, esta resposta.

Mas, raw_input não avalia a entrada e retorna como está, como uma string.

>>> import sys
>>> sys.version
"2.7.6 (default, Mar 22 2014, 22:59:56) n[GCC 4.8.2]"
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
("5 + 17", <type "str">)

Python 3.x

Python 3.x "s input e Python 2.x "s raw_input são semelhantes e raw_input não está disponível no Python 3.x.

>>> import sys
>>> sys.version
"3.4.0 (default, Apr 11 2014, 13:05:11) n[GCC 4.8.2]"
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
("5 + 17", <class "str">)

Solução

Para responder à sua pergunta, como o Python 3.x não avalia e converte o tipo de dados, você precisa converter explicitamente para ints, com int, como isso

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Você pode aceitar números de qualquer base e convertê-los diretamente para a base-10 com o int função, como esta

>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365

O segundo parâmetro informa qual é a base dos números inseridos e, em seguida, internamente, ele entende e converte. Se os dados inseridos estiverem errados, ValueError.

>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: "1234"

Além disso, o seu programa pode ser alterado um pouco, como este

while True:
...
...
if input("Play again? ") == "no":
break

Você pode se livrar do play variável usando break e while True.

PS: Python não espera ; no final da linha :)


28 for answer № 2

Em Python 3.x, raw_input foi renomeado para input e o Python 2.x input foi removido.

Isso significa que, assim como raw_input, input no Python 3.x sempre retorna um objeto de string.

Para corrigir o problema, você precisa explicitamente fazer essas entradas em números inteiros, colocando-os em int:

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Além disso, o Python não precisa / usar ponto-e-vírgula para finalizar linhas. Então, tê-los não faz nada de positivo.


18 para resposta № 3

Para múltiplos inteiros em uma única linha, mapa pode ser melhor.

arr = map(int, raw_input().split())

Se o número já é conhecido, (como 2 inteiros), você pode usar

num1, num2 = map(int, raw_input().split())

13 para resposta № 4

input() (Python 3) e raw_input() (Python 2) sempre return strings. Converta o resultado para inteiro explicitamente com int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Dica profissional: o ponto-e-vírgula não é necessário no Python.


8 para resposta № 5

Várias perguntas requerem entrada para vários inteiros em uma única linha. A melhor maneira é inserir toda a cadeia de números em uma linha e dividi-los em inteiros.

 p=raw_input()
p=p.split()
for i in p:
a.append(int(i))

4 para resposta № 6

Converta em números inteiros:

my_number = int(input("enter the number"))

Similarmente para números de ponto flutuante:

my_decimalnumber = float(input("enter the number"))

4 para resposta № 7

Tomando int como entrada em python: tomamos uma entrada de cadeia simples usando:

input()

Agora queremos int como input.so nós typecast esta string para int. simplesmente usando:

int(input())

3 para resposta № 8

Python 3.x tem input() função que retorna sempre string.So você deve converter para int

python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

python 2.x

Em python 2.x raw_input() e input() funções sempre retornam string, então você deve convertê-las para int também.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))

3 para resposta № 9

No Python 3.x. Por padrão, a função de entrada recebe entrada no formato de string. Para convertê-lo em inteiro, você precisa incluir int (input ())

x=int(input("Enter the number"))

2 para resposta № 10

Eu encontrei um problema de tomada de entrada inteira ao resolver um problema em CodeChef, onde dois inteiros - separados por espaço - devem ser lidos de uma linha.

Enquanto int(input()) é suficiente para um único inteiro, eu não encontrei um caminho direto para a entrada de dois inteiros. Eu tentei isso:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
if num[i] == " ":
break

num1 = int(num[:i])
num2 = int(num[i+1:])

Agora eu uso num1 e num2 como inteiros. Espero que isto ajude.


2 para resposta № 11
def dbz():
try:
r = raw_input("Enter number:")
if r.isdigit():
i = int(raw_input("Enter divident:"))
d = int(r)/i
print "O/p is -:",d
else:
print "Not a number"
except Exception ,e:
print "Program halted incorrect data entered",type(e)
dbz()

Or

num = input("Enter Number:")#"input" will accept only numbers

2 para resposta № 12

Enquanto no seu exemplo, int(input(...)) faz o truque em qualquer caso, python-future"s builtins.input vale a pena considerar desde que o seu código funcione para o Python 2 e 3 e desabilita o comportamento padrão do Python2 input tentando ser "inteligente" sobre o tipo de dados de entrada (builtins.input basicamente apenas se comporta como raw_input).


1 para a resposta № 13

Por padrão, a função de entrada aceita a entrada como formato de string

para outro tipo de dados você tem que lançar a entrada do usuário

No Python 2 usamos raw_input () função. ele aguarda o usuário digitar alguma entrada e pressionar return e precisamos armazenar o valor em uma variável, lançando como nosso tipo de dados desejado. Tenha cuidado ao usar o tipo de fundição

x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input
x = float(raw_input("Enter a float number: ")) #float input
x = eval(raw_input("Enter a float number: ")) #eval input

No Python 3 nós usamos entrada() função que retorna um valor de entrada do usuário

x = input("Enter a number: ") #String input

se você digitar uma string, int, float, eval, ela será usada como string input

x = int(input("Enter a number: ")) #integer input

se você digitar uma string para int cast ValueError: literal inválido para int () com base 10:

x = float(input("Enter a float number: ")) #float input

se você inserir uma string para float cast ValueError: não foi possível converter a string para float

x = eval(input("Enter a float number: ")) #eval input

se você digitar uma string para eval cast

NameError: nome "" não está definido

Esses erros também aplicáveis ​​para o python 2


0 para a resposta № 14

Sim, em python 3.x raw_input é substituído por input. Para reverter ao antigo comportamento de input usar:

eval(input("Enter a number: "))

Isso permitirá que o Python saiba que a entrada inserida é inteira


0 para a resposta № 15
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))

o loop for deve executar o número "n" de vezes. o segundo "n" é o comprimento da matriz. a última instrução mapeia os inteiros para uma lista e recebe a entrada no formato separado por espaço. você também pode retornar o array no final do loop.