introduction a l’algorithmique et` a la`...

53
Introduction a l’algorithmique et a la programmation SHNU, 2019 2020 Anthony Labarre [email protected] Cours 1

Upload: others

Post on 20-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

Introduction a l’algorithmique et a laprogrammationSHNU, 2019 – 2020

Anthony [email protected]

– Cours 1 –

Page 2: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Avant de commencer... –

I En cas de probleme, n’hesitez pas a poser desquestions ;

我没听懂、可以再说一遍吗?−→ “Je n’ai pas compris ; pouvez-vous reexpliquer?”

《老师说得太快了》−→ “Pouvez-vous parler / reexpliquer plus lentement?”

我不懂X、可以再解释一遍吗?−→ “Je n’ai pas compris X, pouvez-vous reexpliquer?Pouvez-vous donner un exemple?”

《这个很简单、我都明白了》−→ 太好了!现在你可以去帮你的同学了!

2 / 53

Page 3: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Aspects pratiques –

Organisation :I Quelques seances de cours + exercices (papier) ;I Quelques seances sur les ordinateurs ;I Et l’examen a la fin ;

Ressources :I http://igm.univ-mlv.fr/˜alabarre/teaching.php,

section SHNU — ou 百度 : Anthony LabarreI PythonTutor : http://pythontutor.com/ ; permet de

visualiser du code Python ;

3 / 53

Page 4: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Correction des exercices –

I Pas de solutions toutes faites ;I Pour les exercices sur papier :

I vous corrigez certains exercices au tableau ;I on verifie ensemble ces corrections ;

I Pour les exercices sur ordinateur :I vous recevrez des doctests pour verifier vos reponses ;I on verra plus tard ce que c’est et comment les utiliser ;

Encore une fois : posez des questions pendant la seanceou par e-mail ;

4 / 53

Page 5: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Installer Python –

I On utilise dans ce cours Python 3 ; attention, Python 2n’est pas compatible !

I Pour l’installer :I Ubuntu / Debian : sudo apt-get install python3I Windows : suivez le programme d’installation mais ajoutez

python a la variable PATH!

Sinon, vous ne pourrez pas taper python dans le terminal ;http://www.python.org/

5 / 53

Page 6: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Quelques environnements de developpement –

Les editeurs suivants rendent le developpement Python plusfacile ; choisissez celui que vous preferez :

Geany https://www.geany.org/PyCharm https://www.jetbrains.com/pycharm/Notepad++ https://notepad-plus-plus.org/Kate http://kate-editor.org/SublimeText https://www.sublimetext.com/

...

6 / 53

Page 7: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Plan d’aujourd’hui –

Variables, types et operations

Instructions et blocs

Instruction conditionnelle (if)

Structures iterables et boucles for

7 / 53

Page 8: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Pourquoi un langage? –

I L’ordinateur ne comprend que le langage binaire ;I trop difficile pour les humains (en general) ;I pas compatible d’une machine a l’autre !

CPU

. . . 010101101101110101100010. . .

CPU humain

Est-ce que 210 et1024 sont egaux?

humain2 ** 10 == 1024

True

I Il nous faut donc un langage commun pour se comprendre(Python, C, Java, ...) ;

8 / 53

Page 9: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Introduction sur un exemple –

Un exemple de programme en Python 3 :

if __name__ == '__main__':date = input(

"Bonjour! Quelle est votre date ""de naissance (jj/mm/aaaa)? "

)jour_naissance = int(date.split("/")[0])mois_naissance = int(date.split("/")[1])annee_naissance = int(date.split("/")[2])age = 2019 - annee_naissanceif mois_naissance > 10:

age = age - 1if mois_naissance == 10 and jour_naissance > 21:

age = age - 1print("Vous avez", age, "ans")

C’est un programme un peu avance. . . mais essayons decomprendre ce qu’il fait.

9 / 53

Page 10: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La coloration syntaxique –

if __name__ == '__main__':date = input(

"Bonjour! Quelle est votre date ""de naissance (jj/mm/aaaa)? "

)jour_naissance = int(date.split("/")[0])mois_naissance = int(date.split("/")[1])annee_naissance = int(date.split("/")[2])age = 2019 - annee_naissanceif mois_naissance > 10:

age = age - 1if mois_naissance == 10 and jour_naissance > 21:

age = age - 1print("Vous avez", age, "ans")

I Certains mots sont en couleurs : c’est la colorationsyntaxique ;

I Elle varie selon l’editeur utilise ;I Elle rend le programme plus lisible.

10 / 53

Page 11: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La coloration syntaxique –

I La couleur d’un mot indique sa categorie ; ici, on a entreautres :

I des fonctions integrees de Python en vert :

input = entree , int = entierI des mots-cles de Python en vert gras :

if = si , print = imprimer (afficher)I des operateurs en mauve gras :

and = etI des chaınes de caracteres en rouge :

"Quelle est votre date de naissance?"

...

I Nos variables ne sont pas coloriees ;

11 / 53

Page 12: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– L’indentation –

if __name__ == '__main__':date = input(

"Bonjour! Quelle est votre date ""de naissance (jj/mm/aaaa)? "

)jour_naissance = int(date.split("/")[0])mois_naissance = int(date.split("/")[1])annee_naissance = int(date.split("/")[2])age = 2019 - annee_naissanceif mois_naissance > 10:

age = age - 1if mois_naissance == 10 and jour_naissance > 21:

age = age - 1print("Vous avez", age, "ans")

I Les lignes ne commencentpas toutes au meme endroit.

I Ce n’est pas un detail !

I Le positionnement (on ditl’indentation) des lignes estimportant pour leur signification.

Modifier l’indentation modifie le comportement duprogramme — et peut meme l’empecher de fonc-tionner.

12 / 53

Page 13: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La structure –

I Les programmes Python doivent etre structures (cf.modele.py sur la page du cours) ;

I On y reviendra ; pour l’instant, retenez qu’il fautcommencer par if name == ’ main ’:

I Les commentaires (# ...) expliquent le code ;

I Notre but : ecrire du code1. qui fonctionne ;2. qui est facile a comprendre ;3. qui est facile a modifier ;

13 / 53

Page 14: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La partie “__main__” –

N’utilisez jamais le modele 0 (on expliquera pourquoi plus tard) :

Modele 0 (mauvais)

prenom = input("Quel est votre prenom? ")print("Bonjour, ", prenom, "!")

Modele 1 (mieux)

if __name__ == "__main__":prenom = input("Quel est votre prenom? ")print("Bonjour, ", prenom, "!")

Modele 2 (encore mieux)

def main():prenom = input("Quel est votre prenom? ")print("Bonjour, ", prenom, "!")

if __name__ == "__main__":main()

14 / 53

Page 15: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Executer du code Python –

I Deux options :1. utiliser l’interpreteur :

tapez python3 dans le terminal ;

2. executer un programme nomme fichier.py :tapez python3 fichier.py dans le terminal ;

15 / 53

Page 16: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Erreurs en Python –

I Python signale les erreurs quand on execute du code ;I Quand une erreur se produit :

I dans l’interpreteur : on peut continuer a executer du code ;I dans un programme en cours : il s’arrete et il faut le

relancer ;

I Les messages sont tres explicites (TypeError,IndexError, ...) ; il est important de les comprendre pourcorriger son code ;

16 / 53

Page 17: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

Python pas a pas

Variables, types et operations

17 / 53

Page 18: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Types de valeurs –

I Les valeurs de base possedent un type ;I Le type determine entre autres ce qui se passe quand on

fait une operation sur des valeurs ;

Les principaux types (on en verra d’autres) sont :

Type En Python Exemplesentier (∈ Z) int 12, -4, 123545, . . .reel (∈ R) float 3.14159, -1.5, 12., 4.56e12, . . .booleen bool True (vrai) ou False (faux)indefini, rien None Nonechaıne de caracteres str 'bonjour', "SHNU", . . .

Les majuscules/minuscules sont impor-tantes :

True 6= true

18 / 53

Page 19: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Operations sur les nombres –

I Les operations mathematiques que vous connaissezexistent en Python ;

I Le type du resultat depend du type des donnees dedepart :

+, −, ∗ int float

int int floatfloat float float

I Attention : la division (/) donne toujours un float ;I On a aussi :

math python exemplex mod y x % y 19 % 4→ 3

xy x ** y 3 ** 3→ 27bx/yc x // y 19 // 4→ 4

19 / 53

Page 20: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Operations sur les booleens –

I On a les operations logiques sur les booleens :

and (∧) False True

False False FalseTrue False True

or (∨) False True

False False TrueTrue True True

not (¬)False TrueTrue False

I Utilisation : a and b, a or b, not c, ...I Les comparaisons produisent des booleens :

math pythona = b? a == ba ≤ b? a <= ba ≥ b? a >= b

math pythona 6= b? a != ba < b? a < ba > b? a > b

20 / 53

Page 21: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Operations sur les chaınes de caracteres –

I Seuls + et * marchent sur les chaınes ;

I + realise la concatenation de deux chaınes :'SH' + 'NU'→ 'SHNU'

I * concatene n exemplaires de la chaıne :'SHNU' * 3→ 'SHNUSHNUSHNU'

I Les comparaisons (<, <=, ...) fonctionnent et se basent surl’ordre alphabetique ('a...' < 'b...' < 'c...' < ...) :'SH' < 'NU'→ False

I Il existe beaucoup d’autres operations sur les chaınes ;

I Et aussi plein de fonctions mathematiques (cos, log, . . . ) ;

21 / 53

Page 22: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Variables –

I Une variable est un nom qui reference une valeur en memoire ;

I On peut s’en servir dans les calculs ;

I Elle a le meme type que la valeur qu’elle reference ;

– Affectation –

I L’affectation d’une variable lie un nom a une valeur ;

I La syntaxe : nom = expression, ou expression est une valeurou un calcul qui produit une valeur ;

22 / 53

Page 23: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Etapes de l’affectation –

x = 40 + 2

1. Le calcul du membre droitdonne 42 ; la case enmemoire est creee avec cettevaleur ;

2. Le nom pour x est ensuitecree s’il n’existe pas ;

3. Enfin, on associe la variable xa sa valeur ;

En cas de reaffectation, le liend’avant est perdu : x = -6.5

42

x 42

x 42

x42

-6.5

×

23 / 53

Page 24: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Affectation 6= egalite ! –

Ce n’est pas du tout le = des mathematiques. Il faut lelire comme “prend la valeur” : x = x + 1

Exemple>>> x = 3>>> y = x>>> x = x + 2>>> x5>>> y3

La situation sera differente pour les “objets modifiables” qu’onverra plus tard.

24 / 53

Page 25: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Nommage –

Il y a certaines regles de nommage a respecter pour lesvariables (et les fonctions qu’on verra plus tard) :

I caracteres autorises : abc..., ABC..., 0123..., ;I caracteres interdits : tout le reste (et e, e, a, c, ...) ;

I attention : les chiffres sont permis, mais pas au debut !exemple ex2 Ex2mpl1 2019shnu

I noms interdits : ce qui a deja ete utilise, ainsi que les motsreserves et les fonctions predefinies de Python (voir suite) ;

25 / 53

Page 26: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Mots reserves –

Les mots suivants sont reserves pour le langage :

and as assert break class continuedef del elif else except finallyfor from global if import inis lambda nonlocal not or passraise return try while with yieldTrue False None

Astuce : si votre editeur affiche le nom de votre variable en grasou en couleur, c’est qu’il s’agit d’un mot reserve⇒ choisissez un autre nom!

26 / 53

Page 27: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Au passage ... input –

date = input("Bonjour! Quelle est votre date ""de naissance (jj/mm/aaaa)? "

)

I input(str) permet a l’utilisateur de rentrer des valeurs ;

I Ici, on lui demande de rentrer une date ;

I Attention : la fonction input renvoie toujours du texte !

Exemple>>> x = input("Entrez un nombre: ")Entrez un nombre: 1>>> y = input("Entrez un deuxieme nombre: ")Entrez un deuxieme nombre: 3>>> print(x, "+", y, "=", x + y)1 + 3 = 13

27 / 53

Page 28: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Transtypage (conversion de types) –

I Pour convertir ce que nous donne input en entier, onutilise la fonction int ;

I On peut donc corriger l’exemple precedent comme ceci :

Exemple>>> x = input("Entrez un nombre: ")Entrez un nombre: 1>>> y = input("Entrez un deuxieme nombre: ")Entrez un deuxieme nombre: 3>>> x = int(x) # conversion de la chaıne x en entier>>> y = int(y) # conversion de la chaıne y en entier>>> print(x, "+", y, "=", x + y)1 + 3 = 4

I Plus generalement :I str(valeur) convertit valeur en chaıne ;I int(valeur) convertit valeur en entier si possible ;I float(valeur) convertit valeur en reel si possible ;I bool(valeur) convertit valeur en booleen ;

28 / 53

Page 29: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Quelques exemples –

Voici quelques exemples de conversions :

int(4.5)→ 4 int(-4.5)→ -4 int('0345')→ 345int('SHNU')→ erreur float(4)→ 4. float('4.5')→ 4.5str(4)→ '4' str(True)→ 'True' str(-4.5)→ '-4.5'bool(4)→ True bool(0)→ False bool('SHNU')→ Truebool(None)→ False int('4.5')→ erreur

Remarques importantes :I str fonctionne toujours ;I int et float echouent sur une chaıne qui n’est pas un

nombre ;I int echoue sur une chaıne representant un reel ;

I solution : int(float('4.5')) au lieu de int('4.5') ;I bool donne False si son parametre equivaut a 0, True

sinon

29 / 53

Page 30: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La fonction type –

I On connaıt en general le type des variables qu’on definitsoi-meme ;

I Comment faire pour connaıtre le type des variables quiviennent d’ailleurs?

I On utilise la fonction type ;

Exemple>>> type(1.5)<class 'float'>>>> type(2)<class 'int'>>>> type(input)<class 'builtin_function_or_method'>

30 / 53

Page 31: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– TypeError : types incompatibles –

I Certains types sont incompatibles : on ne peut pas lesmelanger dans une meme operation ;

I Quand ce probleme survient, Python provoque uneexception de type TypeError ;

I Cela a pour effet d’arreter le programme;

Exemple>>> '3' * 2 # ok'33'>>> '3' + 2 # erreur!Traceback (most recent call last):

File "<stdin>", line 1, in <module>TypeError: Can't convert 'int' object to str implicitly

I Si une variable n’a pas le bon type, vous devez la convertir(transtypage) ;

31 / 53

Page 32: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

Python pas a pas

Instructions et blocs

32 / 53

Page 33: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Instructions et sequences d’instructions –

if __name__ == '__main__':date = input(

"Bonjour! Quelle est votre date ""de naissance (jj/mm/aaaa)? "

)jour_naissance = int(date.split("/")[0])mois_naissance = int(date.split("/")[1])annee_naissance = int(date.split("/")[2])age = 2019 - annee_naissanceif mois_naissance > 10:

age = age - 1if mois_naissance == 10 and jour_naissance > 21:

age = age - 1print("Vous avez", age, "ans")

I Les instructions sont executees dans l’ordre, de haut enbas

I En Python, il n’y a qu’une instruction par ligneI Le flot d’instructions peut etre modifie / redirige par des

conditions (if), des boucles (plus tard), . . .33 / 53

Page 34: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Blocs d’instructions –

Certaines instructions sont regroupees en blocs de la faconsuivante :

entete du bloc:instruction 1 du blocinstruction 2 du blocinstruction 3 du bloc

instruction hors bloc

I L’indentation (le decalage) se fait avec la touche tabulation ;I On peut inserer un bloc dans un bloc, un bloc dans un bloc

dans un bloc, . . .I L’indentation fait partie du langage Python, changer

l’indentation change la signification du programme

34 / 53

Page 35: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Espaces, pas tabulations ! –

Ne melangez pas tabulations et espacesdans l’indentation ! ! ! Configurez votreediteur pour qu’il remplace les tabulationspar des espaces.

Sous Geany :

35 / 53

Page 36: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

Python pas a pas

Instruction conditionnelle (if)

36 / 53

Page 37: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La conditionnelle : le if –

if mois_naissance > 10:age = age - 1

if mois_naissance == 10 and jour_naissance > 21:age = age - 1

print("Vous avez", age, "ans")

I Dans cet exemple, on teste si mois_naissance est plusgrand que le mois actuel ;

I Si c’est le cas, on effectue le bloc qui suit, ou age chuted’une unite

I On teste ensuite si mois_naissance est le mois actuelET si jour_naissance > 10 ;

I Si c’est le cas, on retire une unite a age

I Dans tous les cas, on termine par afficher l’age calcule ;

37 / 53

Page 38: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La conditionnelle : le if –

La forme la plus simple est

# debutif expression:

# instruction 1 du if# instruction 2 du if# ...

# suite

debut expression vraie?

bloc if

suitenon

oui

I expression renvoie un booleen (donc True ou False) ;I le bloc du if est execute⇔ expression == True

I dans tous les cas, le programme reprend a l’instructionapres if

38 / 53

Page 39: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Conditions multiples –

I L’expression du if peut contenir plusieurs conditions ;if jour == "mardi" and heure > 16 or minutes < 30:

I Les conditions sont evaluees dans l’ordre de lecture ;I Python ne teste pas tout si le resultat est connu d’avance :

1 < 2 or x / 0 == 3 −→ True (meme si x n’existe pas)x / 0 == 3 or 1 < 2 −→ erreur

39 / 53

Page 40: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Conditions alternatives : else et elif –

I L’instruction if permet de n’executer un bloc de code quesous certaines conditions ;

I On peut aussi preciser ce qu’il faut faire :I quand la condition n’est pas satisfaite, avec else ;I quand d’autres conditions peuvent etre satisfaites, avecelif ;

I Exemples de cas ou ceci est utile :I un menu en ligne de commande ;I des actions a declencher dans un jeu ;I . . .

40 / 53

Page 41: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La conditionnelle : le if avec else –

La forme avec else (= sinon) :

# debutif expression:

# instruction 1 du if# ...

else:# instruction 1 du else# ...

# suite

debut

expression vraie?

bloc if

suite

bloc else

nonoui

I le bloc du if est execute⇔ expression == True

I le bloc du else est execute⇔ expression == False

I dans tous les cas, le programme continue a l’instructionapres if/else

41 / 53

Page 42: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– La conditionnelle : le elif –

La forme avec elif (= contraction de else et if) :# debutif expression1:

# bloc du ifelif expression2:

# bloc du elifelse:

# bloc du else# suite

debut

expression1 vraie? expression2 vraie?

bloc if bloc elif

suite

bloc else

non

oui oui non

I le bloc du if est execute⇔ expression1 == True

I le bloc du elif est execute⇔ expression1 == False andexpression2 == True

I le bloc du else est execute⇔ expression1 == False andexpression2 == False

I On peut mettre plusieurs elif, les conditions sont evalueesdans l’ordre, et seule la premiere qui vaut True est consideree

42 / 53

Page 43: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Remarques sur l’utilisation de elif et else –

I On n’est jamais oblige d’utiliser elif et else ;I Si toutefois on y a recours :

I on doit suivre l’ordre if ... elif ... else (toujours endernier) ;

I on ne peut pas utiliser elif ni else sans les associer aun if precedent ;

43 / 53

Page 44: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

Python pas a pas

Structures iterables et boucles for

44 / 53

Page 45: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Boucles : concepts et motivations –

I Les boucles permettent de repeter des instructionsjusqu’a ce qu’une certaine condition soit satisfaite ;

I On imagine sans mal qu’il doit exister un moyen plusintelligent d’afficher les puissances de 2 que celui-ci :

if __name__ == "__main__":print(2 ** 0)print(2 ** 1)print(2 ** 2)print(2 ** 3)print(2 ** 4)# ...

I Les premieres boucles qu’on verra seront les boucles for,qui fonctionnent sur des structures iterables ;

45 / 53

Page 46: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Structure iterable –

I Une structure iterable est une structure qui contientplusieurs valeurs avec :

I une valeur initiale ;I une notion de valeur suivante ;

I Elle n’est pas necessairement ordonnee (cf. plus tard),mais Python sait comment la parcourir ;

I Les boucles sont souvent utilisees sur ces structuresiterables ;

46 / 53

Page 47: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Exemple de structure iterable : les chaınes –

I On connaıt deja un exemple de structure iterable : leschaınes de caracteres ;

I En effet :I la valeur initiale est le premier caractere de la chaıne ;I la valeur suivante est le caractere suivant celui qu’on est en

train de lire ;

47 / 53

Page 48: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Les range –

I La fonction range() renvoie un intervalle d’entiers ;I range(a, b) (avec a, b ∈ Z) est un iterable qui

commence a a et qui s’arrete avant b ;I range(a, b, c) (avec a, b, c ∈ Z) est l’iterable qui

commence a a et avance de c en c jusqu’a arriver en b(exclu) ;

Exemple>>> list(range(5)) # range(n) == range(0, n)[0, 1, 2, 3, 4]>>> list(range(1, 5, 2))[1, 3]>>> list(range(5, 0, -1))[5, 4, 3, 2, 1]

I Pour parcourir ces range, on a besoin des instructions deboucle ;

48 / 53

Page 49: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Les boucles for –

I L’instruction for permet de parcourir un iterable dupremier au dernier element ;

I L’ordre de parcours est determine par la structure ;

Syntaxe du for (≡ ∀ element ∈ iterable)for element in iterable:

# instruction 1 du for# instruction 2 du for# ...

# suite du programme

Organigrammeiterable vide? element← 1er element de iterable instructions du for

∃? element suivant

suite

element← element suivant

non

oui

non

oui

49 / 53

Page 50: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Faire une action n fois –

I L’association de for et de range facilite les repetitions :

Sans forprint(1)print(2)print(3)print(4)print(5)

Avec forfor i in range(1, 6):

print(i)

Comment afficher toutes les puissances de 2 jus-qu’a 22016 compris?

50 / 53

Page 51: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Utiliser la suite des valeurs d’un range –

I On peut egalement faire intervenir l’utilisateur dans le controledu nombre de repetitions :

Exemple (compter de 1 a n (compte.py))if __name__ == "__main__":

n = int(input('Entrez un nombre : '))for i in range(1, n + 1):

print(i)

51 / 53

Page 52: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Iterer sur une chaıne –

I Les chaınes sont egalement des structures iterables, etl’on peut donc aussi les manipuler a l’aide d’un for :

I Voici un exemple simple ; pour rappel :I voyelles = {'a', 'e', 'i', 'o', 'u', 'y'}I consonnes = {'b', 'c', 'd', ..., 'z'}

Exemple (compter les voyelles (voyelles.py))if __name__ == "__main__":

texte = input('texte : ')nombre_voyelles = 0voyelles = "aeiouyAEIOUY"for lettre in texte:

if lettre in voyelles:nombre_voyelles = nombre_voyelles + 1

print('il y a', nombre_voyelles, 'voyelles')

52 / 53

Page 53: Introduction a l’algorithmique et` a la` programmationigm.univ-mlv.fr/~alabarre/teaching/shnu/slides-shnu-01-handout.pdfI On utilise dans ce cours Python 3; attention, Python 2 n’est

– Tests et boucles –

La variable utilisee dans la boucle for estune copie de la valeur manipulee ;

I Ainsi, le code suivant ne modifie pas la chaıne de depart :>>> chaine = 'bonjour'>>> for lettre in chaine:... lettre = 'a'...>>> chaine'bonjour'

I Remarque : l’operateur in permet de faire deux choses :1. parcourir un iterable (avec un for) ;2. verifier si un element appartient a un iterable :

x in bla ≡ “x ∈ bla?”

53 / 53