¿Hay una forma más corta de obtener la entrada del usuario en python?

17

Esto no es un desafío. Me pregunto si es posible obtener la entrada del usuario en dos variables separadas en python (2 o 3) con menos de 19 bytes. Estos son todos los más cortos que puedo obtener:

a,b=input(),input()
a=input();b=input() (newline replaced with semicolon for readability)
i=input;a,b=i(),i()

¿Hay alguna forma más corta de hacer esto?

DJMcMayhem
fuente
2
El tercero probablemente sería el mejor si está recibiendo más de dos entradas.
SuperJedi224
1
Iba a decir argumentos de la línea de comandos con a,b=sys.argv[1:2]o lo que sea, pero entonces necesitas un import sys(¿verdad?)
Alex A.
En python3 a,b=input().split()sería otra solución de 19 bytes, aunque no una mejora. Tenga en cuenta que eso significa que ayb son cadenas y que la entrada se ingresa de una vez separada por un espacio.
Matty
No estoy seguro de si ayuda, pero en algunos idiomas podría usar un vector para obtener dos números, en lugar de 2 variables. Para dos variables arbitrarias se puede usar un contenedor más complicado.
Dennis Jaheruddin
a,b=input()en Py2
Oliver Ni

Respuestas:

11

Si preguntar al usuario no importa, esto es un poco más corto que evalpara 3 o más:

a,b,c=map(input,[1]*3)
a,b,c=map(input,'111')

También es más corto incluso si la solicitud no está bien:

a,b,c=map(input,['']*3)

Lamentablemente, la idea de xnor no guarda nada para 2 entradas, ya que aún es más larga (19 bytes). Sin embargo, si tiene alguna cadena (o iterable apropiada) con la longitud adecuada (¿por magia?), Entonces podría ser más corta.

xnor encontró un ejemplo de una cadena mágica para 3 entradas solo en Python 2:

a,b,c=map(input,`.5`)

Sin embargo, esto también requiere que las indicaciones no sean importantes.

Este truco realmente ayuda a guardar bytes para un gran número de entradas mediante la 1eXnotación (obteniendo entradas x + 3):

 a,b,c,d,e,f=map(input,`1e3`)

Explicación:

La mapfunción de Python realiza la función que se pasa en cada elemento del iterable que también se le pasa, y devuelve la lista (u objeto de mapa) que contiene los resultados de estas llamadas. Para el primer ejemplo, el mapa podría descomponerse en:

[input(1), input(1), input(1)]
FryAmTheEggman
fuente
2
Hacer map(input,'xxx')es igual para 3 vars, mejor para 2 y peor para 4+.
xnor
3
Si, por casualidad, necesita tomar exactamente 22 entradas, map(input,`id`)es más corto :-). Del mismo modo, map(input,`.1`)para 19 entradas.
xnor
3
En realidad, a,b,c=map(input,`.5`)guarda un carácter para 3 entradas, ya que .5se representa como 0.5.
xnor
Si, eso esta bien. ¡Buen truco!
DJMcMayhem
6

Para 3 o más entradas, esto es más corto:

a,b,c=eval("input(),"*3)
Keith Randall
fuente
4

Tenga en cuenta que a menos que la pregunta especifique el tipo de entrada o requiera un programa completo, puede tomar la entrada como argumentos de función , eliminando la necesidad de input() . Cuando esto no sea una opción, lo siguiente puede ayudar en ciertos casos.


Si desea caracteres únicos en las variables ay b, puede usar

a,b=input()

Al ingresar una cadena de 2 caracteres, se asignará el primer carácter y se asignará ael segundo carácter b. (Menos de 2 o más de 2 caracteres en la cadena darán un error).

Si necesita más de un solo carácter por variable, este enfoque no funcionará. Esto aún podría usarse para ingresar 2 números de un solo dígito como una cadena. Si se requieren números más allá de 9, el rango completo de caracteres de entrada potenciales podría interpretarse como números.

Tenga en cuenta que esto también funciona para más de 2 variables:

a,b,c,d,e,f,g,h=input()

Esto funciona porque en Python una cadena es una secuencia de caracteres y se puede usar en cualquier lugar donde se espere una secuencia.

trichoplax
fuente