Nov 21, 2024

Wiki

Python

Aide

edit SideBar

Search

Les instructions if, for et while


Le if

Remarque préliminaire

Dans les structures qui suivent, comme souvent en python, les espaces en début de ligne sont obligatoires.

  • Elles vont par 4.
  • Une tabulation n'est pas des espaces.

Cette indentation est l'unique information permettant de savoir quand commencent et finissent les blocs des différentes structures (if, while, etc.)

Le if par l'exemple

Premier exemple

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».

Deuxième exemple

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...")

Troisième exemple

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 !")
  ...

Le if dans une égalité

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)

Travaux pratiques

  1. Faire un programme qui demande à l'utilisateur son âge, et qui renvoie vous êtes jeune ou vous êtes vieux, suivant que l'âge est inférieur, ou supérieur, à 50 ans.
  2. Justifier pourquoi seule la troisième ligne ci-dessous peut figurer dans le programme demandé juste au-dessus.
    • if 'n' < 50:
    • if n < '50':
    • if n < 50:
  3. Faire un second programme qui demande, une fois encore, l'âge de l'utilisateur, et qui affiche :
    • Vous êtes étudiant, si l'âge est inférieur à 25,
    • Vous êtes salarié, si l'âge est entre 25 et 55 ans,
    • Vous êtes retraité, sinon.

N.B.: On peut enchaîner les inégalités :

  >>> a = 2.5
  >>> 2 < a < 3
  True

L'instruction for

Présentation de la méthode range

La méthode range permet de créer rapidement des listes d'entiers :

  • L'instruction range(n) renvoie la liste des entiers de 0 à n-1,
  >>> list(range(5))
[0, 1, 2, 3, 4]
  • range(a,b) renvoie la liste des entiers de a à b-1.
  >>> list(range(3,8))
[3, 4, 5, 6, 7]
  • range(a,b,c) renvoie la liste des entiers de a à b-1, avec un pas de c.
  >>> list(range(3,12,2))
[3, 5, 7, 9, 11]
  • Ce pas peut être négatif :
  >>> list(range(11,7,-1))
[11, 10, 9, 8]

Notons pour finir que la méthode range ne permet de manipuler que des entiers.

Le range dans le for

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

Le for et les autres itérables

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
  >>> 

Travaux pratiques

  • Faire afficher la liste des carrés de tous les entiers compris entre 5 et 15. On notera que la puissance s'obtient, en python, par deux étoiles (**) :
  >>> 2**5
32
  • Demander à l'utilisateur de saisir un mot, et afficher uniquement ses voyelles. Le programme pourrait être ainsi (à traduire en Python) :
  Pour chaque lettre du mot :
       si la lettre est une voyelle :
           je l'affiche
  • Afficher les 30 premières puissances de 2, et calculer leur somme.

L'instruction while

while par l'exemple

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
  ...

Travaux pratiques

  1. Déterminer le nombre entier positif $n$ tel que $2+4+6+8+...+2*n$ dépasse 1000 pour la première fois.
  2. Faire de même avec les entiers impairs, et les puissances de 2.
  3. La suite harmonique $(H_n)$ est définie par :

$\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$.

pass, continue et break

Présentation

Pour faciliter l'écriture de boucles, Python utilise trois mots-clés :

pass
ne fait rien.
continue
arrête l'exécution d'une boucle, mais reprend au début de cette boucle à l'itération prochaine.
break
arrête définitivement la boucle.

Travaux pratiques

  1. Tester l'effet de chacun de ces mots-clés sur les boucles présentées ici.
  2. Écrire de nouvelles versions de vos programmes effectués ci-dessus en utilisant ces mots-clés. Le but n'est pas ici de faire un programme propre ou efficace, mais d'apprendre à manipuler ces outils.

D'autres travaux pratiques

  1. Écrire un programme qui demande à un étudiant, sa moyenne générale, et qui affiche :
    • Admis si la moyenne est supérieure ou égale à 10,
    • Rattrapage si la moyenne est comprise entre 8 et 10 (et différente de 10),
    • Refusé si la moyenne est strictement inférieure à 8.

Page Actions

Recent Changes

Group & Page

Back Links