2009-06-07 63 views
24

Esto es algo así como una pregunta simple y odio preguntar aquí, pero no puedo encontrar la respuesta en otro lugar: ¿es posible obtener múltiples valores del usuario en una línea de Python?Dos valores de una entrada en python?

Por ejemplo, en C que 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 por ahí sabe una buena manera de hacer esto de manera elegante y concisa?

+0

Pregunta reciente muy similar: http://stackoverflow.com/questions/959412/parsing-numbers-in-python – NicDumZ

Respuesta

6

Realmente no se puede hacer de la manera C (creo), sino una forma Pythonic de hacer esto sería (si sus 'entradas' tienen espacios entre ellos):

raw_answer = raw_input() 
answers = raw_answer.split(' ') # list of 'answers' 

por lo que podría reescribir su intento para:

var1, var2 = raw_input("enter two numbers:").split(' ') 

Tenga en cuenta que este es un poco menos flexible que el uso de la solución 'primero' (por ejemplo, si se añade un espacio al final esto ya se romperá).

También tenga en cuenta que var1 y var2 seguirán siendo cuerdas con este método cuando no echar a int.

42

forma en que el pitón para mapear

printf("Enter two numbers here: "); 
scanf("%d %d", &var1, &var2) 

habría

var1, var2 = raw_input("Enter two numbers here: ").split() 

Tenga en cuenta que no tenemos que especificar explícitamente split(' ') porque split() utiliza cualquier espacio en blanco como separador por defecto. Eso significa que si simplemente llamamos al split(), 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 cadenas. Puede convertirlos a int utilizando otra línea

var1, var2 = [int(var1), int(var2)] 

O usted podría utilizar lista por comprensión

var1, var2 = [int(x) for x in [var1, var2]] 

En resumen, se podría haber hecho todo el asunto con esta sola línea:

# 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()] 
8

En Python 2.*, input permite al usuario introducir 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.*, input es como 2.* 's raw_input, volviendo una cadena que es justo lo que el usuario escribió (en lugar de eval ing como 2.* utilizado para hacer en input), por lo que tiene que .split, y/o eval, & c pero también tendrá MUCHO más control de todo el asunto.

+0

Oh noes. Por favor, nunca haga esto: 'input()' permite la ejecución de código arbitrario. Simplemente escriba 'exit ('pwned!')' En el indicador de entrada y vea qué sucede. – 9000

3

Todas las entradas serán 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) 
2

Marque 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) 
+1

¡El acceso al índice no es necesario! 'return tuple (analizador (valor) para (analizador, valor) en zip (types, raw_input (prompt) .split ('')))'. – 9000

4

Si usted necesita tomar dos enteros decir a, b en Python se puede utilizar la función de mapa.
entrada Supongamos que es,

 
1 
5 3 
1 2 3 4 5 

donde 1 representan caso de prueba, 5 representan número de valores y 3 representa un valor de la tarea y en la próxima línea dada 5 valores, podemos tomar tal entrada utilizando este método en Pyth 2. x versión.

testCases=int(raw_input()) 
number, taskValue = map(int, raw_input().split()) 
array = map(int, raw_input().split()) 

Puede reemplazar 'int' en el mapa() con otro tipo de datos necesario.

3

Tiene que 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 

Así que en Python, se puede hacer

num1,num2,num3 = input().split(" ") 
1

La manera más fácil que he encontrado para mí estaba usando la función de división con la entrada Al igual que usted tiene dos variables a, b

a,b=input("Enter two numbers").split() 

Eso es todo. hay un método más (método explícito) EG desea tomar la entrada en tres valores

value=input("Enter the line") 
a,b,c=value.split() 

FÁCIL ..

1

Este es un ejemplo de código para tener dos entradas separadas por comandos de división y el 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('~')

1

La solución que encontré es la siguiente:


Preguntar al usuario que introduzca dos números separados por una coma u otro carácter

value = input("Enter 2 numbers (separated by a comma): ")

A continuación, la cadena se divide: n toma el primer valor y m el segundo

n,m = value.split(',')

Finalmente, para usarlos como números enteros, es necesario convertirlos

n, m = int(n), int(m)


Cuestiones relacionadas