In [6]:
from __future__ import division, print_function

13 Boucles for et while

In [7]:
from IPython.display import Image
Image('../NotesDeCours/images/bart_simpson.jpg')
Out[7]:
In [9]:
range(100, 109)
Out[9]:
[100, 101, 102, 103, 104, 105, 106, 107, 108]
In [11]:
for i in range(100, 109):
    print(i, "I will not do this again")
100 I will not do this again
101 I will not do this again
102 I will not do this again
103 I will not do this again
104 I will not do this again
105 I will not do this again
106 I will not do this again
107 I will not do this again
108 I will not do this again
In [12]:
for i in range(10):
    print(i)
0
1
2
3
4
5
6
7
8
9

13.1 La boucle for

Syntaxe :

for ELEMENT in LISTE:       # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1          # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

13.2 Un exemple de boucle for avec Sympy

13.3 Affectation d'une variable

In [14]:
s = 0

13.4 Mise à jour d'une variable

In [15]:
s = s + 1
In [16]:
s
Out[16]:
1

13.5 Quelques exemples

Calculer la somme des éléments d'une liste

In [17]:
L = range(10)
L
Out[17]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [18]:
sum(L)
Out[18]:
45
In [19]:
s = 0
for i in L:
    s = s + i
In [22]:
t = 0
#t = t + 1
t += 1
t
Out[22]:
1

Écrivez un programme qui affiche les 20 premiers termes de la table de multiplication par 7.

In [28]:
for i in range(20):
    print(7, 'x', i, '=', 7 * i)
7 x 0 = 0
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
7 x 11 = 77
7 x 12 = 84
7 x 13 = 91
7 x 14 = 98
7 x 15 = 105
7 x 16 = 112
7 x 17 = 119
7 x 18 = 126
7 x 19 = 133

Écrivez un programme qui affiche une suite de 12 nombres dont chaque terme soit égal au triple du terme précédent.

In [30]:
terme = 1
for _ in range(12):
    print(terme)
    terme *= 3
1
3
9
27
81
243
729
2187
6561
19683
59049
177147

Écrivez un programme qui affiche la suite de symboles suivante :

*
**
***
****
*****
******
*******
In [32]:
a = 'cheval'
a * 10
Out[32]:
'chevalchevalchevalchevalchevalchevalchevalchevalchevalcheval'
In [31]:
for i in range(1,8):
    print('*'*i)
*
**
***
****
*****
******
*******

Écrivez un script qui recopie une chaîne (dans une nouvelle variable), en insérant des astérisques entre les caractères. Ainsi par exemple, "gaston" devra devenir "g*a*s*t*o*n"

In [34]:
'cheval' + 'gaston'
Out[34]:
'chevalgaston'
In [38]:
s = 'gaston'
t = ''
for a in s:
    t += a + '*'
print(t[:-1])
g*a*s*t*o*n
In [ ]:
 

13.6 La boucle while

La boucle while peut être utile lorsqu'on ne sait pas combien d'itérations on doit faire.

Syntaxe :

while CONDITION:            # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1          # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

Écrire un programme qui affiche les puissances de deux inférieures à un milliard.

In [5]:
k = 1
while k < 10**9:
    print(k)
    k = k * 2
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912

13.7 Interrompre une boucle avec break

In [ ]:
 

Écrire un programme qui affiche les puissances de deux inférieures à un milliard et arrêter le programme si une puissance termine par 88.

In [ ]:
 

13.8 Continuer une boucle à l'itération suivante avec continue

Écrivez un programme qui calcule les 50 premiers termes de la table de multiplication par 13, mais n’affiche que ceux qui sont des multiples de 7.

In [ ]:
 

14 Conditions if

Syntaxe :

if CONDITION_1:               # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3
elif CONDITION_2:
    INSTRUCTION #4            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #5
    INSTRUCTION #6
else:
    INSTRUCTION #7            # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #8
    INSTRUCTION #9

Tester si une variable x est positive, négative ou nulle.

In [41]:
x = -3
if x > 0:
    print('la variable x est positive')
else:
    if x == 0:
        print('x est zéro')
    else:
        print('la variable x est négative')
la variable x est négative
In [44]:
x = -3
if x > 0:
    print('la variable x est positive')
elif x == 0:
    print('x est zéro')
elif x < 0:
    print('la variable x est négative')
la variable x est négative
In [45]:
x = -3
if x > 0:
    print('la variable x est positive')
elif x >= 0:
    print('x est zéro')
else:
    print('la variable x est négative')
la variable x est négative

Écrivez un script qui compte le nombre d’occurrences du caractère « e » dans une chaîne de caractères.

In [48]:
s = 'asldfjhalskjfqwlkjqwteeeeeeeeeas fasdfafds'
n = 0
for lettre in s:
    print("je lis la lettre", lettre, '. Nombre de e vu:', n, end=' ')
    if lettre == 'e':
        n += 1
    print("nombre de e vu apres lecture:", n)
print(n)
je lis la lettre a . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre s . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre l . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre d . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre f . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre j . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre h . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre a . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre l . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre s . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre k . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre j . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre f . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre q . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre w . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre l . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre k . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre j . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre q . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre w . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre t . Nombre de e vu: 0 nombre de e vu apres lecture: 0
je lis la lettre e . Nombre de e vu: 0 nombre de e vu apres lecture: 1
je lis la lettre e . Nombre de e vu: 1 nombre de e vu apres lecture: 2
je lis la lettre e . Nombre de e vu: 2 nombre de e vu apres lecture: 3
je lis la lettre e . Nombre de e vu: 3 nombre de e vu apres lecture: 4
je lis la lettre e . Nombre de e vu: 4 nombre de e vu apres lecture: 5
je lis la lettre e . Nombre de e vu: 5 nombre de e vu apres lecture: 6
je lis la lettre e . Nombre de e vu: 6 nombre de e vu apres lecture: 7
je lis la lettre e . Nombre de e vu: 7 nombre de e vu apres lecture: 8
je lis la lettre e . Nombre de e vu: 8 nombre de e vu apres lecture: 9
je lis la lettre a . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre s . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre   . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre f . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre a . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre s . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre d . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre f . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre a . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre f . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre d . Nombre de e vu: 9 nombre de e vu apres lecture: 9
je lis la lettre s . Nombre de e vu: 9 nombre de e vu apres lecture: 9
9

Que fait le programme ci-dessous, dans les quatre cas où l’on aurait défini au préalable que la variable a vaut 1, 2, 3 ou 15?

if a != 2: 
    print('perdu')
elif a == 3:
    print('un instant, s.v.p.')
else: 
    print('gagné')
In [ ]:
 

Écrivez un programme qui affiche les 20 premiers termes de la table de multiplication par 7, en signalant au passage (à l’aide d’une astérisque) ceux qui sont des multiples de 3. Exemple: 7 14 21* 28 35 42* 49...

In [53]:
nombre = 8
for i in range(20):
    produit = nombre * i
    if produit % 3 == 0:
        print(nombre, 'x', i, '=', produit, '*')
    else:
        print(nombre, 'x', i, '=', produit)
8 x 0 = 0 *
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24 *
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48 *
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72 *
8 x 10 = 80
8 x 11 = 88
8 x 12 = 96 *
8 x 13 = 104
8 x 14 = 112
8 x 15 = 120 *
8 x 16 = 128
8 x 17 = 136
8 x 18 = 144 *
8 x 19 = 152

Écrivez un programme qui analyse un par un tous les éléments d’une liste de nombres pour générer deux nouvelles listes. L’une contiendra seulement les nombres pairs de la liste initiale, et l’autre les nombres impairs.

In [ ]:
L = [123, 535, 74764, 14379, 56452546, 2356, 3, 4, 8]

14.1 Syntaxe compacte d'une assignation conditionnelle

In [ ]:
 

15 Fonctions def

Syntaxe :

def FONCTION(PARAMETRES):      # ligne d'en-tête se terminant par ":"
    INSTRUCTION #1             # bloc d'instructions indenté de 4 espaces
    INSTRUCTION #2
    INSTRUCTION #3

Écrire une fonction qui affiche les 10 premiers multiples de 7.

In [57]:
def table_7():
    nombre = 7
    for i in range(20):
        produit = nombre * i
        if produit % 3 == 0:
            print(nombre, 'x', i, '=', produit, '*')
        else:
            print(nombre, 'x', i, '=', produit)
table_7()
table_7()
7 x 0 = 0 *
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21 *
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42 *
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63 *
7 x 10 = 70
7 x 11 = 77
7 x 12 = 84 *
7 x 13 = 91
7 x 14 = 98
7 x 15 = 105 *
7 x 16 = 112
7 x 17 = 119
7 x 18 = 126 *
7 x 19 = 133
7 x 0 = 0 *
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21 *
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42 *
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63 *
7 x 10 = 70
7 x 11 = 77
7 x 12 = 84 *
7 x 13 = 91
7 x 14 = 98
7 x 15 = 105 *
7 x 16 = 112
7 x 17 = 119
7 x 18 = 126 *
7 x 19 = 133
In [64]:
def table(nombre, stop=20):
    for i in range(stop):
        produit = nombre * i
        if produit % 3 == 0:
            print(nombre, 'x', i, '=', produit, '*')
        else:
            print(nombre, 'x', i, '=', produit)
table(5)
5 x 0 = 0 *
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15 *
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30 *
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45 *
5 x 10 = 50
5 x 11 = 55
5 x 12 = 60 *
5 x 13 = 65
5 x 14 = 70
5 x 15 = 75 *
5 x 16 = 80
5 x 17 = 85
5 x 18 = 90 *
5 x 19 = 95
In [ ]:
 

Écrire une fonction qui affiche les 10 premiers multiples d'un nombre choisi.

In [ ]:
 

Écrivez un programme qui calcule le volume d’un parallélépipède rectangle dont sont fournis au départ la largeur, la hauteur et la profondeur.

In [70]:
def volume_old(largeur, hauteur, profondeur):
    print(largeur*hauteur*profondeur)
In [71]:
def volume(largeur, hauteur, profondeur):
    return largeur*hauteur*profondeur
In [72]:
v = volume(2,3,4)
In [73]:
v + 1
Out[73]:
25

Écrivez un programme qui calcule le périmètre et l’aire d’un triangle quelconque dont l’utilisateur fournit les 3 côtés. (Rappel : l’aire d’un triangle quelconque se calcule à l’aide de la formule : $$ \sqrt{d(d-a)(d-b)(d-c)} $$ dans laquelle d désigne la longueur du demi-périmètre, et a, b, c celles des trois côtés.)

In [ ]:
 

Écrire un programme qui, étant données deux bornes entières a et b, additionne les nombres multiples de 3 et de 5 compris entre ces bornes. Prendre par exemple a = 0, b = 32 ; le résultat devrait être alors 0+15+30=45.

In [78]:
def ff_and(a, b):
    s = 0
    for i in range(a, b):
        if i % 3 == 0 and i % 5 == 0 :
            s += i
    return s
In [79]:
ff(0, 32)
Out[79]:
225

Modifier légèrement ce programme pour qu’il additionne les nombres multiples de 3 ou de 5 compris entre les bornes a et b. Avec les bornes 0 et 32 , le résultat devrait donc être : 0+3+ 5 +6+9+10+12+15+18+20+21+24+25+27+30=225.

In [84]:
def ff_or(a, b):
    s = 0
    for i in range(a, b):
        print('i=',i,' s=',s)
        if i % 3 == 0 or i % 5 == 0 :
            print('youpi pour i = ', i)
            s += i
    return s
In [85]:
ff_or(0, 32)
i= 0  s= 0
youpi pour i =  0
i= 1  s= 0
i= 2  s= 0
i= 3  s= 0
youpi pour i =  3
i= 4  s= 3
i= 5  s= 3
youpi pour i =  5
i= 6  s= 8
youpi pour i =  6
i= 7  s= 14
i= 8  s= 14
i= 9  s= 14
youpi pour i =  9
i= 10  s= 23
youpi pour i =  10
i= 11  s= 33
i= 12  s= 33
youpi pour i =  12
i= 13  s= 45
i= 14  s= 45
i= 15  s= 45
youpi pour i =  15
i= 16  s= 60
i= 17  s= 60
i= 18  s= 60
youpi pour i =  18
i= 19  s= 78
i= 20  s= 78
youpi pour i =  20
i= 21  s= 98
youpi pour i =  21
i= 22  s= 119
i= 23  s= 119
i= 24  s= 119
youpi pour i =  24
i= 25  s= 143
youpi pour i =  25
i= 26  s= 168
i= 27  s= 168
youpi pour i =  27
i= 28  s= 195
i= 29  s= 195
i= 30  s= 195
youpi pour i =  30
i= 31  s= 225
Out[85]:
225

Écrire une fonction est_premier(n) qui renvoie True si n est premier et False sinon.

In [ ]:
 

En mathématiques, on appelle suite de Syracuse une suite d'entiers naturels définie de la manière suivante :

On part d'un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d'entiers positifs dont chacun ne dépend que de son prédécesseur.

Par exemple, à partir de 14, on construit la suite des nombres : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2... C'est ce qu'on appelle la suite de Syracuse du nombre 14.

https://fr.wikipedia.org/wiki/Conjecture_de_Syracuse

Écrire une fonction qui calcule la suite de Syracuse d'un nombre et retourne ce résultat sous la forme d'une liste.

In [ ]:
 

16 Autres structures de données

In [ ]:
 

16.1 Tuples (type tuple)

In [ ]:
 

16.2 Emballage et déballage d'un tuple

In [ ]:
 

16.3 Dictionnaires (type dict)

In [ ]:
 

16.4 Ensembles (type set)

In [ ]:
 
In [ ]: