Chapitre 3 : Écriture
1 – Introduction
Nous avons déjà vu au chapitre précédent la fonction print qui permet d’afficher une chaîne de caractères. Elle permet en plus d’afficher le contenu d’une ou plusieurs variables :
Code python
>>> x = 32
>>> nom = ‘John’
>>> print nom , ‘ a ‘ , x , ‘ ans’
John a 32 ans
Python a donc écrit la phrase en remplaçant les variables x et nom par leur contenu. Vous pouvez noter également que pour écrire plusieurs blocs de texte sur une seule ligne, nous avons utilisé le séparateur , avec la commande print. En regardant de plus près, vous vous aperçevrez que Python a automatiquement ajouté un espace à chaque fois que l’on utilisait le séparateur ,. Par conséquent, si vous voulez mettre un seul espace entre chaque bloc, vous pouvez retirer ceux de vos chaînes de caractères :
Code python
>>> print nom , ‘a’ , x , ‘ans’
John a 32 ans
Pour imprimer deux chaînes de caractères l’une à côté de l’autre sans espace, vous devrez les concaténer :
Code python
>>> ani1 = ‘chat’
>>> ani2 = ‘souris’
>>> print ani1, ani2
chat souris
>>> print ani1 + ani2
chatsouris
2 – Écriture formatée
Imaginez que vous vouliez calculer puis afficher la proportion de GC d’un génome. Notez que la proportion de GC s’obtient comme la somme des bases Guanine (G) et Cytosine (C) divisée par le nombre total de bases. Sachant que l’on a 4500 bases G, 2575 bases C pour un total de 14800 bases, vous pourriez faire comme suit (notez bien l’utilisation des parenthèses pour gérer les priorités des opérateurs) :
Code python
>>> propGC = (4500.0 + 2575)/14800
>>> print « La proportion de GC est », propGC
La proportion de GC est 0.478040540541
Remarquez que si vous aviez fait le calcul avec (4500 + 2575)/14800, vous auriez obtenu 0 car tous les nombres sont des entiers et le résultat aurait été, lui aussi, un entier. L’introduction de 4500.0 qui est un réel résoud le problème, puisque le calcul se fait alors sur des réels.
Néanmoins, le résultat obtenu présente trop de décimales (onze dans le cas présent). Pour pouvoir écrire le résultat plus lisiblement, vous pouvez utiliser l’opérateur de formatage %. Dans votre cas, vous voulez formater un réel pour l’afficher avec deux puis trois décimales :
Code python
>>> print « La proportion de GC est %.2f » % propGC
Le proportion de GC est 0.48
>>> print « La proportion de GC est %.3f » % propGC
La proportion de GC est 0.478
Le signe % est appelé une première fois (%.2f) pour
désigner l’endroit où sera placée la variable dans la chaîne de caractères ;
préciser le type de la variable à formater, ici f pour float donc pour un réel ;
préciser le formatage voulu, ici .2 soit deux chiffres après la virgule.
Le signe % est rappelé une seconde fois (% propGC) pour indiquer les variables à formater. Notez que les réels ainsi formatés sont arrondis et non tronqués.
Vous pouvez aussi formatez des entiers avec %i (i comme integer)
Code python
>>> nbG = 4500
>>> print « Le génome de cet exemple contient %i guanines » % nbG
Le génome de cet exemple contient 4500 guanines
ou mettre plusieurs nombres dans une même chaîne de caractères.
Code python
>>> nbG = 4500
>>> nbC = 2575
>>> print « Ce génome contient %i G et %i C, soit une prop de GC de %.2f »
… % (nbG,nbC,propGC)
Ce génome contient 4500 G et 2575 C, soit une prop de GC de 0.48
Remarque :
Dans l’exemple précédent, nous avons utilisé le symbole % pour formater des variables. Si vous avez besoin d’écrire le symbole pourcentage % sans qu’il soit confondu avec celui servant pour l’écriture formatée, il suffit de le doubler. Toutefois, si l’écriture formatée n’est pas utilisée dans la même chaîne de caractères où vous voulez utilisez le symbole pourcent, cette opération n’est pas nécessaire. Par exemple :
Code python
>>> nbG = 4500
>>> nbC = 2575
>>> percGC = propGC * 100
>>> print « Ce génome contient %i G et %i C, soit un %%GC de %.2f »
… % (nbG,nbC,percGC) , »% »
Ce génome contient 4500 G et 2575 C, soit un %GC de 47.80 %
Le signe en fin de ligne permet de poursuivre la commande sur la ligne suivante. Cette syntaxe est pratique lorsque vous voulez taper une commande longue.
Enfin, il est possible de préciser sur combien de caractères vous voulez qu’un résultat soit écrit. Dans la portion de code suivant, le caractère ; sert de séparateur entre les instructions sur une même ligne :
Code python
>>> print 10 ; print 100 ; print 1000
10
100
1000
>>> print « %4i » % 10 ; print « %4i » % 100 ; print « %4i » % 1000
10
100
1000
>>>
Ceci est également possible sur les chaînes de caractères (avec %s, s comme string) :
Code python
>>> print « atom HN » ; print « atom HDE1 »
atom HN
atom HDE1
>>> print « atom %4s » % « HN » ; print « atom %4s » % « HDE1 »
atom HN
atom HDE1
Vous voyez tout de suite l’énorme avantage de l’écriture formatée. Cela permet d’écrire en colonnes parfaitement alignées. Nous verrons que ceci est très pratique si l’on veut écrire les coordonnées des atomes d’une molécule au format PDB.
3 – Exercices
Conseil : utilisez l’interpréteur Python pour les exercices 2 à 5.
Ouvrez l’interpréteur Python et tapez 1+1. Que se passe-t-il ? Écrivez la même chose dans un script test.py. Exécutez ce script en tapant python test.py dans un shell. Que se passe-t-il ? Pourquoi ?
Calculez le pourcentage de GC avec le code
Code python
percGC = ((4500 + 2575)/14800)*100
puis affichez le résultat. Que se passe-t-il ? Comment expliquez-vous ce résultat ? Corrigez l’instruction précédente pour calculer correctement le pourcentage de GC. Affichez cette valeur avec deux décimales de précision.
Générez une chaîne de caractères représentant un oligonucléotide polyA (AAAA…) de 20 bases de longueurs, sans taper littéralement toutes les bases.
Suivant le modèle du dessus, générez en une ligne de code un polyA de 20 bases suivi d’un polyGC régulier (GCGCGC…) de 40 bases.
En utilisant l’écriture formatée, affichez en une seule ligne les variables a, b et c dont les valeurs sont respectivement « salut », 102 et 10.318.