最短的python quine?

wim*_*wim 37 python quine

_='_=%r;print _%%_';print _%_
Run Code Online (Sandbox Code Playgroud)

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

我不算琐碎的'空'程序,而且我不算Terry Reedy的提交,因为双引号(如果允许的话,"hello world"是一个quine?还是"'"那个问题? )

Gra*_*raa 47

我只想在这里离开(另存为exceptionQuine.py):

    File "exceptionQuine.py", line 1
        File "exceptionQuine.py", line 1
        ^
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)

  • 非常聪明.但是我不确定stderr是否算作输出:-)另外,你对Quinn关于文件名的回复有点诙谐吗? (11认同)
  • 我不在乎别人说什么,这个答案是最好的。 (3认同)
  • 你为什么要保存为exceptionQuine.py?无论文件名如何,错误输出都是代码,不是吗? (2认同)
  • 不,假设我将文件保存为foo.py,输出将为:`File"foo.py",第1行文件"exceptionQuine.py",第1行^ (2认同)
  • 作弊:stderr (2认同)

Mec*_*ail 20

从技术上讲,最短的Python quine是空文件.除了这个微不足道的案例:

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

  • @wim:我的意思是文件中应该有一个实际的换行符,但stackoverflow不会让它易于编写. (3认同)
  • 这很奇怪.在源代码级别,我仍然会将这个`\n`称为两个字符,`\n`与源代码中的实际换行符完全不同 (2认同)
  • 我不认为“从技术上讲,最短的 Python quine 是***空文件***。”。因为:“[Aquine 是**一个非空的计算机程序**,它不接受任何输入,并生成一份自己的源代码副本作为唯一的输出。](https://en.wikipedia.org/wiki/Quine_ (计算))”。 (2认同)

小智 14

print open(__file__).read()
Run Code Online (Sandbox Code Playgroud)

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

从记录上来说,从技术上讲,python中最短的quine是一个空白文件,但这也是一种欺骗行为.

  • "从记录来看,从技术上讲,python中最短的quine是一个空白文件,但这也是一种欺骗行为." 更正:它**是**作弊. (2认同)

pos*_*lem 10

在一个略微非字面的方法中,将"最短"表示为语句数量以及字符数的短,我在这里有一个不包括任何分号.

print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)
Run Code Online (Sandbox Code Playgroud)

在我看来,这是争辩,因为它是一个功能,而其他功能则是多功能的.有没有人这么短?

编辑:用户flornquake做了以下改进(用于repr()替换str()削减 6个字符的反引号):

print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
Run Code Online (Sandbox Code Playgroud)

  • 好的!这是带有 f 字符串的 Python 3.6:`print((lambda x:f"{x}{x,})")('print((lambda x:f"{x}{x,})")',) )` (2认同)

Ram*_*che 8

Python 3.8

exec(s:='print("exec(s:=%r)"%s)')
Run Code Online (Sandbox Code Playgroud)

  • 它是无效的:[*Quines,根据定义,无法接收任何形式的输入,包括读取文件,这意味着如果 quines 查看自己的源代码,则被认为是“作弊”。*](https://en .wikipedia.org/wiki/Quine_(计算)) (2认同)
  • `print((_:='print((_:=%r)%%_)')%_)` (2认同)

Oli*_*ain 7

甚至更短:

print(__file__[:-3])
Run Code Online (Sandbox Code Playgroud)

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

编辑:实际上,

print(__file__)
Run Code Online (Sandbox Code Playgroud)

命名print(__file__)作品也是如此。

  • 很好地滥用规则;) (2认同)

小智 6

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

Python 3.6:

print((lambda s:s%s)('print((lambda s:s%%s)(%r))'))
Run Code Online (Sandbox Code Playgroud)

Python 2.7:

print(lambda s:s%s)('print(lambda s:s%%s)(%r)')
Run Code Online (Sandbox Code Playgroud)


man*_*lds 2

我会说:

print open(__file__).read()
Run Code Online (Sandbox Code Playgroud)

来源

  • 这并不符合问题的实质。 (9认同)
  • 这违反了奎因的规则。quine 是一个将自己的源代码写入作为输出的程序*而不读取原始源文件*。 (9认同)