Apakah ada cara yang lebih pendek untuk mendapatkan input pengguna dalam python?

17

Ini bukan tantangan. Saya bertanya-tanya apakah mungkin untuk mendapatkan input pengguna ke dua variabel terpisah dalam python (2 atau 3) dengan kurang dari 19 byte. Ini semua yang terpendek yang bisa saya dapatkan:

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

Apakah ada cara yang lebih pendek untuk melakukan ini?

DJMcMayhem
sumber
2
Yang ketiga mungkin akan menjadi yang terbaik jika Anda menerima lebih dari dua input.
SuperJedi224
1
Saya akan mengatakan argumen baris perintah dengan a,b=sys.argv[1:2]atau apa pun tetapi kemudian Anda memerlukan import sys(kan?)
Alex A.
Dalam python3 a,b=input().split()akan menjadi solusi 19 byte, bukan perbaikan. Perhatikan bahwa itu berarti a dan b adalah string dan input dimasukkan dalam sekali jalan yang dipisahkan oleh spasi.
Matty
Tidak yakin apakah itu membantu, tetapi dalam beberapa bahasa Anda bisa menggunakan vektor untuk mendapatkan dua angka, bukan 2 variabel. Untuk dua variabel arbitrer, wadah yang lebih rumit dapat digunakan.
Dennis Jaheruddin
a,b=input()dalam Py2
Oliver Ni

Jawaban:

11

Jika meminta pengguna tidak masalah, ini sedikit lebih pendek daripada eval3 atau lebih:

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

Ini juga lebih pendek bahkan jika meminta tidak ok:

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

Sayangnya, ide xnor tidak menyimpan apa pun untuk 2 input karena masih lebih lama (19 byte). Namun jika Anda memiliki beberapa string (atau sesuai iterable) dengan panjang yang sesuai sudah (karena sihir?) Maka itu bisa lebih pendek.

xnor menemukan contoh string ajaib untuk 3 input hanya di Python 2:

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

Ini juga mensyaratkan bahwa prompt tidak penting.

Trik ini sebenarnya membantu menghemat byte untuk sejumlah besar input dengan menggunakan 1eXnotasi (mendapatkan input x + 3):

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

Penjelasan:

mapFungsi Python melakukan fungsi yang diteruskan pada setiap elemen iterable yang juga diteruskan ke sana, dan mengembalikan daftar (atau objek peta) yang berisi hasil dari panggilan ini. Sebagai contoh pertama, peta dapat diuraikan menjadi:

[input(1), input(1), input(1)]
FryAmTheEggman
sumber
2
Melakukan map(input,'xxx')sama panjang untuk 3 vars, lebih baik untuk 2, dan lebih buruk untuk 4+.
xnor
3
Jika, secara kebetulan, Anda perlu mengambil tepat 22 input, map(input,`id`)lebih pendek :-). Begitu pula map(input,`.1`)untuk 19 input.
xnor
3
Sebenarnya, a,b,c=map(input,`.5`)apakah menyimpan char untuk 3 input, karena .5direpresentasikan sebagai 0.5.
xnor
Ya itu bagus. Trik keren!
DJMcMayhem
6

Untuk 3 atau lebih input, ini lebih pendek:

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

Perhatikan bahwa kecuali jika pertanyaan menentukan jenis input atau memerlukan program lengkap, Anda dapat mengambil input sebagai argumen fungsi , memotong kebutuhan input() . Jika ini bukan opsi, yang berikut ini dapat membantu dalam kasus tertentu.


Jika Anda ingin satu karakter dalam variabel adan b, Anda dapat menggunakan

a,b=input()

Memasukkan string 2 karakter akan menghasilkan karakter pertama yang ditugaskan adan karakter kedua yang ditugaskan b. (Kurang dari 2 atau lebih dari 2 karakter dalam string akan memberikan kesalahan.)

Jika Anda memerlukan lebih dari satu karakter per variabel maka pendekatan ini tidak akan berfungsi. Ini masih bisa digunakan untuk memasukkan 2 angka tunggal sebagai string. Jika angka di atas 9 diperlukan maka seluruh karakter input potensial dapat diartikan sebagai angka.

Perhatikan bahwa ini juga berfungsi untuk lebih dari 2 variabel:

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

Ini berfungsi karena dalam Python string adalah urutan karakter, dan dapat digunakan di mana saja urutan diharapkan.

trichoplax
sumber