Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 구현하는 콰인(Quine): 자기 자신의 소스 코드를 출력하는 프로그램

콰인(Quine)은 입력 없이 실행되지만, 자기 자신의 소스 코드를 그대로 출력하는 프로그램을 의미합니다. 이 이름은 철학자 윌러드 밴 오먼 퀸(Willard Van Orman Quine)에서 유래했습니다.

다만 콰인에는 반드시 지켜야 할 조건이 있습니다. 프로그램 내부에서 소스 코드 파일을 직접 열어서 읽는 방식은 허용되지 않습니다. 오직 문자열 포매팅 등 순수한 논리만으로 자기 자신을 재현해야 합니다.

예제 코드

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

실행 결과

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

이 콰인은 어떻게 동작할까?

핵심 원리는 간단한 문자열 포매팅(string formatting)입니다. 먼저 변수 a를 선언하고, 그 안에 'a=%r;print (a%%a)'라는 문자열을 저장합니다. 이후 print(a % a)를 호출하면 문자열 안의 %r이 변수 a의 값으로 치환됩니다.

여기서 %r은 파이썬의 repr() 형식으로 값을 대입하기 때문에, 문자열이 따옴표를 포함한 소스 코드 형태 그대로 출력됩니다. 결과적으로 프로그램이 실행되면서 자기 자신과 완전히 동일한 코드를 화면에 보여주게 되는 것입니다.

파일을 직접 여는 방식은 왜 안 될까?

사실 아래와 같이 한 줄만으로도 같은 결과를 얻을 수 있습니다.

print(open(__file__).read())

이 코드는 현재 실행 중인 파일(__file__)을 열어 내용을 그대로 출력합니다. 겉보기에는 콰인처럼 동작하지만, 소스 코드 파일을 외부에서 직접 읽어오기 때문에 콰인의 규칙을 위반합니다. 진정한 콰인은 파일 시스템의 도움 없이, 오직 프로그램 자체의 논리만으로 자기 자신을 출력해야 한다는 점을 기억하세요.