Pythonでユーザー入力を取得するための短い方法はありますか?


17

これは挑戦ではありません。19バイト未満のpython(2または3)の2つの別個の変数にユーザー入力を取得することが可能なのかどうか疑問に思っています。これらはすべて私が得ることができる最短です:

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

これを行う短い方法はありますか?


2
3つ目は、3つ以上の入力を取り込む場合におそらく最適です。
-SuperJedi224

1
私はコマンドライン引数をa,b=sys.argv[1:2]何とでも言うつもりでしたが、それからimport sys(正しい?)が必要です
アレックスA.

python3ではa,b=input().split()別の19バイトのソリューションになりますが、改善にはなりません。これは、aとbが文字列であり、入力がスペースで区切られて一度に入力されることに注意してください。
マティ

役立つかどうかはわかりませんが、一部の言語では、ベクトルを使用して2つの変数ではなく2つの数値を取得できます。2つの任意の変数には、より複雑なコンテナを使用できます。
デニスジャエルディン

a,b=input()in Py2
オリバーNi

回答:


11

ユーザーへのプロンプトが重要でない場合、これはeval3つ以上の場合よりもわずかに短くなります。

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

また、プロンプトが正しくない場合でも短くなります。

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

悲しいことに、xnorのアイデアはまだ長い(19バイト)ため、2つの入力に対して何も保存しません。ただし、すでに適切な長さの文字列(または適切な反復可能)が既にある場合(マジックのため?)、それは短くなる可能性があります。

xnorは、Python 2のみで3つの入力に対するマジックストリングの例を見つけました。

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

ただし、これにはプロンプトが重要でないことも必要です。

このトリックは、実際に使用して、多数の入力のバイトを節約するのに役立ちます 1eX表記法(x + 3入力を取得)。

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

説明:

Pythonのmap関数は、渡されるiterableの各要素に渡される関数を実行し、これらの呼び出しの結果を含むリスト(またはマップオブジェクト)を返します。最初の例では、マップを次のように分解できます。

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

2
行うことmap(input,'xxx')は、3つの変数では長さが等しく、2ではより良く、4 +ではより悪くなります。
xnor

3
偶然、正確に22の入力を取得する必要がある場合は、map(input,`id`)短くなります:-)。同様にmap(input,`.1`)、19入力の場合。
xnor

3
実際にa,b,c=map(input,`.5`)は、.5はとして表されるため、3つの入力に対してcharを保存し0.5ます。
xnor

ええ、それは良いことです。クールなトリック!
DJMcMayhem


4

質問が入力タイプを指定するか、完全なプログラムを必要としない限り、入力を関数の引数として取り、の必要性を排除できることに注意してください input()これがオプションではない場合、特定の場合に以下が役立つことがあります。


変数aとに単一の文字がb必要な場合は、使用できます

a,b=input()

2文字の文字列を入力すると、最初の文字が割り当てられa、2番目の文字が割り当てられます。bます。(文字列内の2文字未満または2文字を超えるとエラーになります。)

変数ごとに複数の文字が必要な場合、このアプローチは機能しません。これを使用して、2つの1桁の数字を文字列として入力できます。9を超える数字が必要な場合、潜在的な入力文字の全範囲が数字として解釈される可能性があります。

これは3つ以上の変数でも機能することに注意してください。

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

これが機能するのは、Pythonでは文字列が文字のシーケンスであり、シーケンスが予想される任意の場所で使用できるためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.