43
_='_=%r;print _%%_';print _%_

这是最短的python quine,还是可以做得更好?这个似乎对The Quine Page上的所有条目都有改进。

我不计算琐碎的“空”程序,也不计算 Terry Reedy 的提交,因为双引号是 sus(如果允许的话,“hello world”是 quine 吗?还是“'”? )

4

11 回答 11

67

我将把它留在这里(另存为 exceptionQuine.py):

    File "exceptionQuine.py", line 1
        File "exceptionQuine.py", line 1
        ^
IndentationError: unexpected indent
于 2015-07-30T12:52:21.020 回答
22

从技术上讲,最短的 Python quine 是空文件。除了这个琐碎的案例:

由于 Python 的 print 会自动附加一个换行符,因此 quine 实际上是_='_=%r;print _%%_';print _%_\n(其中\n表示文件中的单个换行符)。

于 2011-07-12T02:52:16.193 回答
14

两个都

print open(__file__).read()

并且任何涉及导入的东西都不是有效的 quines,因为根据定义,quine 不能接受任何输入。读取外部文件被认为是接受输入,因此 quine 无法读取文件——包括它自己。

为了记录,从技术上讲,python 中最短的 quine 是一个空白文件,但这也有点作弊。

于 2013-10-30T04:52:26.137 回答
12

在一种稍微非字面意义上的方法中,就语句数量以及字符数而言,将“最短”表示为短,我这里有一个不包含任何分号的方法。

print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)

在我看来,这是有争议的,因为它都是一个功能,而其他功能则是多个。有人有这样短的吗?

编辑:用户flornquake进行了以下改进(用于repr()替换str()和刮掉 6 个字符的反引号):

print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
于 2014-09-12T12:04:37.233 回答
11

更短:

print(__file__[:-3])

并命名文件print(__file__[:-3]).pySource

编辑:实际上,

print(__file__)

命名print(__file__)作品也。

于 2013-08-29T21:14:40.897 回答
5

蟒蛇 3.8

exec(s:='print("exec(s:=%r)"%s)')
于 2020-03-29T21:57:32.270 回答
5

这是另一个类似于postylem的答案。

蟒蛇 3.6:

print((lambda s:s%s)('print((lambda s:s%%s)(%r))'))

蟒蛇 2.7:

print(lambda s:s%s)('print(lambda s:s%%s)(%r)')
于 2019-03-02T15:43:08.377 回答
2

我会说:

print open(__file__).read()

资源

于 2011-06-03T05:30:09.710 回答
1

从 Python 3.8 开始,我有了一个新的 quine!我为此感到非常自豪,因为直到现在我还没有创造出自己的作品。我从 中汲取灵感_='_=%r;print(_%%_)';print(_%_),但把它做成了一个函数(只有 2 个字符)。它使用新的海象运算符。

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

于 2020-09-29T19:31:44.330 回答
0

这个最不神秘,cor 是 a.format(a) a="a={1}{0}{1};print(a.format(a,chr(34)))";print(a.format (a,chr(34)))

于 2021-04-07T12:31:57.793 回答
-25

我严格反对你的解决方案。

格式化参数绝对%是一种过于高级的高级语言功能。如果允许这样的构造,我会说,那也import必须被允许。然后我可以通过引入一些其他高级语言构造来构造一个更短的 Quine(顺便说一句,它的功能远没有%函数强大,所以它不那么先进):

这是一个 Unix shell 脚本创建这样一个quine.py文件并检查它是否真的有效:

echo 'import x' > quine.py
echo "print 'import x'" > x.py
python quine.py | cmp - quine.py; echo $?

输出0

是的,那是作弊,就像使用%. 对不起。

于 2013-09-16T15:28:05.833 回答