raw_input - Dos valores de una entrada en python?
string en python (13)
Esta es una pregunta algo simple y odio preguntarla aquí, pero no puedo encontrar la respuesta en otro lugar: ¿es posible obtener múltiples valores del usuario en una línea de Python?
Por ejemplo, en CI puede hacer algo como esto: scanf("%d %d", &var1, &var2)
. Sin embargo, no puedo entender cuál es el equivalente de Python de eso. Pensé que sería algo así como var1, var2 = input("Enter two numbers here: ")
, pero eso no funciona y no me quejo porque no tendría mucho sentido si lo hiciera.
¿Alguien conoce una buena manera de hacerlo de manera elegante y concisa?
Debe usar el método split()
que divide la entrada en dos entradas diferentes. Pase lo que pase en la división se busca y la entrada se divide desde allí. En la mayoría de los casos, es el espacio en blanco.
Por ejemplo, usted da la entrada 23 24 25
. Esperas 3 entradas diferentes como
num1 = 23
num2 = 24
num3 = 25
Entonces en Python, puedes hacer
num1,num2,num3 = input().split(" ")
En Python 2.*
, la input
permite al usuario ingresar cualquier expresión, por ejemplo, una tupla:
>>> a, b = input(''Two numbers please (with a comma in between): '')
Two numbers please (with a comma in between): 23, 45
>>> print a, b
23 45
En Python 3.*
, la input
es como la input
raw_input
2.*
, devolviéndole una cadena que es exactamente lo que el usuario tipeó (en lugar de eval
como 2.*
solía hacerlo en la input
), así que tendrá que hacerlo .split
, y / o eval
, & c pero también tendrás MUCHO más control de todo el asunto.
En Python 3, raw_input()
se renombró a input()
.
input([prompt])
Si el argumento de solicitud está presente, se escribe en la salida estándar sin una nueva línea final. La función luego lee una línea de entrada, la convierte en una cadena (quitando una nueva línea al final) y la devuelve. Cuando se lee EOF, se produce EOFError.
Entonces puedes hacer esto
x, y = input(''Enter two numbers separating by a space: '').split();
print(int(x) + int(y))
Si no coloca dos números usando un espacio, obtendrá una excepción ValueError
. Así que eso es bueno para ir.
NB Si necesita un comportamiento anterior de input()
, use eval(input())
Este es un código de muestra para tomar dos entradas separadas por un comando de división y un delimitador como ","
>>> var1, var2 = input("enter two numbers:").split('','')
>>>enter two numbers:2,3
>>> var1
''2''
>>> var2
''3''
Otras variaciones de delimitadores que se pueden utilizar son las siguientes:
var1, var2 = input("enter two numbers:").split('','')
var1, var2 = input("enter two numbers:").split('';'')
var1, var2 = input("enter two numbers:").split(''/'')
var1, var2 = input("enter two numbers:").split('' '')
var1, var2 = input("enter two numbers:").split(''~'')
La forma más fácil que encontré para mí fue el uso de función dividida con entrada Como si tuvieras dos variables a, b
a,b=input("Enter two numbers").split()
Eso es. hay un método más (método explícito), por ejemplo, desea tomar la entrada en tres valores
value=input("Enter the line")
a,b,c=value.split()
FÁCIL..
La manera de Python de mapear
printf("Enter two numbers here: ");
scanf("%d %d", &var1, &var2)
sería
var1, var2 = raw_input("Enter two numbers here: ").split()
Tenga en cuenta que no tenemos que especificar explícitamente split('' '')
porque split()
usa cualquier espacio en blanco como delimitador por defecto. Eso significa que si simplemente llamamos a split()
entonces el usuario podría haber separado los números usando pestañas, si realmente quería, y también espacios.
Python tiene tipado dinámico, por lo que no es necesario especificar %d
. Sin embargo, si ejecutó lo anterior, entonces var1
y var2
serían ambas cadenas. Puedes convertirlos a int
usando otra línea
var1, var2 = [int(var1), int(var2)]
O podrías usar la lista de comprensión
var1, var2 = [int(x) for x in [var1, var2]]
Para resumir, podrías haberlo hecho todo con este one-liner:
# Python 3
var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]
# Python 2
var1, var2 = [int(x) for x in raw_input("Enter two numbers here: ").split()]
La solución que encontré es la siguiente:
Pídale al usuario que ingrese dos números separados por una coma u otro carácter
value = input("Enter 2 numbers (separated by a comma): ")
Luego, la cadena se divide: n
toma el primer valor m
el segundo
n,m = value.split('','')
Finalmente, para usarlos como enteros, es necesario convertirlos
n, m = int(n), int(m)
Para n
cantidad de entradas, declare la variable como una lista vacía y use la misma sintaxis para continuar:
>>> x=input(''Enter value of a and b'').split(",")
Enter value of a and b
1,2,3,4
>>> x
[''1'', ''2'', ''3'', ''4'']
Realmente no se puede hacer a la manera C (creo) pero sería una manera pitónica de hacerlo (si tus ''entradas'' tienen espacios entre ellas):
raw_answer = raw_input()
answers = raw_answer.split('' '') # list of ''answers''
Para que puedas reescribir tu intento de:
var1, var2 = raw_input("enter two numbers:").split('' '')
Tenga en cuenta que esto es algo menos flexible que usar la ''primera'' solución (por ejemplo, si agrega un espacio al final, esto ya se romperá).
También tenga en cuenta que var1 y var2 seguirán siendo cadenas con este método cuando no se convierten a int.
Si necesita tomar dos enteros, diga a, b en python, puede usar la función de mapa.
Supongamos que la entrada es,
1 5 3 1 2 3 4 5
donde 1 representa el caso de prueba, 5 representa el número de valores y 3 representa un valor de tarea y en la siguiente línea dados 5 valores, podemos tomar dicha entrada usando este método en la versión PYTH 2.x.
testCases=int(raw_input())
number, taskValue = map(int, raw_input().split())
array = map(int, raw_input().split())
Puede reemplazar ''int'' en map () con otro tipo de datos necesario.
Toda la entrada será a través de una cadena. Depende de usted procesar esa cadena después de que la haya recibido. A menos que sea así, usted usa el método eval (input ()), pero eso no se recomienda para la mayoría de las situaciones de todos modos.
input_string = raw_input("Enter 2 numbers here: ")
a, b = split_string_into_numbers(input_string)
do_stuff(a, b)
Verifica esta práctica función:
def gets(*types):
return tuple([types[i](val) for i, val in enumerate(raw_input().split('' ''))])
# usage:
a, b, c = gets(int, float, str)
a,b=[int(x) for x in input().split()]
print(a,b)
Salida
10 8
10 8