Esiste un modo più breve per ottenere l'input dell'utente in Python?


17

Questa non è una sfida. Mi chiedo se sia possibile ottenere l'input dell'utente in due variabili separate in Python (2 o 3) con meno di 19 byte. Questi sono tutti i più brevi che posso ottenere:

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

C'è un modo più breve per farlo?


2
Il terzo sarebbe probabilmente il migliore se stai ricevendo più di due input.
SuperJedi224,

1
Stavo per dire argomenti della riga di comando con a,b=sys.argv[1:2]o altro, ma poi hai bisogno di un import sys(giusto?)
Alex A.

In python3 ci a,b=input().split()sarebbe un'altra soluzione di 19 byte, ma non un miglioramento. Si noti che ciò significa che aeb sono stringhe e l'ingresso viene immesso in una volta separato da uno spazio.
Matty,

Non sono sicuro che possa essere d'aiuto, ma in alcune lingue potresti usare un vettore per ottenere due numeri, anziché 2 variabili. Per due variabili arbitrarie può essere utilizzato un contenitore più complicato.
Dennis Jaheruddin,

a,b=input()in Py2
Oliver Ni,

Risposte:


11

Se la richiesta all'utente non ha importanza, è leggermente più breve rispetto evala 3 o più:

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

È anche più breve anche se il prompt non è corretto:

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

Purtroppo, l'idea di xnor non salva nulla per 2 ingressi in quanto è ancora più lunga (19 byte). Tuttavia, se hai già una stringa (o appropriato iterabile) con la lunghezza appropriata (perché magica?), Potrebbe essere più breve.

xnor ha trovato un esempio di stringa magica per 3 input solo in Python 2:

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

Ciò richiede anche che le istruzioni non siano importanti, comunque.

Questo trucco in realtà aiuta a salvare byte per un gran numero di input usando la 1eXnotazione (ottenere x + 3 input):

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

Spiegazione:

La mapfunzione di Python esegue la funzione che viene passata su ogni elemento dell'iterabile che gli viene anche passato e restituisce l'elenco (o oggetto mappa) contenente i risultati di queste chiamate. Per il primo esempio, la mappa potrebbe essere scomposta in:

[input(1), input(1), input(1)]

2
Fare map(input,'xxx')è uguale per 3 var, meglio per 2 e peggio per 4+.
xnor

3
Se, per caso, devi prendere esattamente 22 input, map(input,`id`)è più breve :-). Allo stesso modo, map(input,`.1`)per 19 ingressi.
xnor

3
In realtà, a,b,c=map(input,`.5`)salva un carattere per 3 input, poiché .5è rappresentato come 0.5.
xnor

Si Questo è buono. Bel trucco!
DJMcMayhem


4

Si noti che, a meno che la domanda non specifichi il tipo di input o richieda un programma completo, è possibile accettare input come argomenti di funzione , eliminando la necessità di input() . Laddove questa non sia un'opzione, in alcuni casi può essere utile quanto segue.


Se si desidera singoli caratteri nelle variabili ae b, è possibile utilizzare

a,b=input()

L'immissione di una stringa di 2 caratteri comporterà quindi l'assegnazione del primo carattere ae il secondo carattere assegnato b. (Meno di 2 o più di 2 caratteri nella stringa genereranno un errore.)

Se hai bisogno di più di un singolo carattere per variabile, questo approccio non funzionerà. Questo può ancora essere usato per inserire 2 numeri a una cifra come stringa. Se sono richiesti numeri oltre 9, l'intera gamma di potenziali caratteri di input potrebbe essere interpretata come numeri.

Nota che questo funziona anche con più di 2 variabili:

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

Ciò funziona perché in Python una stringa è una sequenza di caratteri e può essere utilizzata ovunque sia prevista una sequenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.