Structures alternative et répétitive Comparaison de données à laide des opérateurs...

Preview:

Citation preview

Structures alternative et répétitive

Comparaison de données à l’aide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique, « ou » logique et la négation. Les blocs. La structure alternative : clause « if » avec ou sans « else ». Les opérateurs conditionnels. La structure répétitive : la clause « while ». Présence de sentinelles. Structures imbriquées.

2

Structures de contrôle Jusqu’à maintenant, les instructions d’un programme ont été exécutées

les unes à la suite des autres, dans l’ordre où elles sont écrites.

Structure en séquence : exécution séquentielle des opérations

L’ordre d’exécution des instructions des algorithmes n’est pas toujoursséquentielle et Python offre différentes possibilités pour les décrire :

Structure de sélection

Structure de répétition :

Trois types de structures de sélection (unique, double ou multiple) :structure if : effectue une action si une condition est vraie

(True) ou l’omet si elle est fausse (False).

structure if else : effectue une action si une condition est vraie(True) ou une autre action si elle est fausse (False).

structure if elif else : effectue une action parmi plusieurs, selon lavaleur de différentes expressions.

structures while et for.

Choix d’une instruction dépendamment d’une condition.

Répétition d’instructions au moment où une conditionest satisfaite.

3

Opérateurs relationnels Les structures alternative et répétitive renferment toutes une condition à

vérifier. Celle-ci compare deux valeurs à l’aide d’opérateurs relationnels.

Python Notation utilisée Description

>

>=

<

<=

==

!=

>

<

=

supérieur

supérieur ou égal

inférieur

inférieur ou égal

égal

différent

>>> x, y = 2.3, 6.7>>> x < yTrue>>> x != yTrue>>> (x + 4.4) == yTrue>>>

Ex. :

Le résultat est une expression booléenne.

4

Instruction conditionnelle ifC’est une instruction de la forme :

>>> if (expression booléenne) :. . . instruction. . . instruction. . . . . .. . . instruction. . .

Bloc d’instructions à exécuter si l’expressionbooléenne est vraie. Autrement, on poursuitl’exécution immédiatement après cette suite.

Note : Si l’éditeur ne le fait pas, on doit effectuer une tabulation ou entrer quatreespaces avant d’entrer une instruction faisant partie du bloc. Après avoirentré la dernière instruction du bloc, pesez sur la touche une 2ième foispour exécuter la portion de code. Les instructions d’un bloc doivent êtreexactement au même niveau.

Exemple : >>> indice = 0>>> if (indice < 10):

indice = indice + 2print "indice = ", indice

indice = 2>>>

On peut aussi écrire : >>> if (expression booléenne) : instructionlorsque le bloc renferme une seule instruction.

5

Instruction conditionnelle if - else

C’est une instruction de la forme :

>>> if (expression booléenne) :. . . instruction. . . instruction. . . . . .. . . instruction. . . else :. . . instruction. . . instruction. . . . . .. . . instruction. . .

Bloc d’instructions à exécuter si l’expressionbooléenne est vraie.

Ex. I:

Bloc d’instructions à exécuter si l’expressionbooléenne est fausse.

>>> centre_x, centre_y, rayon = 1.5, 2.4, 12>>> coord_x, coord_y = 2.3, 3.1>>> if (((coord_x - centre_x)**2) + ((coord_y - centre_y)**2) == (rayon * rayon)):

print "(", coord_x, ",", coord_y, ")", "est un point du cercle."else:

print "Ce n'est pas un point du cercle."

Ce n'est pas un point du cercle.>>>

6

Instruction conditionnelle if - else

>>> note = input("Donnez la note d'un étudiant dans un cours sur 100 : ")Donnez la note d'un étudiant dans un cours sur 100 : 74>>> if (note < 0):

print "*** erreur : la note de l'étudiant ne peut être négative. ***">>> if (note < 60):

print "L'étudiant a un échec."else:

print "L'étudiant a réussi. : "L'étudiant a réussi. : >>> print "Sa note est : ", noteSa note est : 74>>>

Ex. II:

Ex. III: >>> u, v = 75.3, 23.5>>> if (u < v):

min = umax = v

else :min = vmax = u

>>> print "min = ", min, " max = ", maxmin = 23.5 max = 75.3>>>

7

Instruction conditionnelle elif (contraction de « else if »)

Un bloc d’instructions est exécuté dès qu’une expression booléenne est vraie.

>>> if (expression booléenne 1) :. . . instruction. . . instruction. . . . . .. . . instruction. . . elif (expression booléenne 2) :. . . instruction. . . instruction. . . . . .. . . instruction

…. . . elif (expression booléenne n) :. . . instruction. . . instruction. . . . . .. . . instruction. . . else :. . . instruction. . . instruction. . . . . .. . . instruction

Bloc d’instructions à exécuter si l’expressionbooléenne 1 est vraie.

Bloc d’instructions à exécuter si l’expressionbooléenne 1 est fausse et l’expression 2 estvraie.

Bloc d’instructions à exécuter si l’expressionbooléenne n est vraie et les précédentesfausses.

Bloc d’instructions à exécuter si toutes lesexpressions booléennes sont fausses.

8

Instruction conditionnelle elif (contraction de « else if »)

Ex. : >>> a, b, c = 1., 6., 9.>>> if ((b*b - 4 * a * c) == 0):

print "racines doubles"elif ((b*b - 4 * a * c) < 0):

print "racines imaginaires:"else:

print "racines reelles"

racines doubles>>>

9

Année bissextile

1. Lire une année n.

2. Si n possède comme facteur 400 alors

2.1 Écrire que n est une année bissextile.

2.2 L’algorithme prend fin.

3. Si n possède comme facteur 100 alors

3.1 Écrire que n n’est pas une année bissextile.

3.2 L’algorithme prend fin.

4. Si n possède comme facteur 4alors écrire que n est une année bissextile.sinon écrire que n n’est pas une année bissextile.

5. L’algorithme prend fin.

Une année est bissextile tous les 400 ans; les siècles ne sont pas bissextiles etune année sur 4 est bissextile

10

Année bissextile

>>> # Concevoir un programme qui prend en entrée une année,>>> # détermine si oui ou non l'année est bissextile,>>> # et affiche le résultat.>>> >>> annee = input("Entrez l'année que vous désirez : ")Entrez l'année que vous désirez : 1994>>> if ((annee % 400) == 0):

print "oui"elif ((annee % 100) == 0):

print "non"elif ((annee % 4) == 0):

print "oui"else :

print "non"

non>>>

11

Calcul de la cote d’un élève

Exemple : Cote NoteA ≥ 90B [80, 90)C [70, 80)D [60, 70)E < 60

>>> # Concevoir un programme qui prend en entrée une note,>>> # calcule la cote correspondante et>>> # affiche le résultat.>>> >>> note = input("Entrez la note obtenue : ")Entrez la note obtenue : 73>>> if (note >= 90): cote = 'A'elif (note >= 80): cote = 'B'elif (note >= 70): cote = 'C'elif (note >= 60): cote = 'D'else : cote = 'E'

>>> print "Avec la note ", note, ", vous avez la cote ", cote, "."Avec la note 73 , vous avez la cote C .

12

Instructions imbriquées

Nous pouvons imbriquer les unes dans les autres plusieurs instructions composées.

x = 3.14159if x >= 0.0 :

if x == 0.0 :print "Valeur nulle"

elif x == 3.14159 :print "Valeur de pi"

else :print "Valeur negative"

Note :

Les limites des instructions et des blocs sont définies par la mise en page.Chaque ligne d’instructions se termine par le caractère de fin de ligne.

1.

On peut également terminer une ligne d’instructions par un commentaire lequelcommence toujours par le caractère spécial # et se termine par le caractère defin de ligne.

2.

Toutes les lignes d’un même bloc d’instructions ou d’une instruction composéedoivent être indentées exactement de la même manière. Les blocs d’instructionssont toujours associés à une ligne d’en-tête contenant une instruction(if, elif, else, while, …) suivie d’un double point.

3.

13

>>> u = 2>>> v = 3>>> if (u > 0):

if (v < 0):print "valeur négative"

else :print "u et v sont positifs."

u et v sont positifs.>>>

>>> u = 2>>> v = 3>>> if (u > 0):

if (v < 0):print "valeur négative"

else :print "u est négatif"

>>>

4. L’indentation nous permet de lever toute ambiguïté avec des instructionsimbriquées.

Ex. : La clause else correspond à quelle clause if d’après vous ?

La réponse est fonction de l’indentation.

14

Minimum et maximum de 3 entiers

>>> A, B, C = input("Saisir 3 entiers quelconques : ")Saisir 3 entiers quelconques : 9, 5, 12>>> if (A <= B):

if(A <= C):min = Aif (B >= C): max = Belse : max = C

else : # C < A <= Bmin = Cmax = B

else : # B < Aif (B <= C):

min = Bif (A >= C): max = Aelse : max = C

else : # C < B < Amin = Cmax = A

>>> print "La plus petite valeur est : ", minLa plus petite valeur est : 5>>> print "La plus grande valeur est : ", maxLa plus grande valeur est : 12

Note :

Dans une structure imbriquée,c’est souvent plus rapide queplusieurs structures simplesdans le cas d’une sortie hâtive.

À cette fin, il est préférable detester les conditions les plussusceptibles d’être vraies audébut.

15

Minimum et maximum de 3 entiers – variante

>>> A, B, C = input("Saisir 3 entiers quelconques : ")Saisir 3 entiers quelconques : 9, 5, 12>>> if (A <= B): min = Aelse : min = B

>>> if (min > C): min = C

>>> if (A <= B): max = Belse : max = A

>>> if (max < C): max = C

>>> print "La plus petite valeur est : ", minLa plus petite valeur est : 5>>> print "La plus grande valeur est : ", maxLa plus grande valeur est : 12>>>

16

Écrire un programme qui lit en entrée trois valeurs réelles, A, B et C. Ce programmedoit afficher un message indiquant

- si nous ne sommes pas en présence d’un triangle dont les côtés sont de longueur A, B et C respectivement.

max(A, B, C) ≥ (A + B + C) / 2 Ce n’est pas un triangle.- Autrement,

s’il s’agit d’un triangle scalène,s’il s’agit d’un triangle isocèle,s’il s’agit d’un triangle équilatéral,s’il s’agit d’un triangle rectangle,

max(A, B, C)2 = (A2 + B2 + C2) / 2 C’est un triangle rectangle.s’il s’agit d’un triangle rectangle isocèle.

Identification d’un triangle

17

Identification d’un triangle>>> A, B, C = input("Entrez les 3 paramètres A, B et C : ")Entrez les 3 paramètres A, B et C : 2, 5, 4>>> # Recherche du maximum.>>> max = A>>> if (max < B): max = B>>> if (max < C): max = C>>> if (max >= (A + B + C) / 2.0): print "Ce n'est pas un triangle."else:

sortie = "C'est un triangle "if (max * max == (A*A + B*B + C*C)/2.0): sortie = sortie + "rectangle."if ( A == B):

if (B == C): sortie = sortie + "equilatéral."else: sortie = sortie + "isocèle."

else:if (A == C): sortie = sortie + "isocèle."elif (B == C): sortie = sortie + "isocèle."else: sortie = sortie + "scalène."

>>> print sortieC'est un triangle scalène.

18

Opérateurs ternaires

>>> u = 3>>> v = 2>>> petit = u if (u < v) else v>>> petit2>>>

Ex. :

expression_1 if (expression booléenne) else expression_2

Cela retourne la valeur de expression_1 si l’expression booléenne est vraie;Autrement, la valeur de expression_2 est retournée.

Utilisé à outrance, cet opérateur peut nuire à la lisibilité du programme.

19

Instructions répétitives – l’instruction while

i = 0while (i < 10) :

i = i + 1print i, i * i, i **3

Ex. 1 :

u, v, w = 1, 1, 1while w <= 10 :

print v,u, v, w = v, u + v, w + 1

Ex. 2 :

La virgule permet d’afficherles termes sur la même ligne.

Affichage de la suite de Fibonacci.

>>> while (expression booléenne) :. . . instruction. . . instruction. . . . . .. . . instruction

Tant et aussi longtemps que l’expressionbooléenne est vraie, le bloc d’instructionsest exécuté.

Si la condition est fausse, on poursuitl’exécution après le bloc d’instructions.

>>> i = 5>>> while i :

print ii = i - 1

54321

Lorsque la valeur numérique d’uneexpression booléenne est non nulle, celle-ci est toujours vraie.

Attention : on a une boucle infiniesi l’expression booléenneest toujours vraie.

20

Ex. 3 : # Plus petite puissance de 2 plus grande que 1000.>>> produit = 2>>> while (produit <= 1000): produit *= 2>>> print produit1024

1024

Omettre d’inclure dans le corps d’une structure while une action qui permetteà la condition du while de devenir fausse provoque habituellement une erreur(boucle infinie).

Note :

Ex. 4 : # Calcul de mn où m et n sont des entiers positifs.#>>> m, n = input("Saisie des valeurs de m et de n : ")Saisie des valeurs de m et de n : 5, 4>>> i, resultat = 1, 1>>> while (i <= n):

resultat *= mi = i + 1

>>> print resultat625>>>

Calcul de la racine carrée d’un nombre réel positif

A = input("Entrez un nombre réel positif : ")Nombre_d_iterations = input("Fournir le nombre d'itérations : ")x = Aj = 1print "La racine carrée de ", A, " est : "

while (j <= Nombre_d_iterations):x = (x + A / x) / 2.0print xj = j + 1

Calculer la racine carrée d’un nombre réel positif A par approximationssuccessives en utilisant la relation de récurrence suivante :

x0 = A;xj+1 = (xj + A / xj) / 2; j = 1, 2, ..., n.

Les paramètres A et n sont entrés au clavier; de plus, on doit s’assurer que Aest un nombre réel positif et que n est un entier naturel positif.

Toutes les approximations de la racine de A, c’est-à-dire toutes les valeurs dexj doivent être affichées.

Calcul de la moyenne des notes d’une classe

>>> # Ce programme saisit le nombre d'élèves d'une classe et la note de chaque>>> # élève; puis, calcule la moyenne des notes obtenues par les élèves et affiche>>> # cette moyenne.>>> >>> Nombre_d_eleves = input("Entrez le nombre d'élèves : ")Entrez le nombre d'élèves : 12>>>>>> somme_des_notes = 0>>> i = 1>>> while (i <= Nombre_d_eleves):

print "Entrez la ", i, " ième note : "une_note = input()somme_des_notes += une_notei += 1

Entrez la 1 ième note : 75Entrez la 2 ième note : 23.9

Etc.Entrez la 12 ième note : 34>>> print "La moyenne de la classe est : ", somme_des_notes / float(Nombre_d_eleves)La moyenne de la classe est : 55.575

23

Présence d’une sentinelle

On ne connaît pas à priori le nombre d’élèves dans la classe et on ne veut pasexiger de l’enseignant d’entrer au clavier le nombre d’élèves dans sa classe.

On introduit une valeur sentinelle (-1 par exemple) qui ne peut coïncider avecune note.

>>> # Ce programme saisit au clavier la note de chaque élève, entre -1>>> # lorsque toutes les notes ont été saisies, calcule la moyenne des>>> # notes saisies et affiche le résultat si au moins une note a été saisie;>>> # autrement, on affiche un message d'erreur.>>> >>> sentinelle = -1>>> Nombre_d_eleves, somme_des_notes = 0, 0.0>>> >>> une_note = input("Entrez une note ou -1 pour terminer : ")Entrez une note ou -1 pour terminer : 45>>> while (une_note != sentinelle):

somme_des_notes += une_noteNombre_d_eleves += 1une_note = input("Entrez une note ou -1 pour terminer : ")

24

Entrez une note ou -1 pour terminer : 98Entrez une note ou -1 pour terminer : 35Entrez une note ou -1 pour terminer : 56Entrez une note ou -1 pour terminer : 76Entrez une note ou -1 pour terminer : -1>>> if (Nombre_d_eleves != 0):

print "La moyenne de la classe est : ", \somme_des_notes / float(Nombre_d_eleves)

else : print "On doit entrer au moins une note."

La moyenne de la classe est : 62.0>>>

25

Calcul du nième nombre de Catalan

• Parenthèses

Combien de façons différentes avons-nous de

placer des parenthèses

autour d'une suite de n+1 lettres,en plaçant à chaque fois 2

lettres (au moins) dans les

parenthèses?

2 lettres 3 lettres 4 lettres 5 lettres

ab a ( bc ) ( (ab ) c ) d ...

( ab ) c (ab ) ( cd )

( a ( bc ) ) d

a ( (bc) d )

a ( b (cd ) )

1 2 5 14 => Nombres de Catalan

Polygone convexe : # de façons de diviser un polygone convexe à n + 2 côtésen triangles.

n = 2 Le 2ième nombre de Catalan est 2.

26

Calcul du nième nombre de Catalan

Cat(n) = (2n)! , n ≥ 0.(n+1)! n!

>>> # Ce programme prend en entrée un entier n, calcule le n ième nombre de>>> # Catalan, et affiche le résultat.>>> >>> n = input("Entrez la valeur de n : ")Entrez la valeur de n : 10>>> i, den = 1, 1>>> while (i <= n):

den *= ii += 1

>>> num = den>>> den = den * den * (n + 1)>>> >>> i = n + 1>>> while (i <= 2 * n):

num *= ii += 1

>>> print "Le ", n, " ième nombre de Catalan est : ", num / denLe 10 ième nombre de Catalan est : 16796

27

Cat(n) = (2n)! , n ≥ 0.(n+1)! n!

Cet algorithme fonctionne-t-il pour n’importe quelle valeur de n ?

Lorsque le programme est écrit en Python, l’algorithme fonctionne car il n’y a pasde débordements de capacité avec les entiers; par contre, l’algorithme peut êtreinefficace.

En C++, cela ne fonctionne pas pour n 7.

>>> print "Les numérateur et dénominateur sont : ", num, denLes numérateur et dénominateur sont : 2432902008176640000 144850083840000>>>

Voici une autre solution :

Cat(n) = (1 + n/2) (1 + n/3) … (1 + n/(n-1)) 2

28

>>> # Ce programme prend en entrée un entier n,>>> # calcule le n ième nombre de Catalan,>>> # et affiche le résultat.>>> >>> n = input("Entrez la valeur de n : ")Entrez la valeur de n : 10>>> resultat = 2.0>>> i = 2>>> while (i <= n - 1):

resultat *= (1.0 + n / float(i))i += 1

>>> print "Le ", n, " ième nombre de Catalan est : ", resultatLe 10 ième nombre de Catalan est : 16796.0>>>

29

Confusion entre = et ==

Confusion entre = et ==

= désigne l’opérateur d’affectation tandis que == représente l’opérateurde comparaison d’égalité.

>>> i = 1>>> if (i = 1): print iSyntaxError: invalid syntax>>>

>>> x, y, z = 1.0, 1.0, 1.0>>> y == x * x + 2.4 * z - 0.5False>>> y = x * x + 2.4 * z - 0.5>>> print x, y, z1.0 2.9 1.0>>>

2 interprétations différentes.

30

Affichage de la table des produits entre 0 et 10

titre = "X*Y | "i = 0while (i <= 9): titre = titre + " " titre = titre + str(i) i = i + 1print titrei = 1souligne = '-'while (i <= 65): souligne = souligne + '-' i = i + 1print soulignei = 0while (i <= 9): ligne = " " + str(i) + " | " j = 0 while (j <= 9): ligne = ligne + " " if (i * j <= 9): ligne = ligne + " " ligne = ligne + str(i * j) j = j + 1 print ligne i = i + 1

X*Y | 0 1 2 3 4 5 6 7 8 9------------------------------------------------------------------ 0 | 0 0 0 0 0 0 0 0 0 0 1 | 0 1 2 3 4 5 6 7 8 9 2 | 0 2 4 6 8 10 12 14 16 18 3 | 0 3 6 9 12 15 18 21 24 27 4 | 0 4 8 12 16 20 24 28 32 36 5 | 0 5 10 15 20 25 30 35 40 45 6 | 0 6 12 18 24 30 36 42 48 54 7 | 0 7 14 21 28 35 42 49 56 63 8 | 0 8 16 24 32 40 48 56 64 72 9 | 0 9 18 27 36 45 54 63 72 81

Note : Ce programme a étécompilé à partir d’unfichier.

31

Affichage d’un cercle centré à l’origine

import mathrayon = input("Entrez le rayon du cercle : ")y = - rayonwhile (y <= rayon): x = int(math.sqrt(rayon * rayon - y * y) + 0.5) i = 1 ligne = "" while (i <= rayon - x): ligne = ligne + " " i = i + 1 ligne = ligne + "*"

i = 1 - x while (i <= x - 1): ligne = ligne + " " i = i + 1 ligne = ligne + "*"

print ligne y = y + 1

**

**

* *

* *

* *

* ** *

* ** *

* ** *

* ** *

Entrez le rayon du cercle : 6

32

Calcul d’une somme

>>> n = input("Entrez le paramètre n : ")Entrez le paramètre n : 5>>> >>> somme = 0>>> i = 1>>> while (i <= n):

if ((i % 2) == 0): terme = 2 * ielse: terme = i - 1somme = somme + termei = i + 1

>>> print "La sommation est : ", sommeLa sommation est : 18

Il s’agit de calculer la somme suivante :n f(i) où f(i) = 2i si i est pairi=1 i-1 sinon.

33

>>> x, y = input("Entrez deux entiers : ")Entrez deux entiers : 23, 9>>> operateur = " ">>> while (operateur != "+" and operateur != "-" and operateur != "*" \ and operateur != "/" and operateur != "%"):

operateur = input("Entrez un opérateur valide : ")

Entrez un opérateur valide : "/">>> if (operateur == "+"): print x, " + ", y, " = ", x + yelif (operateur == "-"): print x, " - ", y, " = ", x - yelif (operateur == "*"): print x, " * ", y, " = ", x * yelif (operateur == "/"): print x, " / ", y, " = ", x / yelse: print x, " % ", y, " = ", x % y

23 / 9 = 2

Simulation d’une calculatrice simple

34

Décompte des lettres représentant les notes d’examen

>>> cote = " ">>> acomptage, bcomptage, ccomptage, dcomptage, ecomptage = 0, 0, 0, 0, 0>>> while (cote != "#"):

cote = input("Entrez la cote d'un étudiant (# pour terminer) : ")if (cote == "A" or cote == "a"): acomptage += 1elif (cote == "B" or cote == "b"): bcomptage += 1elif (cote == "C" or cote == "c"): ccomptage += 1elif (cote == "D" or cote == "d"): dcomptage += 1elif (cote == "E" or cote == "e"): ecomptage += 1elif (cote == "#"): print "C'est terminé."else: print "Cette cote est invalide."

Entrez la cote d'un étudiant (# pour terminer) : "A"Entrez la cote d'un étudiant (# pour terminer) : "e"Entrez la cote d'un étudiant (# pour terminer) : "C"Entrez la cote d'un étudiant (# pour terminer) : "c"Entrez la cote d'un étudiant (# pour terminer) : "F"Cette cote est invalide.Entrez la cote d'un étudiant (# pour terminer) : "B"Entrez la cote d'un étudiant (# pour terminer) : "#"C'est terminé.

35

>>> print "Les totaux pour chaque cote sont : "Les totaux pour chaque cote sont : >>> print "A : ", acomptageA : 1>>> print "B : ", bcomptageB : 1>>> print "C : ", ccomptageC : 2>>> print "D : ", dcomptageD : 0>>> print "E : ", ecomptageE : 1>>>

36

Instruction break• break Lorsque exécutée dans une structure while ou for, elle provoque la

sortie immédiate de cette structure. L’exécution du programmese poursuit avec la première instruction suivant cette structure.

On utilise souvent l’instruction break pour sortir d’une boucle plus tôt.

Exemple : >>> # Ce programme saisit un entier naturel au clavier,>>> # calcule le plus grand diviseur de cet entier et>>> # affiche le résultat.>>> >>> n = input("Entrez un nombre entier naturel : ")Entrez un nombre entier naturel : 27>>> pgd = n / 2>>> while (pgd > 0):

if (n % pgd == 0):print pgd, " est le plus grand diviseur de ", nbreak

pgd = pgd - 1

9 est le plus grand diviseur de 27

37

Instruction continue • continue

Lorsque exécutée dans une structure while ou for, elle ignore lesinstructions restantes dans le corps de cette structure et procède àl’itération suivante de la boucle.

while : La condition est évaluée immédiatement après l’exécution del’instruction continue. Et ce n’est que si la condition est vraieque l’itération suivante débute.

Exemple :

>>> while (True):n = input("Entrez un entier naturel : ")if (n <= 0): continueelse:

pgd = n / 2while (pgd > 0):

if ((n % pgd) == 0):print pgd, " est le plus grand diviseur de ", nbreak

pgd = pgd - 1break

38

Instruction pass • pass

Si vous écrivez une instruction Python qui attend un sous-bloc de code etque celui-ci est vide, il ne peut être absent. L’instruction pass joue ce rôle.

Cette instruction peut être utile durant les stades de développement oude mise au point.

Exemple :

>>> while (True):n = input("Entrez un entier naturel : ")if (n <= 0): continueelse:

pgd = n / 2while (pgd > 0):

if ((n % pgd) == 0):print pgd, " est le plus grand diviseur de ", nbreak

else: passpgd = pgd - 1

break

39

Instruction else • else

L’instruction else peut être utilisée non seulement avec les instructionsconditionnelles mais aussi avec les instructions itératives while ou for.

Exemple :

>>> while (True):n = input("Entrez un entier naturel : ")if (n <= 0): continueelse:

pgd = n / 2while (pgd > 1):

if ((n % pgd) == 0):print pgd, " est le plus grand diviseur de ", nbreak

pgd = pgd - 1else: print n, " est premier."break

Dans une boucle, else ne sera exécutée que si celle-ci se termine normale-ment, autrement dit si elle n’a pas été abandonnée par une clause break.

40

Utilisation de variables booléennes

• Dans les structures alternative et répétitive quenous avons vues, on retrouve des expressionslogiques à évaluer dont le résultat est vrai ou faux.

Pour stocker la valeur d’une condition afin del’utiliser ailleurs, vous devez recourir à unevariable booléenne de type bool.

Exemple : >>> x = 3.2>>> V = x < 6.4>>> if (V): print "La condition est vérifiée."

La condition est vérifiée.

Attention : Ne pas écrire if (V== True): print "La condition est vérifiée."

41

lecture_inachevee = Trueacomptage, bcomptage, ccomptage, dcomptage, ecomptage = 0, 0, 0, 0, 0

while (lecture_inachevee): cote = input("Entrez la cote d'un étudiant (# pour terminer) : ") if (cote == "A" or cote == "a"): acomptage += 1 elif (cote == "B" or cote == "b"): bcomptage += 1 elif (cote == "C" or cote == "c"): ccomptage += 1 elif (cote == "D" or cote == "d"): dcomptage += 1 elif (cote == "E" or cote == "e"): ecomptage += 1 elif (cote == "#"): print "C'est terminé." lecture_inachevee = False else: print "Cette cote est invalide."

print "Les totaux pour chaque cote sont : "print "A : ", acomptageprint "B : ", bcomptageprint "C : ", ccomptageprint "D : ", dcomptageprint "E : ", ecomptage

Utilisation de variables booléennes

42

Utilisation d’opérateurs logiques

Jusqu’à présent, nous n’avons étudié que des conditions simples telles quecompteur <= 10, total > 1000 ou nombre != sentinelle et nous les avonsexprimées à l’aide des opérateurs relationnels <, <=, >, >=, == et !=.

Python offre des opérateurs logiques : and (ET logique)or (OU logique)not (NON logique)

pour former des conditions plus complexes par une combinaison deconditions simples.

>>> x, y = 2.76, 1.98>>> n = 2>>> not (x > y and n == 2)False>>> x >= y or n != 2True

43

Tables de vérité

U V U and V U or V

false false false false

false true false vraie

true false false true

true true true true

Exemple :

ou Les instructions pour la déclaration de revenus 1992 disent que vous pouvezvous déclarer comme célibataire si une quelconque des conditions suivantesest vraie : - Vous ne vous êtes jamais marié.

- Vous êtes légalement divorcé ou séparé au 31 déc. 92. - Vous étiez veuf avant le 1er janv. 92 et ne vous êtes pas remarié.

et Vous pouvez employer le statut marié, si toutes les conditions suivantes sontsatisfaites : - Votre épouse est décédée en 90 ou en 91 et vous ne vous êtes

pas remarié en 92. - Vous avez un enfant à charge. - Cet enfant habitait chez vous tout au long de 92. - vous avez payé plus de la ½ de ses frais d’entretien.

44

Année bissextile

>>> annee = input("Entrez l'année désirée : ")Entrez l'année désirée : 1954>>> bissextile = ((annee % 400) == 0)>>> bissextile = bissextile or (((annee % 100) != 0) and ((annee % 4) == 0))>>> print bissextileFalse

Écrire un programme qui lit 2 entiers A et B et vérifie si les 3 conditions suivantes sont satisfaites simultanément :

A > 3 B < 2B > 1 A = 3A = 1 B 1

A, B = input("Entrez les valeurs de A et de B : ")C1 = (A > 3) <= (B < 2)C2 = (B > 1) <= (A == 3)C3 = (A == 1) <= (B <= 1)print C1 and C2 and C3

Recommended