Préambule¶
Ce fichier (s'il porte l'extension .ipynb
) est un notebook Python.
Il comporte deux types de cellules :
les cellules d'édition dans lesquelles vous pouvez saisir du texte éventuellement enrichi de mises en formes ou de liens hypertextes avec la syntaxe du langage HTML simplifié qui s'appelle Markdown. Voir http://daringfireball.net/projects/markdown/ pour la syntaxe de Markdown.
les cellules de code où l'on peut saisir du code Python3 puis le faire exécuter avec la combinaison de touches
CTRL + RETURN
Une cellule peut être éditée de deux façons différentes :
en mode commande lorsqu'on clique sur sa marge gauche qui est surlignée alors en bleu, on peut alors :
changer le type de la cellule en appuyant sur
m
pour passer en cellule Markdown ou sury
pour passer en cellule de codeinsérer une cellule juste au-dessus en appuyant sur
a
insérer une cellule juste en-dessous en appuyant sur
b
couper la cellule en appuyant sur
x
etc ...
en mode édition lorsqu'on clique sur l'intérieur de la cellule.
L'aide complète sur les raccourcis claviers est accessible depuis le bouton Help
dans la barre d'outils ci-dessus.
Utiliser le mode interactif¶
Exercice 1¶
>>> 2 - 3 - 4
-5
>>> 1 / 2 ** 3
0.125
>>> 1/ 2 / 4
0.125
>>> 1/ 2 * 4
2.0
>>> 2 * 3 ** 2
18
>>> 2 ** 3 ** 2
512
>>> 34 // 3 % 4
3
>>> 5 % 3 ** 4
5
avec parenthésage :
>>> (2 - 3) - 4
-5
>>> 1 / (2 ** 3)
0.125
>>> (1/ 2) / 4
0.125
>>> (1/ 2) * 4
2.0
>>> 2 * (3 ** 2)
18
>>> 2 ** (3 ** 2)
512
>>> (34 // 3) % 4
3
>>> 5 % (3 ** 4)
5
- Écrire les expressions suivantes avec le moins de parenthèses possibles :
>>> 2 + (8 * (4 - 5))
>>> (3 - 5) - ((6 * 2) / (5 ** 2))
avec moins de parenthèses :
>>> 2 + 8 * (4 - 5)
>>> 3 - 5 - 6 * 2 / 5 ** 2
Exercice 2¶
Prédire la valeur affichée dans l'interprète Python après les séquences d'instructions suivantes.
- Séquence 1 :
>>> a = 5
>>> a = a + 1
>>> b = a
>>> b = b ** 2 - a
>>> print(b)
a = 5
a = a + 1
b = a
b = b ** 2 - a
print(b)
30
- Séquence 2 :
>>> a = 5
>>> b = 6
>>> a = a - b
>>> b = b + a
>>> a = b - a
>>> print(a, b)
a = 5
b = 6
a = a - b
b = b + a
a = b - a
print(a, b)
6 5
- Séquence 3 :
>>> from random import randint
>>> a = randint(1, 100) #entier aléatoire entre 1 et 100
>>> b = randint(1, 100) #entier aléatoire entre 1 et 100
>>> a = a - b
>>> b = b + a
>>> a = b - a
>>> print(a, b)
from random import randint
a = randint(1, 100) #entier aléatoire entre 1 et 100
b = randint(1, 100) #entier aléatoire entre 1 et 100
a = a - b
b = b + a
a = b - a
print(a, b)
41 30
Premiers programmes et premières erreurs¶
Exercice 3¶
- Dans son espace personnel, créer un répertoire
Chapitre1
avec un sous-répertoireTP1
. - Le prix d'une matière première est de 873 euros la tonne au début de l'année. Ce prix subit des variations saisonnières : au premier trimestre il augmente de 347 euros, au second trimestre il augmente de 25 %, au troisième trimestre il subit une baisse de 50 % et enfin il diminue de 100 euros.
Créer un nouveau programme avec l'éditeur d'Idle et l'enregistrer dans
Chapitre1/TP1
sous le nomprix.py
.Saisir dans ce fichier le code ci-dessous en le complétant afin qu'il calcule les valeurs successives de la variable
prix
.
prix = 873 #prix au début de l'année
prix = .... #prix à la fin du premier trimestre
prix = .... #prix à la fin du second trimestre
prix = .... #prix à la fin du troisième trimestre
prix = .... #prix à la fin de l'année
print("Prix final :", prix)
prix = 873 #prix au début de l'année
prix = prix + 347 #prix à la fin du premier trimestre
prix = prix * 1.25 #prix à la fin du second trimestre
prix = prix * 0.5 #prix à la fin du troisième trimestre
prix = prix - 100 #prix à la fin de l'année
print("Prix final :", prix)
Prix final : 662.5
Exercice 4¶
La température $f$ en degrés Fahrenheit s'obtient à partir de la température $c$ en degrés Celsius par la formule de conversion $f=1,8 * c + 32$.
On veut écrire un programme qui réponde à la spécification suivante : convertir une mesure de température de l'échelle Celsius vers l'échelle Fahrenheit.
- Dans l'éditeur d'Idle, créer un programme
temperature.py
et saisir le code ci-dessous :
f = input("Température en degrés Celsius ? "
d = 1,8 * f + 32
print("La température en degrés Fahrenheit est de ", d)
Exécuter le code, on doit obtenir un message d'erreur indiquant une erreur de Syntaxe. Un curseur indique dans le code la position où l'interpréteur [Python][Python] s'est interrompu dans la lecture du code. Si le curseur est en début de ligne, il faut souvent chercher l'erreur à la fin de la ligne précédente ...
Corriger l'erreur de syntaxe.
Corrigé : la première erreur est une erreur de syntaxe est l'oubli de la fermeture de la parenthèse de la fonction input
.
f = input("Température en degrés Celsius ? "
d = 1,8 * f + 32
print("La température en degrés Fahrenheit est de ", d)
File "<ipython-input-5-fb4fd8a27b6e>", line 2 d = 1,8 * f + 32 ^ SyntaxError: invalid syntax
Corrigé : la seconde erreur est une erreur de type : on ne peut pas additionner la valeur de f
qui est de stype str
(car renvoyée par input
) et 32 de type int
.
f = input("Température en degrés Celsius ? ")
print(type(f))
d = 1,8 * f + 32
print("La température en degrés Fahrenheit est de ", d)
Remplacer la première instruction par
float(input("Température en degrés Celsius ? "))
puis exécuter.Quel est l'effet de la fonction
float
? Afficher sa documentation dans l'interpréteur avec l'instructionhelp(float)
.
Corrigé : la troisième erreur est plus subtile : Python retourne un tuple
car on a utilisé la virgule au lieu du point comme séparateur décimal.
f = float(input("Température en degrés Celsius ? "))
print(type(f))
d = 1,8 * f + 32
print("La température en degrés Fahrenheit est de ", d)
Corrigé : une version correcte du code :
f = float(input("Température en degrés Celsisus ? "))
d = 1.8 * f + 32
print("La température en degrés Fahrenheit est de ", d)
Température en degrés Celsisus ? 44 La température en degrés Fahrenheit est de 111.2
Effets de bord et erreur¶
Exercice 5¶
On veut écrire un programme vérifiant la spécification suivant : le programme doit permuter les valeurs de deux variables a
et b
de type entier saisies en entrée.
Avec l'éditeur Idle, créer dans le répertoire TP1
un nouveau programme permutation.py
et recopier le code ci-dessous
# entrées
a = int(input('a ?'))
b = int(input('b ?'))
# traitement
a = b
b = a
# sorties
print("a = ", a, " et b = ", b)
- Tester ce programme pour les entrées 605 et 506. La spécification du programme est-elle satisfaite ?
# entrées
a = int(input('a ?'))
b = int(input('b ?'))
# traitement
a = b
b = a
# sorties
print("a = ", a, " et b = ", b)
Le programme ne permute pas les valeurs des variables a
et b
, il affecte la valeur initiale de a
à a
puis à b
.
- Pour représenter l'exécution du programme, compléter le tableau d'état ci-dessous, qui affiche pour chaque ligne d'instruction, les valeurs des variables
a
etb
et les éventuelles interactions avec l'utilisateur.
Ligne | Variable a | Variable b | Interactions |
---|---|---|---|
a = int ( input ( 'a ?' )) | 734 | affichage : 'a ?' saisie : 734 | |
b = int ( input ( 'b ?' )) | 734 | 437 | affichage : 'b ?' saisie : 437 |
a = b | 437 | 437 | |
b = a | 437 | 437 | |
print ( "a = " , a, " et b = " , b) | affichage : a = 437 et b = 437 |
Proposer une modification du programme qui permute les valeurs des variables
a
etb
saisies en entrée.Démontrer que le programme est correct en complétant un tableau d'état de ce nouveau programme qui utilise des valeurs indéterminées
x
ety
pour les variablesa
etb
en entrée.
On peut utiliser une variable supplémentaire pour stocker la valeur initiale de a
.
# entrées
a = int(input('a ?'))
b = int(input('b ?'))
# traitement
c = a
a = b
b = c
# sorties
print("a = ", a, " et b = ", b)
- Proposer une modification du programme qui permute les valeurs des variables
a
etb
saisies en entrée, sans utiliser de variable supplémentaire.
Permutation de variables, sans utiliser une variable supplémentaire pour stocker la valeur initiale de a
.
# entrées
a = int(input('a ?'))
b = int(input('b ?'))
# traitement
a = a + b
b = a - b
a = a - b
# sorties
print("a = ", a, " et b = ", b)
Ligne | Variable a | Variable b | Interactions |
---|---|---|---|
a = int ( input ( 'a ?' )) | x | affichage : 'a ?' saisie : x | |
b = int ( input ( 'b ?' )) | x | y | affichage : 'b ?' saisie : y |
a = a + b | x + y | y | |
b = a - b | x + y | x | |
a = a - b | y | x | |
print ( "a = " , a, " et b = " , b) | affichage : a = y et b = x |
Utiliser une bibliothèque¶
from turtle import *
from ipyturtle import Turtle
help(circle)
Exercice 6¶
- Avec l'éditeur d'Idle, créer dans le répertoire
TP1
un nouveau programmetortue-polygones.py
et importer toutes les fonctions du moduleturtle
avecfrom turtle import *
. - Écrire un programme qui trace un carré de côté 100 pixels en utilisant les instructions
forward
etleft
.
from turtle import *
up()
goto(0,0)
down()
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
exitonclick()
- Écrire un programme qui trace un triangle équilatéral de côté 100 pixels.
from turtle import *
up()
goto(0,0)
down()
forward(100)
left(120)
forward(100)
left(120)
forward(100)
left(120)
exitonclick()
- Écrire un programme qui trace un hexagone régulier de côté 100 pixels.
from turtle import *
angle = 360 / 6
up()
goto(0,0)
down()
forward(100)
left(angle)
forward(100)
left(angle)
forward(100)
left(angle)
forward(100)
left(angle)
forward(100)
left(angle)
forward(100)
left(angle)
exitonclick()
Exercice 7¶
- Avec l'éditeur d'Idle, créer dans le répertoire
TP1
un nouveau programmetortue-clef.py
et importer toutes les fonctions du moduleturtle
avecfrom turtle import *
. - Exécuter puis dans le du mode interactif la documentation de l'instruction
circle
avechelp(circle)
. - Saisir dans le programme la séquence d'instructions suivante, exécuter puis observer.
from turtle import *
forward(60)
left(120)
forward(60)
right(90)
circle(60,150)
exitonclick()
- Compléter le programme pour afficher une figure en forme de clef.
from turtle import *
forward(60)
left(120)
forward(60)
right(90)
circle(60,300)
right(90)
forward(60)
left(120)
forward(60)
right(90)
exitonclick()
Exercice 8¶
- Avec l'éditeur d'Idle, créer dans le répertoire
TP1
un nouveau programmetortue-triangles.py
. - Le programme ci-dessous permet de tracer un triangle équilatéral noir de côté 100 pixels. Compléter le code pour tracer la figure de droite avec la pyramide de triangles.
begin_fill()
fillcolor("black")
forward(100)
left(120)
forward(100)
left(120)
forward(100)
left(120)
end_fill()
fillcolor("white")
forward(50)
begin_fill()
left(60)
forward(50)
left(120)
forward(50)
left(120)
forward(50)
left(120)
end_fill()
exitonclick()
Exercice 8¶
- Avec l'éditeur d'Idle, créer dans le répertoire
TP1
un nouveau programmetortue-drapeau.py
. - Écrire un programme qui dessine le drapeau français.
begin_fill()
up()
goto(-100,0)
down()
fillcolor("blue")
forward(100)
left(90)
forward(200)
left(90)
forward(100)
left(90)
forward(200)
left(90)
end_fill()
up()
down()
forward(100)
begin_fill()
fillcolor("white")
forward(100)
left(90)
forward(200)
left(90)
forward(100)
left(90)
forward(200)
left(90)
end_fill()
up()
down()
forward(100)
begin_fill()
fillcolor("red")
forward(100)
left(90)
forward(200)
left(90)
forward(100)
left(90)
forward(200)
left(90)
end_fill()
exitonclick()