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 blocs 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 égal à 2") ... else: ... print("tout va bien") ...
(le elif signifie "sinon si...")
Exemple d'utilisation d'une structure « Si ... est dans ... alors» :
>>> c = 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 int(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)
N.B.: On peut enchaîner les inégalités :
>>> a = 2.5 >>> 2 < a < 3 True
La méthode range permet de créer rapidement des listes d'entiers :
>>> list(range(5))
>>> list(range(3,8))
>>> list(range(3,12,2))
>>> list(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", l'itérable de base étant une liste d'entiers.
Ainsi, lorsque l'on écrit :
>>> for i in range(5): ... print(i, end=', ') ...
...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
Ceci peut s'obtenir plus rapidement ainsi :
>>> sum(range(101)) 5050
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, end='') ... 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 >>>
>>> 2**5
Pour chaque lettre du mot : si la lettre est une voyelle : je l'affiche
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 = 1 >>> n = 1 >>> while S < 1000: ... n = n + 1 ... S = S + n ... >>> print(n) 45
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 ...
$\forall\,n\geq 1,\quad H_n=1+\frac{1}{2}+\frac{1}{3}+\cdots+\frac{1}{n} $ On admet que cette suite est divergente. Trouver le plus petit entier naturel $k$ tel que $H_k>10$.
Pour faciliter l'écriture de boucles, Python utilise trois mots-clés :