PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Quine en Python

dimanche 17 novembre 2013 à 08:05

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.

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

flattr this!

Error happened! 0 - count(): Argument #1 ($value) must be of type Countable|array, null given In: /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php:428 http://ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/?Quine-en-Python #0 /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php(999): VroumVroum_Blog->update() #1 /var/www/ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/index.php(1): require_once('...') #2 {main}