Python 3中最短的quine。我不明白

问题描述 投票:-2回答:1
_='_=%r;print (_%%_) ';print (_%_)

(编辑:我已收到您的输入并修复了代码,感谢您的更正。)

这是你可以用Python编写的最短的quine(我被告知)。一个quine是返回自己的代码。

有人可以向我解释这行代码,好像我对Python一无所知吗?我顺便使用Python 3.x.

我正在寻找的是逐字逐句解释正在发生的事情。

谢谢。

python explain quine
1个回答
4
投票

正如评论中指出的那样,正确的quine是_='_=%r;print (_%%_) ';print (_%_),使用它,让我们开始:

;执行命令行,所以如下:

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

相当于:

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

在第一行中,_是一个有效的变量名,它被赋予字符串'_=%r;print (_%%_) '

使用python的字符串格式,我们可以以printf方式将变量注入字符串:

>>> name = 'GNU'
>>> print('%s is Not Unix'%name)

GNU is Not Unix

>>> print('%r is Not Unix'%name)

'GNU' is Not Unix

%s使用一个字符串,%r使用任何对象并通过repr()函数将对象转换为表示。

现在想象你想打印一个%;像GNU is Not Unix %这样的字符串。如果你尝试以下,

>>> print('%s is Not Unix %'%name)

你最终会得到一个ValueError,所以你必须用另一个%逃离%

>>> print('%s is Not Unix %%'%name)

GNU is Not Unix %

回到原始代码,当你使用_%_时,你实际上用_='_=%r;print (_%%_)代替%r,而%%将导致%,因为第一个被视为转义字符,最后你打印整个结果,所以你会最终得到:

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

这是它首先产生它的确切复制品,即quine。

© www.soinside.com 2019 - 2024. All rights reserved.