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 № 1Python 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 int
s, 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.