Quine en Python 6


Une quine en informatique, c’est un programme qui, quand il est exécuté, affiche un code source qui permet d’obtenir le même résultat. La plupart des quines affichent leur propre code. Évidement, ouvrir le fichier de code et l’afficher ne compte pas comme une quine valide…

C’est un exercice beaucoup plus difficile qui n’en à l’air, même si normalement tout langage turing complet en est capable.

Techniquement, la quine la plus courte en Python est un fichier vide, ce qui est une quine valide. Mais comme ce n’est pas très fun, voici un exemple court avec des vrais caractères ASCII dedans:

a='a=%s;print a%%`a`';print a%`a`

Notez l’emploie de variables qui ne servent à rien d’autre que d’optenir une forme de symétrie.

Une autre version plus longue :

 b='\\';g='"';p='%';s="b='%s%s';g='%s';p='%s';s=%s%s%s;print s%s(b,b,g,p,g,s,g,p)";print s%(b,b,g,p,g,s,g,p)

Beaucoup de quines utilisent ce principe de créer une chaîne contenant une partie du programme et d’afficher et évaluer la chaîne en même temps. Parfois avec des boucles :

x = ['print "x =", x', 'for m in x: print m']
print "x =", x
for m in x: print m

En Python, on peut évidement faire des variantes avec sys.write, exec, etc. Voici un article qui liste des snippets tordus et sympathiques pour y arriver.

Pour les plus tarés, il y existe des quines mathématiques. Une formule dont la courbe… représente la formule O_o !

Ça ne sert strictement à rien, mais c’est dimanche, personne ne va lire cet article de toute façon.

6 thoughts on “Quine en Python

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.