Skip to content

Poésie en Python (3)

7 juillet 2011

Cet article termine la série de poésie en Python. L’objectif est de corriger les défauts signalés dans le second article pour enfin livrer une version finale de la poésie. Le premier article présentait les contraintes d’écriture et les poèmes créés.

Le jury a validé globalement le poème mais reproche les lignes de code trop visibles qui gâche l’esthétique globale du poème. Heureusement, ces défauts ne sont pas insurmontables comme nous allons le voir. Il est donc possible de partir du poème déjà écrit, d’ajouter quelques patchs pour obtenir un résultat satisfaisant. Comme le dit très approximativement l’adage : « Sur le métier remet au moins deux fois ton ouvrage ».

Critiques et correctifs

Voici la liste des lignes de code posant problèmes :

  • #! /usr/bin/env python
  • # -*- coding: utf-8 -*-
  • import os
  • "".join([v[0] for v in

Il est possible de les prendre successivement pour les résoudre un à un :

Le shebang #! /usr/bin/env python

Cette ligne est simplement à enlever. Cette ligne servant à informer l’interprète de commande du programme à utiliser, il ne sera plus possible de lancer le script directement mais cela restera faisable en passant le script en paramètre à python :
$ ./suicide.py => pas bien
$ python suicide.py => bien

La déclaration d’encodage # -*- coding: utf-8 -*-

Cette ligne permet à l’interpréteur de ne pas avoir de soucis avec les problèmes d’encodage des accents et autres caractères spéciaux (comprendre non-ASCII). Plusieurs solutions se dégagent :

  • déclarer les chaînes comme de l’unicode (u"ma chaine"). Le défaut étant que le rendu n’est pas très élégant, ce qu’on essaie actuellement de corriger…
  • supprimer les accents : « éloignes » devient « eloignes ». Solution qui fonctionne mais qui prête le flanc à de nouvelles critiques.😦
  • enlever les mots accentués : s’ils sont remplacés par des mots sans accents, le problème est résolu de lui-même. Je trouve ce contournement très amusant mais lourd à mettre en place (beaucoup de passages à réécrire).
  • passer à python 3 : Unicode, et donc les accents, est géré nativement.

Ce n’est pas parce que la poésie est une matière poussiéreuse, qu’on ne peut pas faire du code tourné vers l’avenir ! Nous choisirons donc Python 3 qui est trivial à mettre en place puisqu’il suffit d’installer une nouvelle version du compilateur (paquet python3 sous Debian et distributions assimilées). Lancer le script devient donc :
$ python3 suicide_final.py

L’import de la bibliothèque import os

Il est impossible de se passer de l’import pour appeler la fonction de suppression. En revanche, il est possible de l’inclure dans la chaîne à exécuter :
import os;os.remove(__file__) fonctionnera ; le point-virgule servant de séparateur entre les deux instructions.

Insérer l’import ajoute 10 caractères à la ligne donc 10 vers supplémentaire à ajouter au début du poème. Malheureusement, cela ne fait pas des quatrains donc il faut rajouter 2 vers inutiles pour garder la structure principale du poème. Par contre, il ne faut pas que les premiers caractères de ces deux vers soient pris en compte. La méthode la plus évidente et de mettre un espace comme premier caractère, comme pour le vers qui sépare import de os. L’autre solution, qui sera préférée ici est de ne pas mettre de virgule à la fin de la ligne, python concaténant les lignes pour en faire une seule chaîne. Cette solution a été choisie uniquement pour son avantage graphique (pas de décalage en début de vers).

La concaténation du premier caractère de chaque vers "".join([v[0] for v in

Cette ligne était simplement entre les stophes du programme et la dernière strophe introduisant l’exécution. Il est facile de la déplacer en début de fichier : au lieu d’utiliser une variable temporaire, il suffit de mettre l’ensemble du poème comme paramètre du in.

Résultat final

Et voilà le résultat final !

ute = "".join([v[0] for v in (
    "imperceptiblement tu te détaches de",
    "mes bras et t'éloignes encore et encore,",
    "puis à l'horizon mes yeux te perdent.",
    "ostracisé par ton coeur et par ton corps.",

    "restent de jolis souvenirs passés",
    "toujours si vivants dans ma mémoire,",
    " nos jeux complices au soleil couchant cet été",
    "ou ces promenades sur les bords de la Loire.",

    "souvent j'y repense en souriant",
    ";d'un sourire d'autant plus douloureux"
    "que ma tristesse restera longtemps :"
    "tu m'as quitté et m'as rendu malheureux.",

    "où souhaiterais-tu que nous allions",
    "si jamais nous avions encore un avenir?",
    ".je ne veux pas que nous nous reperdions;",
    "reconstruisons ensemble de nouveaux souvenirs.",

    "en me rappellant de toi,",
    "mes yeux se remplissent de larmes.",
    "oubliés les causes, les pourquois",
    "voulais-tu que je subisse un tel blâme?",

    "ennamourés tous les deux",
    "(juste nous, le reste du monde",
    "_disparu_ à nos yeux)",
    "_mes espoirs_ s'effondrent.",

    "furtivement, tu t'éclipses.",
    "insensible lorsque tu me quittes à",
    "la douleur dans mes synapses",
    "et je sais bien que je ne te reverrai pas.",

    "_ma vie_ devenue bien trop grande",
    "_sans toi_ (juste remplie de pleurs",
    ") n'est plus rien que des cendres."
    )])

"Ma décision est prise: une fin "
"Rapide plutôt qu'une longue chute."
"J'aurai assez de courage pour que je m";exec(ute)

Et vous, le langage que vous utilisez au quotidien est-il assez expressif pour écrire des poèmes ?

From → Python

Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :