Gibt es eine kürzere Möglichkeit, Benutzereingaben in Python abzurufen?

17

Dies ist keine Herausforderung. Ich frage mich, ob es überhaupt möglich ist, Benutzereingaben in zwei separaten Variablen in Python (2 oder 3) mit weniger als 19 Bytes zu erhalten. Dies sind alles die kürzesten, die ich bekommen kann:

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

Gibt es dafür einen kürzeren Weg?

DJMcMayhem
quelle
2
Die dritte Option ist wahrscheinlich die beste, wenn Sie mehr als zwei Eingaben vornehmen.
SuperJedi224
1
Ich wollte Befehlszeilenargumente mit a,b=sys.argv[1:2]oder was auch immer sagen, aber dann brauchst du ein import sys(richtig?)
Alex A.
In Python3 a,b=input().split()wäre eine weitere 19-Byte-Lösung keine Verbesserung. Beachten Sie, dass dies bedeutet, dass a und b Zeichenfolgen sind und die Eingabe in einem Durchgang durch ein Leerzeichen getrennt erfolgt.
Matty
Ich bin mir nicht sicher, ob es hilft, aber in einigen Sprachen könnten Sie einen Vektor verwenden, um zwei Zahlen anstatt zwei Variablen zu erhalten. Für zwei beliebige Variablen kann ein komplizierterer Container verwendet werden.
Dennis Jaheruddin
a,b=input()in Py2
Oliver Ni

Antworten:

11

Wenn die Aufforderung des Benutzers keine Rolle spielt, ist dies etwas kürzer als evalbei 3 oder mehr:

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

Es ist auch kürzer, auch wenn die Eingabeaufforderung nicht in Ordnung ist:

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

Leider speichert die Idee von xnor nichts für 2 Eingaben, da sie immer noch länger ist (19 Bytes). Wenn Sie jedoch bereits eine Zeichenfolge (oder eine entsprechende iterable) mit der entsprechenden Länge haben (weil Magic?), Könnte sie kürzer sein.

xnor hat nur in Python 2 ein Beispiel für eine magische Zeichenfolge für 3 Eingaben gefunden:

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

Dies setzt jedoch auch voraus, dass die Eingabeaufforderungen nicht wichtig sind.

Dieser Trick hilft tatsächlich, Bytes für eine große Anzahl von Eingaben unter Verwendung der 1eXNotation zu speichern (Abrufen von x + 3 Eingaben):

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

Erläuterung:

Die mapFunktion von Python führt die Funktion aus, die an jedes Element der Iterable übergeben wird, das auch an sie übergeben wird, und gibt die Liste (oder das Map-Objekt) zurück, die die Ergebnisse dieser Aufrufe enthält. Für das erste Beispiel könnte die Karte zerlegt werden in:

[input(1), input(1), input(1)]
FryAmTheEggman
quelle
2
Tun map(input,'xxx')ist für 3 Vars gleich lang, besser für 2 und schlechter für 4+.
27.
3
Wenn Sie zufällig genau 22 Eingaben machen müssen, map(input,`id`)ist das kürzer :-). Ebenso map(input,`.1`)für 19 Eingänge.
Xnor
3
Eigentlich a,b,c=map(input,`.5`)spart ein Zeichen für 3 Eingänge, da .5als dargestellt 0.5.
Xnor
Ja das ist gut. Cooler Trick!
DJMcMayhem
6

Bei 3 oder mehr Eingaben ist dies kürzer:

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

Beachten Sie, dass es sei denn , die Frage nach der Art Eingabe gibt oder erfordert ein komplettes Programm, Sie Eingabe als Funktionsargumente übernehmen können , für die Notwendigkeit , Ausschneiden input() .Wenn dies keine Option ist, kann in bestimmten Fällen Folgendes hilfreich sein.


Wenn Sie einzelne Zeichen in den Variablen aund möchten b, können Sie verwenden

a,b=input()

Die Eingabe einer 2-stelligen Zeichenfolge führt dann dazu, dass das erste Zeichen zugewiesen wird a und das zweite Zeichen zugewiesen b. (Weniger als 2 oder mehr als 2 Zeichen in der Zeichenfolge führen zu einem Fehler.)

Wenn Sie mehr als ein Zeichen pro Variable benötigen, funktioniert dieser Ansatz nicht. Dies kann weiterhin verwendet werden, um 2 einstellige Zahlen als Zeichenfolge einzugeben. Wenn Zahlen über 9 erforderlich sind, kann der gesamte Bereich der möglichen Eingabezeichen als Zahlen interpretiert werden.

Beachten Sie, dass dies auch für mehr als 2 Variablen funktioniert:

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

Dies funktioniert, weil in Python eine Zeichenfolge eine Folge von Zeichen ist und überall dort verwendet werden kann, wo eine Folge erwartet wird.

Trichoplax
quelle