2009-10-19 49 views
8

Estoy familiarizado con la función input(), para leer una sola variable de la entrada del usuario. ¿Hay una forma similar y fácil de leer dos variables?Leer dos variables en una sola línea con Python

Busco el equivalente a:

scanf("%d%d", &i, &j); // accepts "10 20\n" 

Una manera soy capaz de lograr esto es utilizar raw_input() y luego split lo que fue ingresado. ¿Hay una manera más elegante?

Esto no es para uso en vivo. Sólo para aprender ..

Respuesta

27

No, la forma habitual es raw_input().split()

En su caso puede utilizar map(int, raw_input().split()) si queremos que sean números enteros en lugar de cadenas

No utilice input() para eso. Considere lo que ocurre si el usuario introduce

import os;os.system('do something bad')

+4

Tenga en cuenta que a partir de Python 3.0, 'raw_input' fue renombrada a' input'. (Y para obtener el comportamiento original de 'input', use' eval (input) '.) – Stephan202

+0

... que debería ser" apply 'eval' a la salida de' input' ". – Stephan202

+0

Sí, el comportamiento obvio en 3 es mucho mejor, pero ojalá hubieran dejado caer algunas advertencias en 2.6 sobre esos cambios. Creo que necesito estudiar la guía de actualización –

9

También puede leer desde sys.stdin

import sys 

a,b = map(int,sys.stdin.readline().split()) 
4

Soy nuevo en esto también. Hice un poco de investigación en el sitio web python.org y un poco de piratería para que esto funcione. La función raw_input vuelve a estar activada, modificada desde entrada. Esto es lo que ocurrió:

i,j = raw_input("Enter two values: ").split 
i = int(i) 
j = int(j) 

Por supuesto, el código no es tan elegante como los de una sola línea utilizando scanf de C o C++ 's cin. El código de Python se ve más cerca de Java (que emplea un mecanismo completamente diferente de C, C++ o Python) de modo que cada variable debe tratarse por separado.

En Python, el raw_input función obtiene caracteres de la consola y los concatena en una sola cadena como su salida. Cuando una sola variable se encuentra en la mano del lado izquierdo del operador de asignación, el dividir rompe esta función Cuerda en una lista de cadena valores.

En nuestro caso, donde esperamos dos variables, podemos obtener valores en ellas usando una lista separada por comas para sus identificadores. Los valores de String se asignan a las variables enumeradas. Si queremos hacer operaciones aritméticas con estos valores, tenemos que convertirlos en el numérico int (o flotador) tipo de datos utilizando una función de int o flotador función de Python.

Sé que esta publicación es una respuesta a una publicación muy antigua y, probablemente, el conocimiento ha estado allí como "conocimiento común" durante algún tiempo.Sin embargo, hubiera apreciado una publicación como esta en lugar de tener que pasar unas horas buscando y pirateando hasta que se me ocurrió lo que sentí era la solución más elegante que se puede presentar en un aula CS1.

1

primer lugar leer la línea completa en una cadena como

string = raw_input() 

Entonces utilizar un bucle como este

prev = 0 
    lst = [] 
    index = 0 
    for letter in string : 
     if item == ' ' or item == '\n' : 
      lst.append(int(string[prev:index]) 
      prev = index + 1 

Este bucle toma una línea completa como entrada a la cadena y procesa las partes en individualmente y luego agrega los números a la lista, primero después de convertirlos en enteros.

0

o se puede hacer esto

input_user=map(int,raw_input().strip().split(" ")) 
0

se puede leer valores int 2 mediante el uso de esta en Python 3.6.1

n,m = map(int,input().strip().split(" ")) 
+2

¿Puede agregar una explicación de su código y por qué soluciona el problema? * Solo el código * las respuestas a menudo no son tan útiles. – Zabuza

0

También puede utilizar este método para cualquier número de entradas. Considere lo siguiente para tres entradas separadas por espacios en blanco:

import sys 

S = sys.stdin.read() 
S = S.split() 
S = [int(i) for i in S] 
l = S[0] 
r = S[1] 
k = S[2] 
Cuestiones relacionadas