M1 MEEF Second Degré Maths option Info - Introduction à ... · Introduction Généralites...

Preview:

Citation preview

Introduction

M1 MEEF Second Degré Maths option InfoIntroduction à Python et prise en main de l’environnement

Benjamin Wack (Benjamin.Wack@univ-grenoble-alpes.fr)

UFR IM2AG, Université Grenoble Alpes

septembre 2018

Remerciements : Stéphane Gonnord, Matthieu Moy, Marc de Falco

1 / 43

Introduction

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

2 / 43

IntroductionGénéralites

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

3 / 43

IntroductionGénéralites

Python : en quelques points

I Un langage de scriptI Langage interprété ( 6= langage compilé)I Typage Dynamique ( 6= typage statique)I Indentation significativeI Orientation objetI Gestion automatique de la mémoire (garbage collector)

4 / 43

IntroductionGénéralites

Bibliothèque standard Python

I http://docs.python.org/3/library/ : plus de 200packages (approche “batteries included”)

I Structures de données, manipulations de chaînes, ...I Manipulation de fichiers, bases de données, compression ...I Mathématiques (un peu dans la bibliothèque standard,

beaucoup d’autres modules optionnels)I Internet (web, email ...)I Interfaces graphiques, multimedia ...I ...

5 / 43

IntroductionGénéralites

Points forts, points faibles

I Dans la vraie vie :I Langage de haut niveau : on peut faire beaucoup avec peu de

codeI Typage dynamique ⇒ lent et gourmand en mémoire

(contournable)I Écosystème très fourniI Facile à apprendre, mais intéressant aussi pour des experts

I Pour la pédagogie :I Démarrage en douceurI Typage dynamique : discutableI Indentation obligatoire : vos élèves sont obligés d’écrire du

code propre (ou presque)

6 / 43

IntroductionGénéralites

Points forts, points faibles

I Dans la vraie vie :I Langage de haut niveau : on peut faire beaucoup avec peu de

codeI Typage dynamique ⇒ lent et gourmand en mémoire

(contournable)I Écosystème très fourniI Facile à apprendre, mais intéressant aussi pour des experts

I Pour la pédagogie :I Démarrage en douceurI Typage dynamique : discutableI Indentation obligatoire : vos élèves sont obligés d’écrire du

code propre (ou presque)

6 / 43

IntroductionGénéralites

Version 2.x vs 3.y

I Pourquoi est-ce important ?I Le code écrit en Python 2.7 ne marche pas toujours en 3.xI Quelques modules et bibliothèques ont mis du temps à être

portés en Python 3I Mais autant démarrer avec Python 3

I Principaux points d’achoppement :I Entrées / sortiesI Division euclidienne / flottante

I Concrètement, à l’UFR : lancer spyder3 et pas spyder

7 / 43

IntroductionGénéralites

Version 2.x vs 3.y

I Pourquoi est-ce important ?I Le code écrit en Python 2.7 ne marche pas toujours en 3.xI Quelques modules et bibliothèques ont mis du temps à être

portés en Python 3I Mais autant démarrer avec Python 3

I Principaux points d’achoppement :I Entrées / sortiesI Division euclidienne / flottante

I Concrètement, à l’UFR : lancer spyder3 et pas spyder

7 / 43

IntroductionInterprète

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

8 / 43

IntroductionInterprète

Python : premier contact

>>> 2 + 24

>>> le « prompt », ou « invite de commande »⇒ « Bonjour cher utilisateur, que dois-je faire ? »

2 + 2 instruction Python, entrée par l’utilisateur4 réponse de l’interprète Python après exécution.

Variante (IPython) :

In [1]: 2 + 2Out[1]: 4

9 / 43

IntroductionInterprète

Python : premier contact

>>> 2 + 24

>>> le « prompt », ou « invite de commande »⇒ « Bonjour cher utilisateur, que dois-je faire ? »

2 + 2 instruction Python, entrée par l’utilisateur4 réponse de l’interprète Python après exécution.

Variante (IPython) :

In [1]: 2 + 2Out[1]: 4

9 / 43

IntroductionInterprète

Python : premier contact

>>> 2 + 24

>>> le « prompt », ou « invite de commande »⇒ « Bonjour cher utilisateur, que dois-je faire ? »

2 + 2 instruction Python, entrée par l’utilisateur4 réponse de l’interprète Python après exécution.

Variante (IPython) :

In [1]: 2 + 2Out[1]: 4

9 / 43

IntroductionInterprète

Mémoire : les variables

I Les variables ne se déclarent pas.I Définition à la première affectation (mémorisé pour la session

en cours) :>>> x = 42>>> x = x + 1>>> x43>>> x += 1 # plus Pythonesque>>> x44>>> yTraceback (most recent call last):

File "<stdin>", line 1, in <module>NameError: name ’y’ is not defined

10 / 43

IntroductionInterprète

Concretement, c’est quoi un interprète ?Option 1 : ligne de commande

I On entre du texte, l’interprète répond avec du texteI Simple, mais peu convivial

11 / 43

IntroductionInterprète

Concretement, c’est quoi un interprète ?Option 2 : Un IDE (Spyder, Pyzo...)

I Toujours un interprète, toujours PythonI Plus d’interactivité

12 / 43

IntroductionInterprète

Types de données de base

I Entiers : 0, -4, 42, 12345678900000I Flottants : 0.0, 0.5, .5, -1., 1.2e+20

pas « 0,2 » !I Chaînes de caractères :

I "Bonjour"I ’Au revoir’I """Rebonjour"""I "Je vous dis \"bonjour\""I ’Je vous dis "au revoir"’

I Booléens : True et False

13 / 43

IntroductionInterprète

Les entiers

I Les opérations standards sur les entiers sont définies :+ - * // % ** (addition, soustraction, multiplication,quotient, reste, exponentiation).

I précision arbitraire

>>> 2 ** 128340282366920938463463374607431768211456>>> 37 // 312>>> 37 % 31

14 / 43

IntroductionInterprète

Les flottants

I Les opérations sur les flottants sont + - * / **>>> 3.2 + 1.14.3>>> 2.0 ** 0.51.4142135623730951

I précision, en général, 64-bits.I les nombres sont flottants, pas réels

>>> 0.1 + 0.1 + 0.1 - 0.35.551115123125783e-17>>> format(0.1, ’1.55’) # 55 decimales’0.1000000000000000055511151231257827021181583404541015625’

15 / 43

IntroductionInterprète

Opérations mixtes

I entier 2 flottant ⇒ flottant>>> 2 ** 600 - 0.14.149515568880993e+180

I la division simple / entre entiersI En Python 3 : division flottante

>>> 1 / 20.5

16 / 43

IntroductionInterprète

Booléens

I Deux valeurs True et FalseI opérateurs logiques : and or not

>>> False or not (True and False)True

I Relations de comparaisons == != < > <= >=

>>> 1 == (3 - 2)True>>> 1 > 2 ** 0.5False

17 / 43

IntroductionInterprète

Fonctions mathématiques

I Les fonctions mathématiques sont dans le module mathI Deux possibilités d’accès :

I Import du module et accès depuis le module>>> import math>>> math.sqrt(2.0)1.4142135623730951

I Import spécifique de la fonction et accès direct>>> from math import sqrt>>> sqrt(2.0)1.4142135623730951

18 / 43

IntroductionInterprète

Fonctions mathématiques

Listing des fonctions et constantes :

>>> import math>>> dir(math)[’__doc__’, ’__file__’, ’__name__’, ’__package__’, ’acos’,’acosh’, ’asin’, ’asinh’, ’atan’, ’atan2’, ’atanh’, ’ceil’,’copysign’, ’cos’, ’cosh’, ’degrees’, ’e’, ’erf’, ’erfc’,’exp’, ’expm1’, ’fabs’, ’factorial’, ’floor’, ’fmod’,’frexp’, ’fsum’, ’gamma’, ’hypot’, ’isfinite’, ’isinf’,’isnan’, ’ldexp’, ’lgamma’, ’log’, ’log10’, ’log1p’, ’modf’,’pi’, ’pow’, ’radians’, ’sin’, ’sinh’, ’sqrt’, ’tan’, ’tanh’,’trunc’]

Il y a de l’introspection sur les modules.

19 / 43

IntroductionInterprète

Aide embarquéeUn doute sur une fonction ?>>> help(math.ceil)Help on built-in function ceil in module math:

ceil(...)ceil(x)

Return the ceiling of x as an int.This is the smallest integral value >= x.

On peut même le faire directement sur le module pour avoir toutel’aide :>>> help(math)

Ce n’est pas réservé aux modules/fonctions fournis.20 / 43

IntroductionInterprète

Petits exercices

I Évaluez les expressions suivantes :I 1.0 + 1I "Bonjour " + "a tous"I "Bonjour" + 10I 2 == 2I 2 == 3I (1 == 2) == (3 == 4)

21 / 43

IntroductionInterprète

Types et conversions

I Pour récupérer le type :>>> type(2)<class ’int’>>>> type(3.2)<class ’float’>

I Ces valeurs sont manipulables :>>> type(2) == type(3.2)False

I Pour convertir une valeur dans un autre type :>>> str(3.14)’3.14’>>> int(’42’)42

22 / 43

IntroductionProgrammes

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

23 / 43

IntroductionProgrammes

Mode exécution de scriptCette fois :

I On tape son programme dans un éditeur (inclus dans l’IDE)I On l’enregistre dans un fichierI L’interpréteur « exécute » ce fichier

À retenir : on tapeI Dans l’éditeur :

I les fonctions/programmesI toutes les opérations qu’on veut pouvoir sauverI copy/paste de résultats (interpréteur) commentés

I Dans l’interpréteur :I des petits calculs n’ayant pas vocation à être sauvésI les tests d’un programme écrit par ailleursI une suite d’instructions pour comprendre différents

comportements

24 / 43

IntroductionProgrammes

Mode exécution de scriptCette fois :

I On tape son programme dans un éditeur (inclus dans l’IDE)I On l’enregistre dans un fichierI L’interpréteur « exécute » ce fichier

À retenir : on tapeI Dans l’éditeur :

I les fonctions/programmesI toutes les opérations qu’on veut pouvoir sauverI copy/paste de résultats (interpréteur) commentés

I Dans l’interpréteur :I des petits calculs n’ayant pas vocation à être sauvésI les tests d’un programme écrit par ailleursI une suite d’instructions pour comprendre différents

comportements

24 / 43

IntroductionProgrammes

Mode exécution de scriptCette fois :

I On tape son programme dans un éditeur (inclus dans l’IDE)I On l’enregistre dans un fichierI L’interpréteur « exécute » ce fichier

À retenir : on tapeI Dans l’éditeur :

I les fonctions/programmesI toutes les opérations qu’on veut pouvoir sauverI copy/paste de résultats (interpréteur) commentés

I Dans l’interpréteur :I des petits calculs n’ayant pas vocation à être sauvésI les tests d’un programme écrit par ailleursI une suite d’instructions pour comprendre différents

comportements

24 / 43

IntroductionProgrammes

Premier programme avec entrées-sorties

I Entrons le programme suivant dans l’éditeur :

x = input (’Quel est votre nom ? ’)print (’Bonjour , ’ + x)

I Exécutons-le (plusieurs fois)

print() fait une sortie à l’écran, à ne pas confondre avecl’affichage du résultat qui est fait par défaut dans l’interprète.

25 / 43

IntroductionProgrammes

Les entrées / sorties

I La saisie clavier :# Lire une chainestr = input (" Entrez une chaine : ")

# Lire un entier ( lecture de chaine puis conversion )nb = int(input (" Entrez un nombre : "))

I Affichage :print ("toto")print (42)print ("toto ", 42)

I Il y a une conversion automatique des arguments en str.

26 / 43

IntroductionConstructions

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

27 / 43

IntroductionConstructions

Condition : if/then/else

I Si alorsx = 43if x == 42: # ne pas oublier le ’:’

print ("x vaut 42")print ("et pas autre chose")

# Fin de l’indentation = fin du ifprint ("Suite du programme ")

I Si alors sinonif x == 42:

print ("x vaut 42")else:

print ("x vaut autre chose")

28 / 43

IntroductionConstructions

Condition : if/then/else

I Tests imbriqués

if x == 42:print ("x vaut 42")

elif x == 43:print ("x vaut quarante trois")

else:print ("x vaut autre chose")

29 / 43

IntroductionConstructions

Boucles

I Boucle conditionnelle (classique)while x <= 42:

x = x + 1

I Boucle inconditionnelle (particulière en Python, mais à l’usageplus pratique à utiliser)for variable in iterable :

instructionsI Qu’est-ce qu’un itérable ?

Liste, chaîne... :s = 0for e in [1 ,2 ,3]:

s += efor c in ’abc ’:

print (c)

30 / 43

IntroductionConstructions

Boucles

I Boucle conditionnelle (classique)while x <= 42:

x = x + 1I Boucle inconditionnelle (particulière en Python, mais à l’usage

plus pratique à utiliser)for variable in iterable :

instructions

I Qu’est-ce qu’un itérable ?Liste, chaîne... :s = 0for e in [1 ,2 ,3]:

s += efor c in ’abc ’:

print (c)

30 / 43

IntroductionConstructions

Boucles

I Boucle conditionnelle (classique)while x <= 42:

x = x + 1I Boucle inconditionnelle (particulière en Python, mais à l’usage

plus pratique à utiliser)for variable in iterable :

instructionsI Qu’est-ce qu’un itérable ?

Liste, chaîne... :s = 0for e in [1 ,2 ,3]:

s += efor c in ’abc ’:

print (c) 30 / 43

IntroductionConstructions

Cas particulier avec les boucles for

I Parcourir les nombres de 0 a N − 1 :for i in range (10):

print (i)# Affiche les nombres de 0 a 9 inclus

I Parcourir les nombres de M à N − 1 :for i in range (7, 10):

print (i)# 7# 8# 9

I Avec un pas :for i in range (0, 10 ,2):

print (i)# Affiche 0, 2, 4, 6, 8 31 / 43

IntroductionConstructions

Fonctions

def nom_de_la_fonction (param1 , param2 ):corps de la fonctionindent é...return valeur_a_renvoyer

En Python :I il est optionnel et sans effet d’annoter les arguments par leurs

types ;I on ne déclare pas non plus de type de retour pour la fonction.

def addition (a, b):return a + b

x = addition (42, 3)x = addition (x, 1)

32 / 43

IntroductionConstructions

Fonctions

def nom_de_la_fonction (param1 , param2 ):corps de la fonctionindent é...return valeur_a_renvoyer

En Python :I il est optionnel et sans effet d’annoter les arguments par leurs

types ;I on ne déclare pas non plus de type de retour pour la fonction.

def addition (a, b):return a + b

x = addition (42, 3)x = addition (x, 1)

32 / 43

IntroductionConstructions

Fonctions

def nom_de_la_fonction (param1 , param2 ):corps de la fonctionindent é...return valeur_a_renvoyer

En Python :I il est optionnel et sans effet d’annoter les arguments par leurs

types ;I on ne déclare pas non plus de type de retour pour la fonction.

def addition (a, b):return a + b

x = addition (42, 3)x = addition (x, 1) 32 / 43

IntroductionConstructions

Disposition du code

I Les fin de lignes sont importantesx = 42 # OKx = # Interdit !

42I Coupage possible à l’intérieur des parenthèses :

x = (1 + 2 + 3 + 4 + 5 + # OK6 + 7 + 8 + 9 + 10)

I Mettre plusieurs instructions sur une ligne (à éviter) : « ; »x = 42; print (x)

I Affectation multiple simultanéex, y = 14, 42

x, y = y, x

33 / 43

IntroductionConstructions

Disposition du code

I Les fin de lignes sont importantesx = 42 # OKx = # Interdit !

42I Coupage possible à l’intérieur des parenthèses :

x = (1 + 2 + 3 + 4 + 5 + # OK6 + 7 + 8 + 9 + 10)

I Mettre plusieurs instructions sur une ligne (à éviter) : « ; »x = 42; print (x)

I Affectation multiple simultanéex, y = 14, 42

x, y = y, x33 / 43

IntroductionConstructions

Pour insister sur quelques pièges

I Essayez le programme suivant :a = 0print ("Je vais compter ")while a <= 10:

print (a)a = a + 1

print ("C’est fini")I Que se passe-t-il si on remplace print(a) par simplement a ?

⇒ ça n’affiche plus rien !I Et si on indente la ligne print("C’est fini") de 4

espaces ?⇒ le print rentre dans la boucle.

L’indentation compte (même indentation avant print(a) et avanta = a + 1, de préférence 4 espaces)

34 / 43

IntroductionConstructions

Pour insister sur quelques pièges

I Essayez le programme suivant :a = 0print ("Je vais compter ")while a <= 10:

print (a)a = a + 1

print ("C’est fini")I Que se passe-t-il si on remplace print(a) par simplement a ?⇒ ça n’affiche plus rien !

I Et si on indente la ligne print("C’est fini") de 4espaces ?⇒ le print rentre dans la boucle.

L’indentation compte (même indentation avant print(a) et avanta = a + 1, de préférence 4 espaces)

34 / 43

IntroductionConstructions

Pour insister sur quelques pièges

I Essayez le programme suivant :a = 0print ("Je vais compter ")while a <= 10:

print (a)a = a + 1

print ("C’est fini")I Que se passe-t-il si on remplace print(a) par simplement a ?⇒ ça n’affiche plus rien !

I Et si on indente la ligne print("C’est fini") de 4espaces ?

⇒ le print rentre dans la boucle.

L’indentation compte (même indentation avant print(a) et avanta = a + 1, de préférence 4 espaces)

34 / 43

IntroductionConstructions

Pour insister sur quelques pièges

I Essayez le programme suivant :a = 0print ("Je vais compter ")while a <= 10:

print (a)a = a + 1

print ("C’est fini")I Que se passe-t-il si on remplace print(a) par simplement a ?⇒ ça n’affiche plus rien !

I Et si on indente la ligne print("C’est fini") de 4espaces ?⇒ le print rentre dans la boucle.

L’indentation compte (même indentation avant print(a) et avanta = a + 1, de préférence 4 espaces) 34 / 43

IntroductionConstructions

Exercice : somme des N premiers entiers

I Écrire un programme qui calcule la somme des entiers de 0 àN (sans utiliser N(N + 1)/2, ça serait de la triche !)

n = int( input(" Entrer N : "))

sum = 0for i in range(n + 1):

sum = sum + i

print ("La somme des entiers de 0 a",n, "est :", sum)

35 / 43

IntroductionConstructions

Exercice : somme des N premiers entiers

I Écrire un programme qui calcule la somme des entiers de 0 àN (sans utiliser N(N + 1)/2, ça serait de la triche !)

n = int( input (" Entrer N : "))

sum = 0for i in range(n + 1):

sum = sum + i

print ("La somme des entiers de 0 a",n, "est :", sum)

35 / 43

IntroductionDivers

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

36 / 43

IntroductionDivers

Les commentaires

I Tout ce qui suit un # sur une ligne est ignoré par l’interprète :

a = 0 # initialisation de aprint ("Je vais compter ")while a <= 10: # blablabla

print (a) # encore du blablaa = a + 1

print ("C’est fini")

I Très utile pour s’y retrouver dans le code

37 / 43

IntroductionDivers

Les erreurs à l’exécutionI Mettez en commentaire ou supprimez l’initialisation de a :

# a = 0print ("Je vais compter ")while a <= 10:

print(a)a = a + 1

print ("C’est fini")

I Il peut se passer deux choses :I Notre éditeur de texte peut nous avertir que quelque chose ne

va pas (les versions récentes de Spyder le font).I Si on exécute le programme, on obtient une erreur à

l’exécution (après le premier affichage) :Je vais compterTraceback (most recent call last):

File "/tmp/hello.py", line 9, in <module>while a <= 10:

NameError: name ’a’ is not defined

38 / 43

IntroductionDivers

Les erreurs à l’exécutionI Mettez en commentaire ou supprimez l’initialisation de a :

# a = 0print ("Je vais compter ")while a <= 10:

print(a)a = a + 1

print ("C’est fini")I Il peut se passer deux choses :

I Notre éditeur de texte peut nous avertir que quelque chose neva pas (les versions récentes de Spyder le font).

I Si on exécute le programme, on obtient une erreur àl’exécution (après le premier affichage) :Je vais compterTraceback (most recent call last):

File "/tmp/hello.py", line 9, in <module>while a <= 10:

NameError: name ’a’ is not defined38 / 43

IntroductionDivers

Les erreurs de syntaxe

I Supprimez maintenant les « : » de la boucle while :

a = 0print ("Je vais compter ")while a <= 10 # plus de :

print (a)a = a + 1

print ("C’est fini")

I Cette fois-ci, on obtient l’erreur avant le début de l’exécution(même "Je vais compter" n’est plus affiché).

39 / 43

IntroductionBonus

Plan

Généralités sur le langage Python

Premiers pas avec l’interprète python

Écriture de programmes dans des fichiers

Constructions et structures de données de base

Divers

Bonus

40 / 43

IntroductionBonus

Exercice : Calcul de racine carrée par méthode de Héron(cas particulier de méthode de Newton)

xn+1 = xn −f (xn)

f ′(xn)avec f (x) = x2 − a

xn+1 = xn −x2

n − a2xn

xn+1 =xn + a/xn

2

41 / 43

IntroductionBonus

Racine carrée, solution 1Nombre d’itérations fixe

import math # Pour pouvoir utiliser math.sqrt ()

a = int(input (" Racine de ? "))

g = afor i in range (10):

g = (g + (a / g)) / 2.0# decommenter pour voir la progression# print(g)

print (g, " devrait etre =", math.sqrt(a))

42 / 43

IntroductionBonus

Racine carrée, solution 2Contrôle de la précision

import math # Pour pouvoir utiliser math.sqrt ()

a = int(input (" Racine de ? "))

g = awhile abs(g ** 2 - a) > 0.0001:

g = (g + (a / g)) / 2.0# decommenter pour voir la progression# print(g)

print (g, " devrait etre =", math.sqrt(a))

43 / 43