Czy istnieje krótszy sposób na uzyskanie danych wejściowych od użytkownika w pythonie?


17

To nie jest wyzwanie. Zastanawiam się, czy w ogóle możliwe jest wprowadzenie danych użytkownika do dwóch oddzielnych zmiennych w pythonie (2 lub 3) zawierających mniej niż 19 bajtów. To są najkrótsze, jakie mogę uzyskać:

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

Czy jest na to krótszy sposób?


2
Trzeci byłby prawdopodobnie najlepszy, jeśli pobierasz więcej niż dwa wejścia.
SuperJedi224

1
Chciałem powiedzieć argumenty wiersza poleceń z, a,b=sys.argv[1:2]czy cokolwiek, ale wtedy potrzebujesz import sys(prawda?)
Alex A.

W python3 a,b=input().split()byłoby to kolejne 19 bajtów rozwiązanie, ale nie poprawa. Zauważ, że oznacza to, że aib są ciągami, a dane wejściowe są wprowadzane za jednym razem oddzielone spacją.
Matty

Nie jestem pewien, czy to pomaga, ale w niektórych językach można użyć wektora, aby uzyskać dwie liczby zamiast 2 zmiennych. W przypadku dwóch dowolnych zmiennych można zastosować bardziej skomplikowany kontener.
Dennis Jaheruddin

a,b=input()w Py2
Oliver Ni

Odpowiedzi:


11

Jeśli monitowanie użytkownika nie ma znaczenia, jest to nieco krótsze niż evaldla 3 lub więcej:

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

Jest także krótszy, nawet jeśli monit nie jest w porządku:

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

Niestety pomysł xnora niczego nie oszczędza na 2 wejścia, ponieważ jest jeszcze dłuższy (19 bajtów). Jednak jeśli masz już jakiś ciąg (lub odpowiednią iterowalną) o odpowiedniej długości (bo magia?), Może być krótszy.

xnor znalazł przykład magicznego ciągu znaków dla 3 danych wejściowych tylko w Pythonie 2:

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

Wymaga to jednak również, aby podpowiedzi nie były ważne.

Ta sztuczka pomaga zaoszczędzić bajty dla dużej liczby danych wejściowych za pomocą 1eXnotacji (uzyskanie x + 3 danych wejściowych):

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

Wyjaśnienie:

mapFunkcja Pythona wykonuje funkcję, która jest przekazywana na każdym elemencie iteracji, który jest do niej przekazywany, i zwraca listę (lub obiekt mapy) zawierającą wyniki tych wywołań. W pierwszym przykładzie mapę można rozłożyć na:

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

2
Robienie map(input,'xxx')jest równej długości dla 3 zmienników, lepszej dla 2 i gorszej dla 4+.
xnor

3
Jeśli przypadkiem musisz wziąć dokładnie 22 dane wejściowe, map(input,`id`)jest on krótszy :-). Podobnie map(input,`.1`)dla 19 wejść.
xnor

3
W rzeczywistości a,b,c=map(input,`.5`)zapisuje znak dla 3 danych wejściowych, ponieważ .5jest reprezentowany jako 0.5.
xnor

Tak to jest dobre. Fajna sztuczka!
DJMcMayhem

6

W przypadku 3 lub więcej danych wejściowych jest to krótsze:

a,b,c=eval("input(),"*3)

4

Zauważ, że o ile pytanie nie określa typu danych wejściowych lub wymaga pełnego programu, możesz wziąć dane wejściowe jako argumenty funkcji , eliminując potrzebę input() . Jeśli nie jest to możliwe, w niektórych przypadkach pomocne mogą być następujące elementy.


Jeśli chcesz pojedynczych znaków w zmiennych ai bmożesz użyć

a,b=input()

Wprowadzenie 2-znakowego ciągu spowoduje następnie przypisanie pierwszego znaku i przypisanie adrugiego znaku b. (Mniej niż 2 lub więcej niż 2 znaki w ciągu spowoduje błąd.)

Jeśli potrzebujesz więcej niż jednego znaku na zmienną, to podejście nie zadziała. Nadal można tego użyć do wprowadzenia 2 liczb jednocyfrowych jako łańcucha. Jeśli liczby powyżej 9 są wymagane, pełny zakres potencjalnych znaków wejściowych można interpretować jako liczby.

Pamiętaj, że działa to również w przypadku więcej niż 2 zmiennych:

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

Działa to, ponieważ w Pythonie ciąg znaków jest ciągiem znaków i może być używany wszędzie tam, gdzie oczekiwana jest sekwencja.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.