Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Quine ใน Python (โปรแกรมที่พิมพ์ซอร์สโค้ดตัวเอง)

Quine คือโปรแกรมที่ไม่รับ input แต่ออกมาเป็นซอร์สโค้ดของตัวมันเอง มีเงื่อนไขว่า ห้ามเปิดอ่านไฟล์ซอร์สโค้ดเอง ภายในโปรแกรม

ตัวอย่าง Quine สั้นที่สุดใน Python


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

ผลลัพธ์


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

ทำไมมันทำงานได้?

ใช้ string formatting แบบง่าย:

  1. กำหนดตัวแปร a เก็บสตริง 'a=%r;print (a%%a)'
  2. %r คือ repr formatting จะใส่ค่า a พร้อม quotes และ escape characters
  3. %% จะกลายเป็น % ตัวเดียวใน output
  4. เมื่อ print(a % a) รัน จะแทนค่า a ลงใน %r ได้ซอร์สโค้ดเดิมทุกตัว

วิธีที่ "โกง" (ไม่ใช่ Quine จริง)


print(open(__file__).read())

แต่วิธีนี้ ละเมิดกฎของ Quine เพราะเปิดอ่านไฟล์ตัวเอง

Quine อื่นๆ ที่น่าสนใจ

Multi-line Quine


s = 's = %r\nprint(s %% s)'
print(s % s)

Quine ใช้ format()


s = 's = {!r}\nprint(s.format(s))'
print(s.format(s))

Quine ใช้ f-string (Python 3.6+)


s = 's = {0!r}\nprint(s.format(s))'
print(s.format(s))

ความสนุก: Quine เป็นหัวข้อใน Computer Science ที่เกี่ยวกับ self-replication และ fixed-point theorem มีความเกี่ยวข้องกับทฤษฎีคำนวณ (computability theory)