python - online - ¿Cómo puedo leer entradas como enteros?
python 2to3 (15)
¿Por qué este código no introduce enteros? Todo en la web dice que se debe usar raw_input()
, pero leí en Stack Overflow (en un hilo que no se raw_input()
entrada de enteros) que se cambió el nombre de raw_input()
a input()
en 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
Convertir a enteros:
my_number = int(input("enter the number"))
Del mismo modo para los números de punto flotante:
my_decimalnumber = float(input("enter the number"))
En Python 3.x, se cambió el nombre de raw_input
a input
y se eliminó la input
Python 2.x.
Esto significa que, al igual que raw_input
, la input
en Python 3.x siempre devuelve un objeto de cadena.
Para solucionar el problema, debe hacer explícitamente esas entradas en enteros colocándolos en int
:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Además, Python no necesita / usa puntos y coma para terminar las líneas. Entonces, tenerlos no hace nada positivo.
En Python 3.x. Por defecto, la función de entrada toma entrada en formato de cadena. Para convertirlo en entero, debes incluir int (input ())
x=int(input("Enter the number"))
Encontré un problema al tomar entradas de enteros al resolver un problema en CodeChef , donde dos enteros, separados por espacios, deberían leerse desde una línea.
Mientras que int(input())
es suficiente para un solo entero, no encontré una forma directa de ingresar dos enteros. Intenté esto:
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:])
Ahora uso num1 y num2 como enteros. Espero que esto ayude.
Múltiples preguntas requieren entrada para varios enteros en una sola línea. La mejor manera es ingresar toda la cadena de números en una línea y luego dividirlos en números enteros.
p=raw_input()
p=p.split()
for i in p:
a.append(int(i))
Mientras que en su ejemplo, int(input(...))
hace el truco en cualquier caso, la función builtins.input
python-future
vale la pena ya que garantiza que su código funcione tanto para Python 2 como para 3 y deshabilite el comportamiento predeterminado de Python2 La input
intenta ser "inteligente" sobre el tipo de datos de entrada ( builtins.input
básicamente se comporta como raw_input
).
Para varios enteros en una sola línea, el mapa podría ser mejor.
arr = map(int, raw_input().split())
Si el número ya es conocido, (como 2 enteros), puede usar
num1, num2 = map(int, raw_input().split())
Python 3.x tiene la función input()
que devuelve siempre una cadena. Por lo tanto, debe convertir a int
python 3.x
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
python 2.x
En python 2.x, las raw_input()
y input()
siempre devuelven cadenas, por lo que también debe convertirlas a int.
x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
Sí, en Python 3.x, raw_input
se reemplaza con input
. Para revertir al antiguo comportamiento de uso de input
:
eval(input("Enter a number: "))
Esto le permitirá a Python saber que la entrada ingresada es un entero
Tomando int como entrada en python: tomamos una entrada de cadena simple usando:
input()
ahora queremos int como entrada. Así que encadenamos esta cadena a int. simplemente usando:
int(input())
input()
(Python 3) y raw_input()
(Python 2) siempre devuelven cadenas. Convierta el resultado a entero explícitamente con int()
.
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Consejo profesional: en Python no se necesitan puntos y coma.
TLDR
- Python 3 no evalúa los datos recibidos con
input
función deinput
, pero la función deinput
Python 2 sí lo hace (lea la siguiente sección para comprender la implicación). - El equivalente de Python 2 de la
input
de Python 3 es la funciónraw_input
.
Python 2.x
Había dos funciones para obtener la entrada del usuario, llamada input
y raw_input
. La diferencia entre ellos es que, raw_input
no evalúa los datos y devuelve tal cual, en forma de cadena. Sin embargo, la input
evaluará lo que haya ingresado y se devolverá el resultado de la evaluación. Por ejemplo,
>>> 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''>)
Los datos 5 + 17
son evaluados y el resultado es 22
. Cuando evalúa la expresión 5 + 17
, detecta que estás sumando dos números y, por lo tanto, el resultado también será del mismo tipo int
. Por lo tanto, la conversión de tipo se realiza de forma gratuita y 22
se devuelve como resultado de la input
y se almacena en data
variable de data
. Puede pensar en la input
como el raw_input
compuesto con una llamada eval
.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type ''int''>)
Nota: debe tener cuidado cuando utilice la input
en Python 2.x. Expliqué por qué se debe tener cuidado al usarlo, en esta respuesta .
Pero, raw_input
no evalúa la entrada y devuelve como es, como una cadena.
>>> 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
La input
Python 3.x y raw_input
Python 2.x son similares y raw_input
no está disponible en 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''>)
Solución
Para responder a su pregunta, ya que Python 3.x no evalúa y convierte el tipo de datos, tiene que convertir explícitamente a int
s, con int
, como este
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Puede aceptar números de cualquier base y convertirlos directamente a base-10 con la función int
, como esto
>>> 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
El segundo parámetro indica cuál es la base de los números ingresados y luego, internamente, lo entiende y lo convierte. Si los datos ingresados son incorrectos, lanzará un 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''
Aparte de eso, tu programa se puede cambiar un poco, así
while True:
...
...
if input("Play again? ") == "no":
break
Puedes deshacerte de la variable de play
usando break
y while True
.
PD : Python no espera ;
al final de la línea :)
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
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))
el bucle for se ejecutará ''n'' número de veces. la segunda ''n'' es la longitud de la matriz. la última instrucción asigna los enteros a una lista y toma entradas en forma separada por espacios. También puede devolver la matriz al final de for loop.
play = True
while play:
#you can simply contain the input function inside an int function i.e int(input(""))
#This will only accept int inputs
# and can also convert any variable to ''int'' form
x = int(input("Enter a number: "))
y = int(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