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