Existe-t-il un moyen plus court d'obtenir les entrées des utilisateurs en python?

17

Ce n'est pas un défi. Je me demande s'il est possible d'obtenir une entrée utilisateur dans deux variables distinctes en python (2 ou 3) avec moins de 19 octets. Ce sont tous les plus courts que je peux obtenir:

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

Existe-t-il un moyen plus court de procéder?

DJMcMayhem
la source
2
Le troisième serait probablement le meilleur si vous prenez plus de deux entrées.
SuperJedi224
1
J'allais dire des arguments de ligne de commande avec a,b=sys.argv[1:2]ou autre chose mais alors vous avez besoin d'un import sys(non?)
Alex A.
En python3 a,b=input().split()serait une autre solution de 19 octets, pas une amélioration cependant. Notez que cela signifie que a et b sont des chaînes et l'entrée est entrée en une seule fois séparée par un espace.
Matty
Je ne sais pas si cela aide, mais dans certaines langues, vous pouvez utiliser un vecteur pour obtenir deux nombres, plutôt que 2 variables. Pour deux variables arbitraires, un conteneur plus compliqué peut être utilisé.
Dennis Jaheruddin
a,b=input()dans Py2
Oliver Ni

Réponses:

11

Si l'invite de l'utilisateur n'a pas d'importance, elle est légèrement plus courte que evalpour 3 ou plus:

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

Il est également plus court même si l'invite n'est pas correcte:

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

Malheureusement, l'idée de xnor ne sauvegarde rien pour 2 entrées car elle est encore plus longue (19 octets). Cependant, si vous avez déjà une chaîne (ou une itérable appropriée) avec la longueur appropriée (parce que magique?), Elle pourrait être plus courte.

xnor a trouvé un exemple de chaîne magique pour 3 entrées en Python 2 uniquement:

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

Cela nécessite également que les invites ne soient pas importantes, cependant.

Cette astuce permet en fait d'économiser des octets pour un grand nombre d'entrées en utilisant la 1eXnotation (obtenir x + 3 entrées):

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

Explication:

La mapfonction de Python exécute la fonction qui lui est transmise sur chaque élément de l'itérable qui lui est également transmis, et renvoie la liste (ou l'objet de carte) contenant les résultats de ces appels. Pour le premier exemple, la carte pourrait être décomposée en:

[input(1), input(1), input(1)]
FryAmTheEggman
la source
2
Faire map(input,'xxx')est de longueur égale pour 3 vars, mieux pour 2 et pire pour 4+.
xnor
3
Si, par hasard, vous devez prendre exactement 22 entrées, map(input,`id`)c'est plus court :-). De même, map(input,`.1`)pour 19 entrées.
xnor
3
En fait, a,b,c=map(input,`.5`)enregistre un caractère pour 3 entrées, car .5est représenté par 0.5.
xnor
Ouais, c'est bon. Truc cool!
DJMcMayhem
6

Pour 3 entrées ou plus, c'est plus court:

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

Notez que sauf si la question spécifie le type d'entrée ou nécessite un programme complet, vous pouvez prendre l'entrée comme arguments de fonction , supprimant ainsi la nécessité de input() . Lorsque ce n'est pas une option, les éléments suivants peuvent aider dans certains cas.


Si vous voulez des caractères uniques dans les variables aet b, vous pouvez utiliser

a,b=input()

La saisie d'une chaîne de 2 caractères entraînera alors l'affectation du premier caractère au adeuxième caractère b. (Moins de 2 ou plus de 2 caractères dans la chaîne donneront une erreur.)

Si vous avez besoin de plus d'un caractère par variable, cette approche ne fonctionnera pas. Cela peut toujours être utilisé pour saisir 2 nombres à un chiffre sous forme de chaîne. Si des nombres au-delà de 9 sont requis, la gamme complète des caractères d'entrée potentiels pourrait être interprétée comme des nombres.

Notez que cela fonctionne également pour plus de 2 variables:

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

Cela fonctionne car en Python, une chaîne est une séquence de caractères et peut être utilisée partout où une séquence est attendue.

trichoplax
la source