43
_='_=%r;print _%%_';print _%_

これは可能な限り最短のPythonクワインですか、それとももっとうまくできますか?これは、 TheQuinePageのすべてのエントリで改善されているようです。

私は些細な「空の」プログラムを数えていませんし、二重引用符のためにsusであるTerry Reedyの提出も数えていません(それが許可されている場合、「helloworld」はクワインですか?それとも「'」ですか? )。

4

11 に答える 11

22

技術的には、最短の Python quine は空のファイルです。この些細なケースとは別に:

Python の print は自動的に改行を追加するため、クインは実際には_='_=%r;print _%%_';print _%_\n(\nファイル内の単一の改行文字を表します)。

于 2011-07-12T02:52:16.193 に答える
14

両方

print open(__file__).read()

また、インポートを伴うものはすべて有効なクインではありません。定義上、クインは入力を受け取ることができないためです。外部ファイルの読み取りは入力を受け取ると見なされるため、Quine はファイル (それ自体を含む) を読み取ることができません。

記録として、技術的に言えば、Python で可能な最短のクインは空のファイルですが、それも一種の不正行為です。

于 2013-10-30T04:52:26.137 に答える
12

少し非リテラルなアプローチで、「最短」をステートメントの数と文字数の点で短いことを意味すると、ここにセミコロンを含まないものがあります。

print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)

私の考えでは、これはすべて1つの機能であり、他の機能は複数であるため、主張して​​います。こんな短いの持ってる人いますか?

編集:ユーザーflornquakeが次の改善を行いました( 6文字repr()を置き換えstr()て削るためのバックティック):

print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
于 2014-09-12T12:04:37.233 に答える
11

さらに短い:

print(__file__[:-3])

ファイルに名前を付けますprint(__file__[:-3]).py( Source )

編集:実際には、

print(__file__)

名作print(__file__)も。

于 2013-08-29T21:14:40.897 に答える
2

私はこう言います:

print open(__file__).read()

ソース

于 2011-06-03T05:30:09.710 に答える
1

Python 3.8 の時点で、新しいクワインができました! 今まで自分で作成したことがなかったので、とても誇りに思っています。からインスピレーションを得まし_='_=%r;print(_%%_)';print(_%_)たが、単一の関数にしました (あと 2 文字のみ)。新しいwarusオペレーターを使用します。

print((_:='print((_:=%r)%%_)')%_)

于 2020-09-29T19:31:44.330 に答える
-25

私はあなたの解決策に固く反対します。

フォーマット パラメーター%は、高度な高水準言語関数であることは間違いありません。そのような構造が許されるなら、それも許されなければならないと私は言いたいimport%次に、他の高水準言語構造を導入することで、より短い Quine を構築できます (ところで、関数よりもはるかに強力ではないため、高度ではありません)。

quine.pyこのようなファイルを作成し、実際に動作することを確認する Unix シェル スクリプトを次に示します。

echo 'import x' > quine.py
echo "print 'import x'" > x.py
python quine.py | cmp - quine.py; echo $?

出力0

はい、それはごまかし%です。ごめん。

于 2013-09-16T15:28:05.833 に答える