3

Python 2.7 を使用しています。

(下部の何かを見落とした場合に備えて、上部を編集してください: exec() を使用してコードを実行しているため、ソースの一部になります。これの使用方法に関する詳細は、この投稿の下部にあります)

最近、クインに興味を持っています。これまでのところ、クワインに最も近い私の試みは次のとおりです。

_="print '_={0}'.format(_)"

残念ながら、それはこれを印刷します

_=print '_={0}'.format(_)

これの代わりに

_="print '_={0}'.format(_)"

これは大きな問題です

_=print '_={0}'.format(_)

エラーが発生し、元のソース コードと同じではありません。

私はそれらの引用符をそこに入れるのに苦労しています。私が試した1つの方法は、これを行うためにエスケープを使用することです:

_="print '_=\"{0}\"'.format(_)"

そしてそれはこれを印刷します:

_="print '_="{0}"'.format(_)"

そのコードはもう一度印刷されます

_=print '_={0}'.format(_)

それは同じではなく、エラーです。私が行うことができる変更について誰か考えがありますか?

そして、これを書いていて、もう一つ気づいたことがあります。私はずっと exec() を使ってコードを実行してきましたが、この quine は exec() でしか実行できないため、exec() がコードの一部になるため、これも追加する必要があります。したがって、exec() を追加した別の試みが追加されました。

_=print '_={0}'.format(_); exec(_)

しかし、それは恐ろしいループを作成し、まだ引用符がありません

>>>> _="print '_={0}'.format(_); exec(_)"; exec(_)
_=print '_={0}'.format(_); exec(_)
_=print '_={0}'.format(_); exec(_)
_=print '_={0}'.format(_); exec(_)
_=print '_={0}'.format(_); exec(_)
_=print '_={0}'.format(_); exec(_)
_=print '_={0}'.format(_); exec(_)
[etc]

だから今、私は醜いループなしでそこに exec() を取得し、適切な場所で引用符を取得する必要があります.

だから今、これは私自身をもう一度繰り返すことにつながります.誰か私が行うことができる変更について何かアイデアを持っていますか?

4

1 に答える 1

3

クワインは、入力を受け取らずに独自のソース コードを出力するだけで済みます。それ自体を実行するために必要なコードも含める必要があるという要件ではありません。

Python では、クワインをインタラクティブ セッションに入力し、出力行が入力行と正確に一致することを確認するだけでクワインをテストできます。

>>> _ = '_ = {!r}; print(_.format(_))'; print(_.format(_))
_ = '_ = {!r}; print(_.format(_))'; print(_.format(_))

この例では、 への引数の repr を使用して、引用の問題を解決しますformat

于 2014-03-24T04:39:57.210 に答える