¿Por qué son xy ycadenas en lugar de ints en el siguiente código?
(Nota: en Python 2.x uso raw_input(). En Python 3.x uso input(). raw_input()Se renombró 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
python
python-3.x
python-2.7
input
int
smci
fuente
fuente

Respuestas:
TLDR
inputfunción, pero lainputfunción de Python 2 sí (lea la siguiente sección para comprender la implicación).inputes laraw_inputfunción.Python 2.x
Había dos funciones para obtener la entrada del usuario, llamadas
inputyraw_input. La diferencia entre ellos es,raw_inputno evalúa los datos y regresa como es, en forma de cadena. Pero,inputevaluará lo que haya ingresado y se devolverá el resultado de la evaluación. Por ejemplo,Los datos
5 + 17se evalúan y el resultado es22. Cuando evalúa la expresión5 + 17, detecta que está agregando dos números y, por lo tanto, el resultado también será del mismointtipo. Por lo tanto, la conversión de tipo se realiza de forma gratuita y22se devuelve como resultado deinputy almacenada endatavariable. Puedes pensarinputcomo elraw_inputcompuesto con unaevalllamada.Nota: debe tener cuidado cuando esté usando
inputPython 2.x. Le expliqué por qué uno debe tener cuidado al usarlo, en esta respuesta .Pero,
raw_inputno evalúa la entrada y regresa como es, como una cadena.Python 3.x
Python 3.xy
inputPython 2.xraw_inputson similares yraw_inputno están disponibles en Python 3.x.Solución
Para responder a su pregunta, dado que Python 3.x no evalúa ni convierte el tipo de datos, debe convertir explícitamente a
ints, conint, de esta maneraPuede aceptar números de cualquier base y convertirlos directamente a base-10 con la
intfunción, como estaEl segundo parámetro dice cuál es la base de los números ingresados y luego internamente lo comprende y lo convierte. Si los datos ingresados son incorrectos, arrojará un
ValueError.Para valores que pueden tener un componente fraccionario, el tipo sería
floatmás queint:Aparte de eso, su programa se puede cambiar un poco, así
Puede deshacerse de la
playvariable usandobreakywhile True.fuente
evalfuncionaría, pero no lo hagas a menos que tengas razones apremiantes.ast.literal_evalpara eso. No tiene las preocupaciones de seguridad deeval.int(input()... ¿en la parte superior? Python 2 está llegando al final de su vida útil y la información de Python 3 está demasiado enterrada IMOEn Python 3.x,
raw_inputse le cambió el nombreinputyinputse eliminó Python 2.x.Esto significa que, al igual que
raw_input,inputen Python 3.x siempre devuelve un objeto de cadena.Para solucionar el problema, debe hacer explícitamente esas entradas en números enteros poniéndolos en
int:fuente
Para un entero múltiple en una sola línea,
mappodría ser mejor.Si el número ya se conoce (como 2 enteros), puede usar
fuente
input()(Python 3) yraw_input()(Python 2) siempre devuelven cadenas. Convierta el resultado a entero explícitamente conint().fuente
Varias preguntas requieren la entrada de varios enteros en una sola línea. La mejor manera es ingresar toda la cadena de números una línea y luego dividirlos en enteros. Aquí hay una versión de Python 3:
También se puede utilizar una lista de comprensión
Y para convertir todas las entradas de cadena a int hacemos lo siguiente
imprimirá los elementos de la lista en línea recta.
fuente
Convierte a enteros:
De manera similar para números de coma flotante:
fuente
el ciclo for se ejecutará 'n' número de veces. la segunda 'n' es la longitud de la matriz. la última declaración asigna los enteros a una lista y toma la entrada en forma separada por espacios. También puede devolver la matriz al final del ciclo for.
fuente
Encontré un problema al tomar una entrada entera al resolver un problema en CodeChef , donde dos enteros, separados por espacio, deberían leerse desde una línea.
Si bien
int(input())es suficiente para un solo entero, no encontré una forma directa de ingresar dos enteros. Intenté esto:Ahora uso num1 y num2 como enteros. Espero que esto ayude.
fuente
idestruye cuandoforse sale del bucle?@hosch250Cuando se sale de un bucle, el valor de la variable de índice (aquíi) permanece. Probé esta pieza y funciona correctamente.num1, num2 = map(int, input().split())si sabe cuántos enteros encontrará onums = list(map(int, input().split()))si no.fuente
Mientras que en su ejemplo,
int(input(...))hace el truco, en cualquier caso,python-future'sbuiltins.inputvale la pena considerar, ya que asegura que su código funciona tanto para Python 2 y 3 y el comportamiento predeterminado desactiva de python2 deinputtratar de ser 'inteligente' sobre el tipo de datos de entrada (builtins.inputbásicamente sólo se comporta comoraw_input)fuente