使用python 2.7。
(在顶部进行编辑,以防您错过底部的某些内容:我一直在使用 exec() 执行代码,这使其成为源代码的一部分。有关我使用它的更多信息在这篇文章的底部)
最近,我对quines产生了兴趣。到目前为止,我最接近 quine 的尝试是:
_="print '_={0}'.format(_)"
不幸的是,这打印了这个
_=print '_={0}'.format(_)
而不是这个
_="print '_={0}'.format(_)"
这是一个主要问题,因为执行
_=print '_={0}'.format(_)
会报错,和原源代码不一样。
我一直在努力把那些引号放在那里。我尝试的一种方法是使用转义符来做到这一点:
_="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() 没有丑陋的循环,并在正确的位置获得引号。
所以现在,这让我再次重复自己:有没有人对我可以进行的修改有任何想法?