求适合初学者的易懂Python Quine:禁用%s、%r,仅用基础语法
适合初学者的易懂Python Quine实现
Quine是指运行后能输出自身源代码的程序,完全可以用Python基础语法实现,不需要晦涩的黑科技。下面给出一个用变量、字符串替换实现的版本,逻辑清晰,容易推导:
s = 's = \'QUINE_MARKER\'\nprint(s.replace(\'QUINE_MARKER\', s))' print(s.replace('QUINE_MARKER', s))
代码逻辑推导
定义模板字符串:
我们先把程序的“骨架”存在变量s里,骨架包含两行代码的结构:- 第一行是变量赋值语句,用
QUINE_MARKER作为占位符,预留出填充s自身内容的位置 - 第二行是输出语句,调用
replace方法替换占位符,再打印结果 - 字符串里的
\'是转义单引号(因为我们用单引号包裹整个字符串,内部的单引号需要转义避免语法错误),\n是换行符用来分隔两行代码
- 第一行是变量赋值语句,用
替换占位符并输出:
执行print(s.replace('QUINE_MARKER', s))时,会把s里的QUINE_MARKER替换成s本身的内容,替换后的字符串就是完整的程序源代码,打印后就实现了“输出自身”的效果。
进阶:用循环实现(可选)
如果想加入循环语法,可以改成以下版本,逻辑和上面一致,只是用循环逐行输出:
s = 's = \'QUINE_MARKER\'\nfor line in s.split(\\n):\n print(line.replace(\'QUINE_MARKER\', s))' for line in s.split('\n'): print(line.replace('QUINE_MARKER', s))
这两个版本都只用到了Python基础语法:变量赋值、字符串操作、print函数(第二个版本加了for循环),没有依赖任何特殊特性,完全可以一步步推导出来,不需要死记硬背。
内容的提问来源于stack exchange,提问作者Stepan
相关产品推荐
相关产品推荐

