Stepan Ustinov
Stepan Ustinov

Reputation: 309

How does this Python 3 quine work?

Found this example of quine:

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

I get that %s and %r do the str and repr functions, as pointed here, but what exactly means the s%s part and how the quine works?

Upvotes: 19

Views: 3195

Answers (2)

Paul Evans
Paul Evans

Reputation: 27577

s is set to:

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

so the %r gets replaced by exactly that (keeping the single quotes) in s%s and the final %% with a single %, giving:

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

and hence the quine.

Upvotes: 19

Geza Lore
Geza Lore

Reputation: 541

The operator x % y means substitute the value y in the format string x, same way as C printf. Also note that the %% specifier stands for a literal % sign so s%%s within the format string will print as s%s, and will not capture a string.

Upvotes: 4

Related Questions