¿Cómo puedo leer las entradas como números?

¿Por qué son las cadenas x e y lugar de los ints en el siguiente código? 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 

TLDR

  • Python 3 no evalúa los datos recibidos con input función de input , pero la función de input 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ón raw_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. Pero, 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, ) 

Los datos 5 + 17 son evaluados y el resultado es 22 . Cuando evalúa la expresión 5 + 17 , detecta que estás agregando 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, ) 

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', ) 

Python 3.x

La input Python 3.x y el 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', ) 

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 , así

 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 "", line 1, in  ValueError: invalid literal for int() with base 2: '1234' 

Para los valores que pueden tener un componente fraccionario, el tipo sería float lugar de int :

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

Aparte de eso, tu progtwig 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 🙂

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 comas para terminar las líneas. Entonces, tenerlos no hace nada positivo.

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()) 

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.

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)) 

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")) 

Python 3.x
Tomando int como entrada en python: tomamos una entrada de string simple usando:

 input() 

Ahora queremos int como entrada. Así que string esta string a int simplemente usando:

 int(input()) 

Python 3.x tiene input() función de 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: ")) 

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.

 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 

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 ).

 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 ie 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 

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

Prueba esto,

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

int () es una función incorporada de python que convierte cualquier tipo de datos en un entero.

A mucha gente le gusta hacer int(input("etc")) , pero si pones una cadena, generará un error.

Lo que me gusta hacer es esto:

 s = input("integer: ") integer = int(s) 

Ahora usa el entero para cualquier propósito !!

Además, si s es una cadena, ¡esto no genera un error!

Al menos, no de inmediato.

analizar la entrada en un entero con int

 x = int(input("What is x?")) 
 play = True while play: x = input("Enter a number: ") y = input("Enter a number: ") print(int(x) + int(y)) print(int(x) - int(y)) print(int(x) * int(y)) print(int(x) / int(y)) print(int(x) % int(y)) if input("Play again? ") == "no": play = False 

Esto le permite saber que las variables x e y son enteros y, por lo tanto, los utilizan como enteros.
Si quieres que sea capaz de usar decimales, cambia int para que float .

La salida para la primera función:

 print(int(x) + int(y)) 

x = 3 y y = 7 devolvieron 10 .