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

Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

Embed Size (px)

Citation preview

Page 1: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 2: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 3: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 4: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 5: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 6: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 7: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 8: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 9: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 10: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 11: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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 .

Page 12: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 13: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 14: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 15: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 16: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 17: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 18: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 19: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 20: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 21: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 22: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 23: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 24: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 25: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 26: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 27: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 28: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 29: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 30: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 31: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 32: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 33: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 34: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 35: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 36: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 37: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 38: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 39: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 40: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 41: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 42: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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

Page 43: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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.

Page 44: Structures alternative et répétitive Comparaison de données à laide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique,

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