Dans les structures qui suivent, comme souvent en python, les espaces en début de ligne sont obligatoires.
Cette indentation est l'unique information permettant de savoir quand commencent et finissent les blocks des différentes structures (if, while, etc.)
Exemple d'utilisation d'une structure « Si ... alors ... sinon ... » :
>>> if 'a' < 'c' : ... print "a est plus petit que c" ... else : ... print "a est plus grand que c" ...
Dit autrement, si 'a' est plus petit que 'c' (dans l'ordre naturel des lettres), alors afficher « a est plus petit que c », sinon afficher « a est plus grand que c».
Exemple d'utilisation d'une structure « Si ... alors ... sinon si ... alors ... sinon ...» :
>>> if 1 > 2 : ... print "1 est plus grand que 2" ... elif 1 == 2 : ... print "1 est egal a 2" ... else : ... print "tout va bien" ...
(le elif signifie "sinon si...")
Exemple d'utilisation d'une structure « Si ... est dans ... alors» :
>>> c = raw_input("Saisir une lettre")
>>> if c in "aeiouy" :
... print "Voyelle !"
... else :
... print "Consonne !"
...
Bref, si le caractère saisi par l'utilisateur est dans le mot "aeiouy", alors afficher voyelle, sinon afficher consonne. Avec un in, le conteneur (ici, la chaîne de caractères "aeiouy") peut aussi être une liste, comme par exemple [0, 2, 4, 6, 8] :
>>> c = input("Saisir un chiffre")
>>> if c in [0, 2, 4, 6, 8] :
... print "Pair !"
... else :
... print "Impair !"
...
On peut mettre un if, then, else dans une égalité :
>>> maVariable=monExpression if maCondition else monExpression2
Par exemple, pour coder efficacement le pgcd/ppcm :
>>> def pgcd(a,b): return a if b == 0 else pgcd(b,a%b) >>> def ppcm(a,b) : return a*b/pgcd(a,b)
La méthode range permet de créer rapidement des listes d'entiers :
>>> range(5)
>>> range(3,8)
>>> range(3,12,2)
>>> range(11,7,-1)
Notons pour finir que la méthode range ne permet de manipuler que des entiers.
La boucle for (pour) peut parcourir tout "itérable" : chaînes de caractères, listes d'entiers ou d'autres objets, tuples... L'itérable de base pour for une liste d'entiers, donc écrite avec range.
Ainsi, lorsque l'on écrit :
>>> for i in range(5) : ... print i, ...
...on obtient 0 1 2 3 4.
Il faut comprendre ce qui précède ainsi : "Pour i parcourant la liste d'entier range(5)=[0,1,2,3,4], afficher i."
Ainsi, pour calculer la somme des 100 premiers entiers, on peut procéder ainsi :
>>> S = 0 >>> for k in range(101): ... S = S + k ... >>> print S 5050
Notons, pour finir, qu'à la fin de la boucle, la variable de boucle existe toujours, et posséde sa dernière valeur prise :
>>> for k in range(5): ... print k, ... 0 1 2 3 4 >>> k 4
Une chaîne de caractères, comme mot, peut aussi être itérée : il y a un premier caractère, puis un second, etc. On peut donc utiliser un for ici, quand on souhaite demander : pour un caractère dans la chaîne de caractères suivante...
>>> for lettre in "mot" : ... print lettre, ... mot
Ainsi, on l'a dit, une boucle for peut parcourir une liste, un tuple ou une chaîne de caractères.
A choisir, il vaut mieux utiliser for avec un itérable non modifiable (une chaîne de caractères, un tuple plutôt qu'une liste). En effet, for évalue dynamiquement les éléments à chaque cycle, et des effets de bords imprévisibles peuvent survenir si la liste itérée a été modifiée.
Comparer, par exemple, les deux boucles suivantes :
>>> liste = [1, 2, 3]
>>> for k in liste:
... print k
... liste = []
...
1
2
3
>>> liste = [1, 2, 3]
>>> for k in liste:
... print liste[k-1]
... liste = []
...
1
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
>>>
Pour faciliter l'écritures de boucles, Python utilise trois mots-clés :
Un petit exemple d'utilisation du while (du tant que ..., faire ...) :
>>> i=0 >>> while i<4 : ... print i ... i+=1 ...
Par exemple, si l'on souhaite obtenir le $n$ tel que $1+2+3+..+n$ dépasse pour la première fois 1000, on peut procéder ainsi :
>>> S = 0 >>> n = 1 >>> while S < 1000 : ... S = S + n ... n = n + 1 ... >>> print n 46
A noter, une fois encore, que l'on peut utiliser une instruction break pour quitter une boucle while :
>>> i=0 >>> while 1 : ... i+=1 ... if i>5 : ... break ...
This page may have a more recent version on pmwiki.org: PmWiki:UnePageAuHasard, and a talk page: PmWiki:UnePageAuHasard-Talk.