Lee dos variables en una sola línea con Python

Estoy familiarizado con la función input (), para leer una sola variable de la entrada del usuario. ¿Hay alguna manera fácil de leer dos variables?

Estoy buscando el equivalente de:

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

Una forma en que puedo lograrlo es usar raw_input() y luego split lo que se ingresó. ¿Hay una forma más elegante?

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

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

En su caso, puede usar map(int, raw_input().split()) si desea que sean enteros en lugar de cadenas

No uses input() para eso. Considera lo que pasa si el usuario ingresa

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

También puedes leer desde sys.stdin

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

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 funcionara. La función raw_input está de vuelta otra vez, cambiada desde la entrada . Esto es lo que se me 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 que utilizan el scanf de C o el cin de C ++. El código de Python se ve más cerca de Java (que emplea un mecanismo completamente diferente de C, C ++ o Python) de manera que cada variable debe tratarse por separado.

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

En nuestro caso, donde esperamos dos variables, podemos obtener valores usando una lista separada por comas para sus identificadores. Los valores de cadena se asignan a las variables enumeradas. Si queremos hacer aritmética con estos valores, debemos convertirlos en el tipo de datos numérico int (o float ) utilizando la función int o float incorporada de Python.

Sé que esta publicación es una respuesta a una publicación muy antigua y probablemente el conocimiento ha estado ahí como “conocimiento común” por algún tiempo. Sin embargo, me hubiera gustado una publicación como esta en lugar de tener que dedicar algunas horas a buscar y hackear hasta que encontré lo que sentí que era la solución más elegante que se puede presentar en un salón de clase CS1.

En primer lugar, lea la línea completa en una cadena como

  string = raw_input() 

Luego usa un bucle for 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 él individualmente y luego agrega los números a la lista, primero después de convertirlos en números enteros.

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] 

o puedes hacer esto

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

puedes leer 2 valores int usando esto en python 3.6.1

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