Python 3最短的奎因。我不明白我

2024-05-13 22:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这是你能用Python编写的最短的quine(我听说)。一种返回自身的quine代码。在

有人能像我对Python一无所知一样向我解释这行代码吗?顺便说一下,我使用的是python3.x。在

我要找的是对发生的事情逐个解释。在

谢谢。在


Tags: 代码编辑事情python3quineprint
1条回答
网友
1楼 · 发布于 2024-05-13 22:26:00

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

;对一行中的命令执行,因此如下所示:

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

相当于:

^{pr2}$

在第一行,_是一个有效的变量名,它被赋予字符串'_=%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 (_%_)

它是最初生产它的完全复制品,也就是奎因。在

相关问题 更多 >