Python'da kullanıcı girişi almanın daha kısa bir yolu var mı?


17

Bu bir meydan okuma değil. Ben python (2 veya 3) 19 byte daha az ile iki ayrı değişkenlere kullanıcı girişi elde etmek mümkün olup olmadığını merak ediyorum. Bunlar en kısa ben alabilirim:

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

Bunu yapmanın daha kısa bir yolu var mı?


2
Eğer ikiden fazla girdi alıyorsanız, üçüncüsü muhtemelen en iyisi olacaktır.
SuperJedi224

1
Ben komut satırı argümanları diyecektim a,b=sys.argv[1:2]ya da her türlü ama o zaman bir ihtiyaç import sys(hakkı?)
Alex A.

Python3 a,b=input().split()olsa da bir gelişme değil, başka bir 19 bayt çözüm olacaktır. Bunun a ve b dizeleri olduğunu ve girişin boşlukla ayrılmış tek seferde girildiğini unutmayın.
Matty

Yardımcı olup olmadığından emin değilim, ancak bazı dillerde 2 değişken yerine iki sayı almak için bir vektör kullanabilirsiniz. İki keyfi değişken için daha karmaşık bir kap kullanılabilir.
Dennis Jaheruddin

a,b=input()in Py2
Oliver Ni

Yanıtlar:


11

Kullanıcıya sormak önemli değilse, bu eval3 veya daha fazlasından biraz daha kısadır :

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

Ayrıca istemde sorun olmasa bile daha kısadır:

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

Ne yazık ki, xnor'ın fikri, daha uzun olduğu için (19 bayt) 2 giriş için hiçbir şey kaydetmiyor. Bununla birlikte, uygun uzunlukta (çünkü sihir?) Zaten bazı dize (veya uygun yinelenebilir) varsa, daha kısa olabilir.

xnor, yalnızca Python 2'de 3 giriş için bir sihirli dize örneği buldu:

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

Bu aynı zamanda istemlerin önemli olmamasını da gerektirir.

Bu hile aslında 1eXgösterimi kullanarak çok sayıda giriş için bayt tasarrufuna yardımcı olur (x + 3 girişleri alır):

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

Açıklama:

Python mapişlevi, yinelenebilir her öğeye de iletilen işlevi gerçekleştirir ve bu çağrıların sonuçlarını içeren listeyi (veya harita nesnesini) döndürür. İlk örnek için harita şu şekilde ayrıştırılabilir:

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

2
Yapmak map(input,'xxx')3 vars için eşit uzunlukta, 2 için daha iyi ve 4+ için daha kötüdür.
xnor

3
Bir şans eseri, tam olarak 22 giriş almanız gerekiyorsa map(input,`id`), daha kısa :-). Benzer şekilde, map(input,`.1`)19 giriş için.
xnor

3
Aslında, a,b,c=map(input,`.5`)3 girdi için bir karakter kaydeder, çünkü .5olarak temsil edilir 0.5.
xnor

Evet bu iyi. Güzel numara!
DJMcMayhem


4

Soru giriş türünü belirtmedikçe veya tam bir program gerektirmedikçe, girdiyi işlev bağımsız değişkenleri olarak alabileceğinizi ve gereksinimi ortadan kaldırabileceğinizi unutmayın input() . Bunun bir seçenek olmadığı durumlarda, aşağıdakiler bazı durumlarda yardımcı olabilir.


Değişkenlerde tek karakterler istiyorsanız ave şunu bkullanabilirsiniz:

a,b=input()

2 karakter dizesi girildiğinde ilk karakter atanır ave ikinci karakter atanır b. (Dizede 2'den az veya 2'den fazla karakter hata verir.)

Değişken başına tek bir karakterden fazlasına ihtiyacınız varsa bu yaklaşım çalışmaz. Bu, dize olarak 2 tek haneli sayı girmek için hala kullanılabilir. 9'dan büyük sayılar gerekiyorsa, tüm potansiyel giriş karakterleri sayı olarak yorumlanabilir.

Bunun 2'den fazla değişken için de geçerli olduğunu unutmayın:

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

Bu çalışır çünkü Python'da bir dize bir karakter dizisidir ve bir dizinin beklendiği her yerde kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.