Exercices Pythonv3
Exercices Pythonv3
2 Programmation et conjectures 11
Np j
P
−∞
Z
ϕ(x)dPX (x)
PBi (A)P(Bi )
2π
1
√
X
i ∈I
p (1 − p)n−k
Z
P(A) =
E(ϕ(X )) =
n k
!
1.1 Activité : module turtle pour introduire python 6 Cristal 7 Cristal (2) Tracer le cristal ci-
Niveau : * Tracer le cristal ci-dessous. Les dessous. Les grands segments
grands segments mesurent 300 mesurent 300 pixels, les petits
Python est un langage de programmation dont la syntaxe est particulière-
pixels, les petits 150. 150.
2
ment simple, il est très puissant et très utilisé (le créateur de ce langage
travaillait chez Google et maintenant chez dropbox. La Nasa l’utilise aussi,
pN − j N
pour ne citer qu’eux !). Pour vous familiariser avec le langage Python,
jp
N
2 Carré 3 Carrés
Tracer la figure ci-dessous.
1 = xd 2/
Z
) x( XPd) x(ϕ
) iB(P)A( iBP
π2
1
√
Le carré fait 100 pixels de côté. Le carré fait 100 pixels de côté.
k−n
Z
= )A(P
) p − 1( k p
= )) X(ϕ(E
!
12 Réaliser le dessin ci-dessous à l’aide du module turtle : 17 Ecrire un programme qui dessine un carré de coté 100 "plein"
j =1
P
→ N (0, 1)
X −µ
PBi (A)P(Bi )
2π
1
√
X
i ∈I
p (1 − p)n−k
Z
P(A) =
E(ϕ(X )) =
n k
1.2 Mise en place de l’activité Je passe directement sur l’exercice 8 après l’exercice 5 lorsque la
totalité des élèves à réussi le 5
Objectifs
— Les exercices 8 à 11 imposent aux élèves une recherche de l’angle.
Cette activité est la première que je propose en Python au mois de sep- Certains trouvent directement la bonne formule mais la majorité
tembre depuis quelques années. procède par tatonnement et s’agace de devoir modifier toutes leurs
Elle a comme vocation de présenter la syntaxe python, la programmation lignes de code. J’en profite pour leur présenter l’affectation (angle =
séquentielle et textuelle. 37...).
2
Elle incite l’élève à demander de manière implicite la syntaxe de la boucle — L’exercice 11 voit les élèves faire un polygône à 360 côtés en
pN − j N
itérative et de l’instruction conditionnelle et montre l’intérêt de l’affectation. général. Certains me demandent si il n’y a pas moyen de faire
jp
Elle permet également une diversification en fonction des demandes des "répéter". Les autres s’agaçant de devoir faire un copier coller me
N
élèves : possibilité de présenter la syntaxe d’une fonction (sans para- permet de leur présenter alors la syntaxe de la boucle itérative.
p̂
mètres) ainsi que la syntaxe d’une fonction avec paramètres pour ceux qui Certains "petits malins" trouve l’instruction circle. Je leur demande
m’en font la demande. alors de voir si il n’en existe pas une pour faire un carré. Après
X
1= j
le cas.
P
Je l’utilise pour tout niveau pour des élèves n’ayant jamais rencontrés — L’exercice 12 me permet de leur montrer la syntaxe d’une procé-
)1 ,0( N →
Python. dure/fonction (sans paramètre) afin de créer une telle fonction par
Il me faut en général 2H pour arriver à faire émerger les notions. nous même. Je présente la possibilité de mettre des arguments aux
Déroulement de l’activité élèves qui m’en font la demande.
— Les exercices 13 et 14 permettent de montrer l’intérêt d’une fonction
µ− X
à paramètre.
laisse aller à leur rythme. C’est l’occasion de revenir sur les exercices demandant de tra-
1 = xd 2/
— Les exercices 2 et 3 leur permet de rentrer dans le logiciel et de cer des polygônes et de montrer que le carré, le décagone etc...
prendre en main python. Ils sont tapés directement, instruction par Peuvent s’hériter de la fonction suivante :
instruction, dans l’interpréteur. A ce stade, je ne leur montre pas
def polygone(n,cote) :
2
angle = 360/n
la diagonale par tatonnement avant d’arriver à mobiliser Pythagore. for k in range(n) :
Z
) x( XPd) x(ϕ
forward(cote)
) iB(P)A( iBP
left(angle)
1
boucle de répétition.
au début.
— L’exercice 15 introduit la double boucle pour
— Les exercices 6 et 7 me servent à faire "attendre" les élèves perfor-
— L’exercice 16 permet d’introduire la syntaxe d’une instruction condi-
!
mants.
n
k
tionnelle.
— Les exercices suivants me permettent de donner des exercices un
Maxime Fourny
peu défi à certains élèves performants.
Retour : table des matières
Académie de Franche-Comté
5/20
m.a.j : 13 novembre 2017
α − 1 ' α,1− 2Jχ 6 j TD Retour : table des matières m.a.j : 13 novembre 2017
forward(100) left(90)
left(90)
pN − j N
forward(100)
forward(100) left(90)
jp
left(90)
N
forward(100)
left(90)
Correction exercice 4 up()
p̂
forward(15+100)
left(45) down()
X
1= j
forward(100)
J
forward(100)
)1 ,0( N →
left(90) forward(100)
forward(100) left(90)
left(90) forward(100)
forward(100) left(90)
left(90) forward(100)
µ− X
left(90)
σ
Les élèves partent en général d’une syntaxe comme celle ci pour l’hexa-
gone color("red")
for k in range(10) :
forward(100) carre()
2
left(60) up()
x−
forward(100) forward(15+100)
e
left(60)
∞+
down()
∞−
forward(100)
left(60) Voir :
Z
) x( XPd) x(ϕ
) iB(P)A( iBP
forward(100)
π2
Mon objectif est d’arriver à les faire arriver à quelque chose comme cela for k in range(10) :
k−n
carre()
Z
) p − 1( k p
up()
= )) X(ϕ(E
forward(longueur)
n
k
left(angle)
def carre(cote) :
down()
carre(50)
Np̂j − Npj
up()
Np j
forward(50+15)
down()
Correction exercice 14
X
j =1
for k in range(1,10) :
J
carre(10*k)
P
up()
→ N (0, 1)
forward(10*k+15)
down()
Correction exercice 15
X −µ
for i in range(10) :
σ
for j in range(10) :
carre(20)
dx = 1
up()
forward(20+5)
down()
−x 2 /2
up()
backward(250)
right(90)
e
+∞
forward(20+5)
−∞
left(90)
Z
down()
ϕ(x)dPX (x)
PBi (A)P(Bi )
2π
Correction exercice 16
1
√
for i in range(10) :
for j in range(10) :
if i == 3 and j == 7 :
X
i ∈I
color("red")
p (1 − p)n−k
else :
Z
P(A) =
color("black")
E(ϕ(X )) =
carre(30)
up()
forward(30+5)
n k
down()
!
up()
backward(350)
au lycée. En effet, outre leur utilisation au niveau mondial, ils répondent Les élèves en arrivant au lycée vont donc être amenés à devoir apprendre
particulièrement bien aux attendus du programme comme on le voit ci- un nouveau logiciel. Cet apprentissage ne peut se faire qu’en utilisant ce
pN − j N
dessous : qu’ils ont déjà rencontrés puis construire leur apprentissage en ciblant
jp
N
— Notions d’algorithme et de programme. Un paradigme en général est une vision du monde qui oriente notre
P
mation
La démarche algorithmique est, depuis les origines, une composante
1 = xd 2/
Scracth :
∞−
— Sur le fond :
π2
programmation impérative
√
= )) X(ϕ(E
programmation simple d’usage est nécessaire pour l’écriture des — Sur le fond :
programmes. Le choix du langage se fera parmi les langages Programmation impérative/procédurale
interprétés, concis, largement répandus, et pouvant fonctionner programmation fonctionnelle
!
dans une diversité d’environnements. programmation événementielle possible mais pas de prime abord
n
k
1.4.2 Savoir d’où l’on vient . . . Une séquence d’instructions où une procédure peut être déclenchée
par un événement (appui d’une touche, clic de souris, son reçu par
Définition (Paradigme de Scracth). le micro, ...)
La programmation évènementielle permet de prévoir de l’interactivité
Scratch est un langage de programmation visuelle et dynamique. avec l’utilisateur en cours d’exécution du programme.
Au premier contact l’élève est amené à faire de la programmation
programmation parallèle :
impérative puis de la programmation procédurale.
2
Il permet également de pratiquer la programmation évènementielle La programmation parallèle consiste à exécuter en même temps plu-
Np̂j − Npj
et parallèle assez facilement. sieurs instructions (ce que ne permet pas la programmation séquen-
tielle). Cela est possible ici gràce à la programmation événementielle
Np j
P
→ N (0, 1)
Sous Scratch les concepts de base de la programmation tels que les Relecture du programme du collège :
boucles, les tests, les affectations de variables sont mises en oeuvre
dx = 1
il est possible de modifier le code du programme en cours d’exécu- — Notions d’algorithme et de programme.
tion. — Notion de variable informatique.
e
Programmation impérative/séquentielle :
−∞
On voit donc que Scratch est particulièrement bien indiqué pour répondre
PBi (A)P(Bi )
2π
d’instructions exécutées les unes après les autres. Un seul instruction aux attendus du programme de collège.
1
√
cédures.
Z
P(A) =
Une procédure est une encapsulation d’une séquence d’instructions. Python est un langage de programmation objet, multi-paradigme et
E(ϕ(X )) =
L’intérêt est qu’elle peut être réutilisée à différents emplacements multiplateformes. Il favorise la programmation impérative, fonction-
dans le programme sans avoir à retaper en mode "copier-coller" une nelle et orientée objet. Il est doté d’un typage dynamique fort, Il est
n k
séquence d’instructions.
k
programmation événementielle :
Programmation textuelle :
— Programmation visuelle
L’algorithme s’écrit dans un bloc note. Une ligne constitue générale-
p̂
Programmation fonctionnelle :
)1 ,0( N →
— Paradigme (programmation)
Une fonction ressemble à une procédure à la différence fondamen-
tale qu’elle permet de renvoyer une valeur : nombre, chaine de
caractères, liste...
µ− X
— Programmation procédurale
1
Bien sûr il ne faut pas formaliser ces différents paradigmes avec les élèves,
√
— Programmation fonctionnelle
Z
= )A(P
) p − 1( k p
élèves.
3. Faire prendre conscience à nos élèves des ces différentes notions
!
— Programmation événementielle
2 divisibilité
J
P
nombre.
3. Justifier pourquoi cette fonction, pourtant utile, n’est pas pertinente.
σ
sur 1.
e
Définition (Suite de Syracuse (source : wikipedia)). Expliquer le danger d’une telle fonction ?
+∞
−∞
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. 5. Démontrer la suite de Syracuse pour les nombres de 1 à 10 000.
En répétant l’opération, on obtient une suite d’entiers positifs dont Peux-t-on démontrer que la conjecture de Syracuse est vraie pour
chacun ne dépend que de son prédécesseur. tous les nombres de cette manière ?
X
i ∈I
p (1 − p)n−k
P(A) =
E(ϕ(X )) =
1. Donner les premiers termes de la suite de syracuse si l’on part de 14. de ce nombre.
!
3. Etant donné un nombre entier n passé en paramètre, écrire une 1. Parmi les nombres entiers de 1 à 10 000 quel est celui qui a le temps
fonction qui calcule les termes de la suite jusqu’à ce que l’on tombe de vol le plus élevé. Que vaut-il ?
sur 1. 2. Parmi les nombres entiers de 1 à 10 000 quel est celui qui a le temps
Expliquer le danger d’une telle fonction ? de vol en altitude le plus élevé. Que vaut-il ?
4. Etant donné un nombre entier n passé en paramètre, écrire une 3. Parmi les nombres entiers de 1 à 10 000 quel est celui qui a l’altitude
fonction qui indique si la conjecture de Syracuse est vérifiée pour ce maximale la plus élevé. Que vaut-elle ?
2
nombre.
Défi : autres conjectures célèbres
pN − j N
A l’heure d’aujourd’hui cette conjecture est démontrée pour tous les entiers Il n’existe pas de nombres entiers non nuls x , y et z tels que :
X
7 le temps de vol xn + yn = zn
P
8 Le temps de vol en altitude Cette conjecture appelée conjecture de Fermat a été démontré par Wiles il
le temps de vol en altitude d’un entier est la longueur de la trajectoire où y a une vingtaine d’année, soit 4 siècles après Fermat. Cette démonstration
tous les nombres sont plus grand que l’entier de départ. ne tient pas dans la marge.
2
Cette conjecture avait été généralisé par Euler sous la formulation suivante
x−
:
∞+
x4 + y 4 + z4 = t4
√
9 L’altitude maximale
l’altitude maximale d’un entier est la valeur maximale prise par la suite de 11 En partant du principe que t > x > y > z , démontrer que cette
Syracuse de cet entier conjecture est fausse.
X
I∈ i
k−n
) p − 1( k p
= )) X(ϕ(E
2. Programmer une fonction qui renvoie l’altitude maximale d’un entier exemple qui a infirmé cette conjecture a été donné en 1966
passé en paramètre.
Pour aller plus loin sur Syracuse
!
n
k
10 Le plus grand ?
2.2 Mise en place de l’activité — L’exercice 11 sert à illustrer que l’on peut infirmer une conjecture.
Ici il est bien sur inconcevable de demander cela à tous les élèves.
Objectifs
Il est tout à fait possible d’améliorer la vitesse du programme en
Cette activité à pour but de faire travailler la syntaxe fonctionnelle aux améliorant les majorations. Il faut toutefois plusieurs heures pour
élèves. Elle permet également de travailler l’instruction conditionnelle la qu’il réponde :
boucle itérative et la boucle conditionnelle.
Elle n’est pas dénué d’intérêt mathématiques car elle traite les suites mais 958004 + 2175194 + 4145604 = 4224814
2
niveau
Elle peut se traiter en classe de seconde (plutôt vers la fin de l’année) mais
également en première et terminale. Il faut plusieurs heures si l’on veut la
X
j =1
traiter intégralement.
J
Déroulement de l’activité
P
→ N (0, 1)
−∞
PBi (A)P(Bi )
2π
programmes de première ? ? ? ?)
1
√
i ∈I
la même fonction à utiliser si l’on accepte que l’on peut passer une
!
2.3 Correction Python Comme on ne sait pas si la conjecture est vraie, il est possible que le pro-
gramme ne termine jamais. En tout état de cause, même si le programme
Correction exercice 2
ne termine pas, on ne peut pas savoir si l’on a un contre exemple ou si
def pair(n) :
c’est qu’il reste à des valeurs supérieurs à 1.
if n%2 == 0 : def preuve_partielle(nombre) :
return True for k in range(nombre) :
else : retour_un(nombre)
2
14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2. . . def temps_vol(nombre) :
X
compteur = 0
1= j
Correction exercice 4
J
nombre = syracuse(nombre)
Après 27 : 82 et après 32 : 16. compteur = compteur +1
)1 ,0( N →
compteur = 0
Correction exercice 5 et 6
1 = xd 2/
depart = nombre
while nombre>=depart :
def trajectoire_seconde(nombre,longueur) : nombre = syracuse(nombre)
for k in range(longueur) : compteur = compteur +1
return compteur
2
nombre = syracuse(nombre)
x−
return nombre
e
Correction exercice 9
∞+
∞−
def altitude_maximale(nombre) :
) x( XPd) x(ϕ
def trajectoire(nombre,longueur) :
) iB(P)A( iBP
π2
for k in range(longueur) :
nombre = syracuse(nombre) nombre = syracuse(nombre)
traj.append(nombre) if nombre > maxi :
return traj maxi = nombre
return maxi
X
I∈ i
def retour_un(nombre) :
k−n
Correction exercice 10
Z
) p − 1( k p
"""
= )) X(ϕ(E
for k in range(1,nombre) :
n
k
valeur = temps_vol(k)
if valeur >maxi :
maxi = valeur
n_max = k
return k,maxi
def max_vol_altitude(nombre) :
maxi =0
n_max = 0
for k in range(2,nombre) :
2
valeur = vol_altitude(k)
Np̂j − Npj
if valeur >maxi :
maxi = valeur
Np j
n_max = k
return k,maxi
def max_altitude_maximale(nombre) :
maxi =0
X
j =1
n_max = 0
J
for k in range(1,nombre) :
P
valeur = altitude_maximale(k)
→ N (0, 1)
if valeur >maxi :
maxi = valeur
n_max = k
return k,maxi
X −µ
def max_fonction(nombre,fonction) :
σ
maxi =0
dx = 1
n_max = 0
for k in range(2,nombre) :
valeur = fonction(k)
if valeur >maxi :
−x 2 /2
maxi = valeur
n_max = k
e
return k,maxi
+∞
−∞
Correction exercice 11
Z
ϕ(x)dPX (x)
PBi (A)P(Bi )
2π
1
√
def conjecture_Euler() :
t = 1
while 1 :
for x in range(1,t+1) :
for y in range(1,t+1) :
X
i ∈I
for z in range(1,t+1) :
p (1 − p)n−k
if x**4+y**4+z**4 == t**4 :
Z
P(A) =
return (x,y,z,t)
E(ϕ(X )) =
n k
!
3 Tracé de courbes : introduction à matplotlib Pendant que Averel est encore en train de manger avec Ma, Joe, Jack et
William se trouve dans un champ et ne bouge pas. (ils forment donc un
et numpy triangle).
Rantanplan se trouve n’importe où dans le même champ. (dans le tri-
3.1 Activité : Tracè de courbes angle ou en dehors, peu importe). Simultanément, les trois frères Dalton
1 Calculs appellent Rantanplan. De manière équiprobable, le célèbre chien choisit
un des trois lascars au hasard et se dirige vers lui. Arrivé à la moitié du
2
1. Effecteur les deux calculs suivants : chemin, il fait un trou et comme il a une mémoire de poisson rouge, il
pN − j N
2 + 157 ∗ 0.05 3.11 + 2.08 Les trois frères l’appellent simultanément à nouveau, et à nouveau Ran-
N
tanplan choisit un des trois loustics au hasard et se dirige vers lui. Arrivé à
p̂
2. Effectuer ces calculs avec python la moitié du chemin il fait un trou et comme bla bla bla poisson rouge bla
bla bla,
X
1= j
7 Recherche de racines
plot(x,y,"o")
1 = xd 2/
1. Tracer la courbe représentative de la fonction f (x ) = 2x 2 − 2x + 3 2. Écrire un algorithme permettant d’encadrer la racine de la fonction f
e
2. Tracer la courbe représentative de la fonction f (x ) = 2x 2 − 2x + 3 3. Écrire un algorithme permettant d’encadrer la racine de la fonction f
Z
) x( XPd) x(ϕ
) iB(P)A( iBP
sur [−4; 4]
I∈ i
n 1
k−n
X 1 X 1
Z
et
= )A(P
) p − 1( k p
k =1 k =n
2x − 1
Tracer la courbe représentative de la fonction g (x ) = sur [−4; 4] P1000
x +3 2. Calculer k =1 x avec x = 0.5, x = 0.25 et x = 0.1
!
Rantanplan 3. Programmer la suite de Muller (on admettre qu’elle converge vers 6).
n
k
5 Rantanplan
3.2 Mise en place de l’activité copier coller de l’exerecice précédent et modifier la fonction.
Voici le premier programme proposé par un élève n’ayant pas re-
Objectifs
marqué à priori la valeur interdite :
Cette activité peut être proposé relativement tôt en classe de seconde. def ex4_v1() :
Elle introduit deux modules fondamentals : matplotlib.pyplot pour le tracé for x in arange(-4,4,0.01) :
de courbes et la géométrie cartésienne ainsi que numpy pour du calcul y = (2*x-1)/(x+3)
plot(x,y,"o")
scientifique plus élaboré.
2
show()
Elle ne cache pas le fait que python ne peut que calculer en valeur appro-
Np̂j − Npj
Déroulement de l’activité
— L’exercice 1 sert à illustrer que python ne calcule qu’en valeur
approcchée avec les nombres décimaux.
X
j =1
intelligent que lui, je lui propose de faire ces deux calculs, puis de
P
Irakien Scud. Bilan : 28 morts. L’explication est pourtant banalement simple problème de la valeur interdite subsiste. Cet algorithme pourtant
: l’anti-missile Patriot incrémentait un compteur toutes les 0.1 secondes juste ne donne pas le résultat escompté.
−x 2 /2
avec 0.1 approché avec erreur 0.0000000953 . Au bout de 100 heures, def ex4_v2() :
l’erreur cumulée était de 0.34s. Dans ce laps de temps le Scud parcourt for x in arange(-4,4,0.01) :
e
if x !=-2 :
500 mètres...
+∞
y = (2*x-1)/(x+3)
−∞
show()
PBi (A)P(Bi )
2π
i ∈I
P(A) =
La question 3.4 sert à montrer que l’on ne peut pas par défaut
E(ϕ(X )) =
mettre de pas décimaux. Ce qui est étonnant pour les élèves qui ne
comprennenet pas pourquoi. Il faut alors leur montrer le arange du
n k
module numpy.
!
show()
pN − j N
jp
N
p̂
X
1= j
J
P
)1 ,0( N →
1
parallèle avec qui devient "décimal" en base 3.
1 = xd 2/
3
— Je traite les exercice 5 et 6 en fin d’année. C’est l’occasion pour
moi de voir ou les élèves en sont. (instruction conditionnelle dans
une boucle itérative et module random). Et mathématiquement, la
2
x−
figure est joli ! On peut s’apercevoir que le cas n=3 est atypique.
e
k−n
Z
= )A(P
) p − 1( k p
= )) X(ϕ(E
!
n
k
Version prof :
def ex4_vprof() :
for x in arange(-4,4,0.015625) :
if x !=-2 :
2
y = (2*x-1)/(x+3)
Correction exercice 3
Np̂j − Npj
plot(x,y,"o")
show()
Np j
def ex3_1() :
for x in range(-1000,1000) : Correction exercice 5 et 6
y = 2*x**2-2*x+3
plot(x,y,"o") Version élève :
show()
X
j =1
def rantanplan_eleve(n) :
J
x_joe = 0
def ex3_2() :
P
y_joe = 0
for x in range(-10000,10000,10) :
→ N (0, 1)
x_jack = 1
y = 2*x**2-2*x+3
y_jack = 0
plot(x,y,"o")
x_william = 0.5
show()
y_william = 0.7
x_rantanplan = 1
X −µ
plot(x,y,"o") plot(x_william,y_william,"o",color="blue")
show() plot(x_rantanplan,y_rantanplan,"o",color="red")
for k in range(n) :
−x 2 /2
y_rantanplan = (y_rantanplan+y_jack)/2
1
else :
√
Correction exercice 4
x_rantanplan = (x_rantanplan+x_william)/2
Version 1 de l’élève : y_rantanplan = (y_rantanplan+y_william)/2
plot(x_rantanplan,y_rantanplan,"o",color="red")
def ex4_v1() : show()
X
i ∈I
for x in arange(-4,4,0.01) :
Version prof :
p (1 − p)n−k
y = (2*x-1)/(x+3)
Z
P(A) =
plot(x,y,"o")
def rantanplan_prof(n) :
E(ϕ(X )) =
show()
x_joe = 0
Version 2 de l’élève : y_joe = 0
n k
x_jack = 1
!
x_rantanplan = 1
y_rantanplan = 1
plot(x_joe,y_joe,"o",color="blue")
plot(x_jack,y_jack,"o",color="blue")
plot(x_william,y_william,"o",color="blue")
plot(x_rantanplan,y_rantanplan,"o",color="red")
ion()
draw()
2
for k in range(n) :
alea = random()
pN − j N
if alea<1/3 :
jp
x_rantanplan = (x_rantanplan+x_joe)/2
N
y_rantanplan = (y_rantanplan+y_joe)/2
elif alea<2/3 :
p̂
x_rantanplan = (x_rantanplan+x_jack)/2
y_rantanplan = (y_rantanplan+y_jack)/2
X
else :
1= j
x_rantanplan = (x_rantanplan+x_william)/2
P
y_rantanplan = (y_rantanplan+y_william)/2
plot(x_rantanplan,y_rantanplan,"o",color="red")
)1 ,0( N →
draw()
ioff()
show()
µ− X
σ
1 = xd 2/
2
x−
e
∞+
∞−
Z
) x( XPd) x(ϕ
) iB(P)A( iBP
π2
1
√
X
I∈ i
k−n
Z
= )A(P
) p − 1( k p
= )) X(ϕ(E
!
n
k