2024-05-13 22:26:00 发布
网友
_='_=%r;print (_%%_) ';print (_%_)
(编辑:我已经收到您的输入并修复了代码,谢谢您的更正。)
这是你能用Python编写的最短的quine(我听说)。一种返回自身的quine代码。在
有人能像我对Python一无所知一样向我解释这行代码吗?顺便说一下,我使用的是python3.x。在
我要找的是对发生的事情逐个解释。在
谢谢。在
正如评论中指出的,正确的quine是_='_=%r;print (_%%_) ';print (_%_),使用这个,让我们开始:
;对一行中的命令执行,因此如下所示:
;
相当于:
在第一行,_是一个有效的变量名,它被赋予字符串'_=%r;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()函数将对象转换为表示形式。在
%s
%r
repr()
现在假设您还想打印一个%;一个字符串,比如GNU is Not Unix %。如果你尝试以下方法
%
GNU is Not Unix %
>>> print('%s is Not Unix %'%name)
您将得到一个ValueError,因此您必须用另一个%来转义%:
ValueError
>>> print('%s is Not Unix %%'%name) GNU is Not Unix %
回到原始代码,当您使用_%_时,实际上是在用它本身替换_='_=%r;print (_%%_)中的%r,%%将产生一个{},因为第一个被视为转义符,最后打印整个结果,因此您将得到:
_%_
_='_=%r;print (_%%_)
%%
它是最初生产它的完全复制品,也就是奎因。在
正如评论中指出的,正确的quine是
_='_=%r;print (_%%_) ';print (_%_)
,使用这个,让我们开始:;
对一行中的命令执行,因此如下所示:相当于:
^{pr2}$在第一行,
_
是一个有效的变量名,它被赋予字符串'_=%r;print (_%%_) '
使用python的字符串格式,我们可以以printf的方式将变量注入到字符串中:
%s
使用字符串,%r
使用任何对象并通过repr()
函数将对象转换为表示形式。在现在假设您还想打印一个
%
;一个字符串,比如GNU is Not Unix %
。如果你尝试以下方法您将得到一个
ValueError
,因此您必须用另一个%
来转义%
:回到原始代码,当您使用},因为第一个被视为转义符,最后打印整个结果,因此您将得到:
_%_
时,实际上是在用它本身替换_='_=%r;print (_%%_)
中的%r,%%
将产生一个{它是最初生产它的完全复制品,也就是奎因。在
相关问题 更多 >
编程相关推荐