diff --git a/README.md b/README.md
index e0ac817..8636e5a 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,6 @@
-Relecteurs pour le tome 2
-===============
-Un tome 2 de *Python au lycée* est en préparation. Nous cherchons des élèves/étudiants/enseignants/informaticiens motivés qui voudraient bien relire/tester/corriger/critiquer un ou plusieurs chapitres.
-Si vous êtes interessé, n'hésitez pas à contacter Arnaud Bodin.
-
-
-Python au lycée
-===============
+Python au lycée - tome 1
+========================
Python est le langage idéal pour apprendre la programmation.
C'est un langage puissant qui vous permettra de plonger dans le monde des algorithmes.
@@ -18,14 +12,14 @@ Vous avez tout en main pour réussir !
Vidéos
======
-Les vidéos seront visibles depuis la chaîne *Youtube* [Python au lycée](https://www.youtube.com/channel/UC6PiFyqBiUjiJ7Q3DRSW2Wg "www.youtube.com/PythonAuLycee").
+Les vidéos sont visibles depuis la chaîne *Youtube* [Python au lycée](https://www.youtube.com/channel/UC6PiFyqBiUjiJ7Q3DRSW2Wg "www.youtube.com/PythonAuLycée").
Livre
=====
-Le livre est en vente sur Amazon.fr à prix coûtant. [Commander le livre sur Amazon.fr]( https://www.amazon.fr/dp/1986820033).
+Le livre est en vente sur Amazon.fr à prix coûtant. [Commander le livre sur Amazon.fr]( https://www.amazon.fr/dp/1091267510).
-Vous pouvez aussi le télécharger sur ce site : [Livre 'Python au lycée' (3 Mo)](livre-python1.pdf).
+Vous pouvez aussi le télécharger sur ce site : [Livre 'Python au lycée - tome 1' (3 Mo)](livre-python1.pdf).
Activités
=========
@@ -46,7 +40,7 @@ Activités
* Probabilités -- Paradoxe de Parrondo [Activités](proba/proba.pdf)
* Chercher et remplacer [Activités](chercher/chercher.pdf)
* Calculatrice polonaise -- Piles [Activités](piles/piles.pdf)
-* Visualiseur de texte -- Markdown [Activités](markdown/markdown.pdf)
+* Visualiseur de texte -- Markdown [Activités](markdown/texte_markdown.pdf)
* L-système [Activités](lsysteme/lsysteme.pdf)
* Images dynamiques [Activités](images/images.pdf)
* Jeu de la vie [Activités](vie/vie.pdf)
@@ -74,7 +68,7 @@ Auteur
Arnaud Bodin
-Rermciements à : Stéphanie Bodin, Michel Bodin, François Recher, Éric Wegrzynowski, Philippe Marquet, Kroum Tzanev.
+Remerciements à : Stéphanie Bodin, Michel Bodin, François Recher, Éric Wegrzynowski, Philippe Marquet, Kroum Tzanev.

diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..3397c9a
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-architect
\ No newline at end of file
diff --git a/aleatoire/aleatoire.pdf b/aleatoire/aleatoire.pdf
index 1e346c0..7388f4f 100644
Binary files a/aleatoire/aleatoire.pdf and b/aleatoire/aleatoire.pdf differ
diff --git a/aleatoire/aleatoire.tex b/aleatoire/aleatoire.tex
index 7790539..2bdc518 100644
--- a/aleatoire/aleatoire.tex
+++ b/aleatoire/aleatoire.tex
@@ -11,10 +11,10 @@
\begin{center}
\begin{minipage}{0.4\textwidth}
-\includegraphics[scale=0.3]{ecran-alea-bloc00}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-alea-bloc00}
\end{minipage}
\begin{minipage}{0.3\textwidth}
-\includegraphics[scale=0.25]{ecran-alea-arbre00}
+\includegraphics[scale=\myscale,scale=0.25]{ecran-alea-arbre00}
\end{minipage}
\end{center}
@@ -42,7 +42,7 @@
Le lancer aléatoire de centaines de blocs sur une grande grille produit de jolies formes géométriques ressemblant à des algues.
\begin{center}
-\includegraphics[scale=0.3]{ecran-alea-bloc0}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-alea-bloc0}
\end{center}
\end{cours}
@@ -60,10 +60,10 @@
On modélise l'espace de travail par un tableau de $n$ lignes et $p$ colonnes. Au départ le tableau ne contient que des $0$ ;
ensuite la présence d'un bloc est représentée par $1$.
-Voici comment initialiser le tableau :\\
-\centerline{\ci{tableau = [[0 for j in range(p)] for i in range(n)]}}
-On modifie le tableau par des instructions du type :\\
-\centerline{\ci{tableau[i][j] = 1}}
+Voici comment initialiser le tableau :
+\mycenterline{\ci{tableau = [[0 for j in range(p)] for i in range(n)]}}
+On modifie le tableau par des instructions du type :
+\mycenterline{\ci{tableau[i][j] = 1}}
Voici un exemple de tableau (à gauche) pour représenter la situation graphique de droite (le bloc en haut à droite est en train de tomber).
@@ -158,7 +158,7 @@
\textbf{Affichage statique.} Programme l'affichage graphique des blocs à partir d'un tableau.
\begin{center}
-\includegraphics[scale=0.3]{ecran-alea-bloc1}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-alea-bloc1}
\end{center}
\medskip
@@ -176,7 +176,7 @@
\medskip
\begin{center}
-\includegraphics[scale=0.3]{ecran-alea-bloc2}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-alea-bloc2}
\end{center}
\emph{Indications.}
@@ -199,7 +199,7 @@
Voici une construction un peu différente, beaucoup plus longue à calculer, mais qui dessine aussi de jolies figures appelées \og{}arbres browniens\fg{}.
\begin{center}
-\includegraphics[scale=0.28]{ecran-alea-arbre1}
+\includegraphics[scale=\myscale,scale=0.28]{ecran-alea-arbre1}
\end{center}
@@ -268,7 +268,7 @@
Programme l'affichage graphique à l'aide de \ci{tkinter}. Tu peux ajouter un bouton qui lance $10$ blocs d'un coup.
\begin{center}
-\includegraphics[scale=0.24]{ecran-alea-arbre2}
+\includegraphics[scale=\myscale,scale=0.24]{ecran-alea-arbre2}
\end{center}
\end{activite}
@@ -286,7 +286,7 @@
Voici un programme qui fait se déplacer un petit carré et le faisant rebondir sur les bords de la fenêtre.
\begin{center}
-\includegraphics[scale=0.5]{ecran-alea-cours-mouv}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-alea-cours-mouv}
\end{center}
Voici les points principaux :
@@ -295,8 +295,9 @@
\item Cet objet est (un petit peu) déplacé par la fonction \ci{deplacer()} qui décale le rectangle de \ci{(dx,dy)}.
- \item Le point clé est que cette fonction sera exécutée une nouvelle fois après un court laps de temps. La commande :\\
- \centerline{\ci{canvas.after(50,deplacer)}}
+ \item Le point clé est que cette fonction sera exécutée une nouvelle fois après un court laps de temps. La commande :
+ \mycenterline{\ci{canvas.after(50,deplacer)}}
+
demande une nouvelle exécution de la fonction \ci{deplacer()} après un court délai (ici $50$ millisecondes).
\item La répétition de petits déplacements simule le mouvement.
@@ -309,7 +310,7 @@
Hauteur = 200
root = Tk()
-canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
+canvas = Canvas(root,width=Largeur,height=Hauteur,background="white")
canvas.pack(fill="both", expand=True)
# Les coordonnées et la vitesse
@@ -344,10 +345,11 @@
return
# Boutons
-bouton_couleur = Button(root,text="Déplacer", width=20, command=action_deplacer)
-bouton_couleur.pack(pady=10)
+bouton_deplacer=Button(root,text="Déplacer",width=20,
+ command=action_deplacer)
+bouton_deplacer.pack(pady=10)
-bouton_quitter = Button(root,text="Quitter", width=20, command=root.quit)
+bouton_quitter = Button(root,text="Quitter",width=20,command=root.quit)
bouton_quitter.pack(side=BOTTOM, pady=10)
root.mainloop()
diff --git a/aleatoire/tkinter_mouvement.py b/aleatoire/tkinter_mouvement.py
index 416849c..9981429 100644
--- a/aleatoire/tkinter_mouvement.py
+++ b/aleatoire/tkinter_mouvement.py
@@ -44,8 +44,8 @@ def action_deplacer():
return
# Boutons
-bouton_couleur = Button(root,text="Déplacer", width=20, command=action_deplacer)
-bouton_couleur.pack(pady=10)
+bouton_deplacer = Button(root,text="Déplacer", width=20, command=action_deplacer)
+bouton_deplacer.pack(pady=10)
bouton_quitter = Button(root,text="Quitter", width=20, command=root.quit)
bouton_quitter.pack(side=BOTTOM, pady=10)
diff --git a/binaire/binaire-1.pdf b/binaire/binaire-1.pdf
index aad35ab..1ce0971 100644
Binary files a/binaire/binaire-1.pdf and b/binaire/binaire-1.pdf differ
diff --git a/binaire/binaire-2.pdf b/binaire/binaire-2.pdf
index 6a2956a..6926143 100644
Binary files a/binaire/binaire-2.pdf and b/binaire/binaire-2.pdf differ
diff --git a/binaire/binaire-2.tex b/binaire/binaire-2.tex
index 7ecc9cf..c54a8fb 100644
--- a/binaire/binaire-2.tex
+++ b/binaire/binaire-2.tex
@@ -208,8 +208,8 @@
Les lois de Morgan affirment que pour des booléens (vrai/faux) ou des \emph{bits} (1/0), on a toujours les égalités :
$$\text{NON}( b_1 \text{ OU } b_2 ) =
- \text{NON}( b_1 ) \text{ ET } \text{NON}(b_2),
- \qquad \quad
+ \text{NON}( b_1 ) \text{ ET } \text{NON}(b_2)
+ \qquad
\text{NON}( b_1 \text{ ET } b_2 ) =
\text{NON}( b_1 ) \text{ OU } \text{NON}(b_2).$$
diff --git a/bitcoin/bitcoin.pdf b/bitcoin/bitcoin.pdf
index ba7216b..96e9e07 100644
Binary files a/bitcoin/bitcoin.pdf and b/bitcoin/bitcoin.pdf differ
diff --git a/bitcoin/bitcoin.tex b/bitcoin/bitcoin.tex
index d69b3c8..199f819 100644
--- a/bitcoin/bitcoin.tex
+++ b/bitcoin/bitcoin.tex
@@ -80,7 +80,8 @@
\item Au lieu de chercher une solution exacte à notre problème $x^2 = y \pmod{p}$, qui est équivalent à $x^2-y \pmod{p} = 0$. On cherche une solution approchée, c'est-à-dire qui vérifie : $$x^2 - y \pmod{p} \ \le m.$$
Par exemple si $m=5$, alors on peut avoir (modulo $p$) : $x^2 - y = 0$, $x^2 - y = 1$,
- $x^2-y = 2$,\ldots, $x^2-y=5$.
+ $x^2-y = 2$,\ldots{} ou $x^2-y=5$.
+ Maintenant il y a bien plus de solutions possibles.
Programme une fonction \ci{racine_approchee(y,marge)} qui trouve une solution approchée à notre problème $x^2 = y \pmod{p}$.
@@ -96,8 +97,8 @@
10651 \quad
100109 \quad
1300573 \quad
-15486869 \quad
-179426321 \quad
+15486869$$
+$$179426321 \quad
2276856017 \quad
32416187567$$
\end{activite}
@@ -212,10 +213,12 @@
Écris une fonction \ci{phrase_vers_liste(phrase)} qui convertit une chaîne de caractères en une liste d'entiers entre $0$ et $99$ et si besoin rajoute des zéros devant afin que la liste ait la bonne taille.
- La formule à utiliser pour convertir un caractère en un entier strictement inférieur à $100$ est :\\
- \centerline{\ci{ord(c) \% 100}}
- Par exemple : si \ci{phrase = "Vive moi !"} alors la fonction renvoie :\\
-\centerline{\ci{[0, 0, 86, 5, 18, 1, 32, 9, 11, 5, 32, 33]}}
+ La formule à utiliser pour convertir un caractère en un entier strictement inférieur à $100$ est :
+ \mycenterline{\ci{ord(c) \% 100}}
+
+ Par exemple : si \ci{phrase = "Vive moi !"} alors la fonction renvoie :
+\mycenterline{\ci{[0, 0, 86, 5, 18, 1, 32, 9, 11, 5, 32, 33]}}
+
Le caractère \ci{"i"} à pour code ASCII/unicode $105$ donc, modulo $100$, le nombre est $5$. Note que la fonction ajoute deux $0$ en début de liste afin d'avoir une longueur qui est un multiple de $N=6$.
\end{enumerate}
@@ -237,10 +240,11 @@
Dans cette activité, notre message est une liste d'entiers (entre $0$ et $99$) de longueur un multiple quelconque de $N=6$, nous le transformons en une liste de longueur $N=6$ : son empreinte (ou \emph{hash}). Voici des exemples de ce que va faire notre fonction de hachage :
\begin{itemize}
- \item la liste \ci{[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]} a pour empreinte :\\
- \centerline{\ci{[10, 0, 58, 28, 0, 90]}}
- \item la liste \ci{[1, 1, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]} a pour empreinte :\\
- \centerline{\ci{[25, 14, 29, 1, 19, 6]}}
+ \item la liste \ci{[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]} a pour empreinte :
+ \mycenterline{\ci{[10, 0, 58, 28, 0, 90]}}
+
+ \item la liste \ci{[1, 1, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]} a pour empreinte :
+ \mycenterline{\ci{[25, 14, 29, 1, 19, 6]}}
\end{itemize}
L'idée est de mélanger les nombres par bloc de $N=6$ entiers, puis de combiner ce bloc au suivant et de recommencer, jusqu'à obtenir un seul bloc.
@@ -342,8 +346,8 @@
\medskip
\textbf{Problème à résoudre.} On nous donne une liste, il s'agit de trouver un bloc tel que, lorsque qu'on le rajoute à la liste, cela produit un hachage commençant par des zéros.
-Plus précisément étant donné une liste \ci{liste} et un objectif maximal \ci{Max}, il s'agit de trouver un bloc \ci{preuve} qui, concaténé à la liste puis haché, est plus petit que la liste \ci{Max}, c'est-à-dire : \\
-\centerline{\ci{hachage(liste + preuve)} \ plus petit que \ \ci{Max}}
+Plus précisément étant donné une liste \ci{liste} et un objectif maximal \ci{Max}, il s'agit de trouver un bloc \ci{preuve} qui, concaténé à la liste puis haché, est plus petit que la liste \ci{Max}, c'est-à-dire :
+\mycenterline{\ci{hachage(liste + preuve)} \ plus petit que \ \ci{Max}}
La liste est de longueur quelconque (un multiple de $N=6$), la preuve est un bloc de longueur $N$, l'objectif est de trouver une liste commençant par des $0$ (voir l'activité 2).
@@ -436,10 +440,12 @@
\item On calcule une preuve de travail de cette liste.
\item On ajoute cette preuve au livre de compte.
\end{itemize}
- Par exemple si le livre se termine par :\\
- \centerline{\ci{[3,1,4,1,5,9], "Abel +35"}}
- alors après calcul de la preuve de travail le livre se termine par exemple par :\\
- \centerline{\ci{[3,1,4,1,5,9], "Abel +35", [32,17,37,73,52,90]}}
+ Par exemple si le livre se termine par :
+ \mycenterline{\ci{[3,1,4,1,5,9], "Abel +35"}}
+
+ alors après calcul de la preuve de travail le livre se termine par exemple par :
+ \mycenterline{\ci{[3,1,4,1,5,9], "Abel +35", [32,17,37,73,52,90]}}
+
On rappelle que la preuve de travail n'est pas unique et qu'en plus elle dépend
de l'objectif \ci{Max}.
diff --git a/chaines/chaines.pdf b/chaines/chaines.pdf
index d2f0c43..3a37c05 100644
Binary files a/chaines/chaines.pdf and b/chaines/chaines.pdf differ
diff --git a/chaines/chaines.tex b/chaines/chaines.tex
index 0a1ddc0..d31c803 100644
--- a/chaines/chaines.tex
+++ b/chaines/chaines.tex
@@ -125,12 +125,14 @@
\item Rassemble tout ton travail des trois premières questions dans une fonction \ci{met_au_pluriel()}. La fonction n'affiche rien, mais renvoie le mot au pluriel.
+ \medskip
+
\begin{fonction}[\ci{met_au_pluriel()}]
Usage : \ci{met_au_pluriel(mot)} \\
Entrée : un mot (une chaîne de caractères) \\
Sortie : le pluriel du mot
- \medskip
+ \bigskip
Exemples :
\begin{itemize}
@@ -142,12 +144,14 @@
\item Écris une fonction \ci{affiche_conjugaison()} qui conjugue un verbe du premier groupe au présent.
+ \medskip
+
\begin{fonction}[\ci{affiche_conjugaison()}]
Usage : \ci{affiche_conjugaison(verbe)} \\
Entrée : un verbe du premier groupe (une chaîne de caractères se terminant par \ci{"er"}) \\
Sortie : pas de résultat mais l'affichage de la conjugaison du verbe au présent
- \medskip
+ \bigskip
Exemple :
\begin{itemize}
@@ -166,6 +170,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bigskip
+\bigskip
+
+
\begin{cours}[Un peu plus sur les chaînes]
\sauteligne
@@ -179,20 +187,29 @@
\end{minipage}
\end{center}
- \item On peut tester si un caractère appartient à une certaine liste de caractères. Par exemple : \\
- \centerline{\codeinline{if carac in ["a", "A", "b", "B", "c", "C"]:}}
+ \item On peut tester si un caractère appartient à une certaine liste de caractères. Par exemple :
+
+ \smallskip
+
+ \mycenterline{\codeinline{if carac in ["a", "A", "b", "B", "c", "C"]:}}
+
\index{in@\ci{in}}
permet d’exécuter des instructions si le caractère \ci{carac} est l'une des lettres a, A, b, B, c, C.
- Pour éviter certaines lettres, on utiliserait : \\
- \centerline{\codeinline{if carac not in ["X", "Y", "Z"]:}}
+ Pour éviter certaines lettres, on utiliserait :
+
+ \smallskip
+
+ \mycenterline{\codeinline{if carac not in ["X", "Y", "Z"]:}}
+
\index{not in@\ci{not in}}
\end{enumerate}
\end{cours}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Activité 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -202,17 +219,19 @@
\objectifs{Objectifs : manipuler des mots de façon amusante.}
- \medskip
+ %\medskip
\begin{enumerate}
\item \textbf{Distance entre deux mots.}
La distance\index{distance} de Hamming entre deux mots de même longueur est le nombre d'endroits où les lettres sont différentes.
-Par exemple : \\
-\centerline{\mot{
+Par exemple :
+
+\mycenterline{\mot{
\badletter{J}A\badletter{P}ON}\qquad \mot{\badletter{S}A\badletter{V}ON}
}
+
La première lettre de \mot{JAPON} est différente de la première lettre de \mot{SAVON}, les troisièmes aussi sont différentes. La distance de Hamming entre \mot{JAPON} et \mot{SAVON} vaut donc $2$.
Écris une fonction \ci{distance_hamming()} qui calcule la distance de Hamming entre deux mots de même longueur.
@@ -228,7 +247,7 @@
\end{fonction}
- \medskip
+ %\medskip
\item \textbf{Latin-cochon.}
@@ -251,7 +270,7 @@
Exemple : \ci{latin_cochon("BONJOUR")} renvoie \ci{"ONJOURBUM"}
\end{fonction}
- \medskip
+ %\medskip
\item \textbf{Verlan.}
@@ -269,7 +288,7 @@
Exemple : \ci{verlan("TOCARD")} renvoie \ci{"DRACOT"}
\end{fonction}
- \medskip
+ %\medskip
\item \textbf{Palindrome.}
@@ -356,25 +375,24 @@
Second code du coupable : \mot{ATGC}
-{\small
+{\footnotesize
ADN du colonel Moutarde :
- \mot{CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC}
-
+\mot{CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC}
ADN de Mlle Rose :
- \mot{CTCCTGATGCTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG}
+\mot{CTCCTGATGCTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG}
ADN de Mme Pervenche :
- \mot{AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGTACTCCGCGCGCCGGGACAGAATGCC}
-
+\mot{AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGTACTCCGCGCGCCGGGACAGAATGCC}
ADN de M. Leblanc :
\mot{CTGCAGGAACTTCTTCTGGAAGTACTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAG}
+
}
\end{enumerate}
\end{activite}
@@ -390,7 +408,7 @@
Un caractère est stocké par l'ordinateur sous la forme d'un entier.
Pour le codage ASCII/unicode, la lettre majuscule \og{}A\fg{} est codé par $65$, la lettre minuscule \og{}h\fg{} est codée par $104$, le symbole \og{}\#\fg{} par $35$.
-Voici la table des premiers caractères. Les numéros $0$ à $32$ ne sont pas des caractères imprimables. Cependant le numéro $32$ est le caractère espace \lstinline!" "!.
+Voici la table des premiers caractères. Les numéros $0$ à $32$ ne sont pas des caractères imprimables. Cependant le numéro $32$ est le caractère espace \lstinline[showstringspaces=true]!" "!.
\index{ascii}
\index{unicode}
@@ -447,9 +465,8 @@
\begin{enumerate}
- \item Décode à la main le message chiffré sous les codes suivants : \\
-
-\centerline{80-121-116-104-111-110 \quad 101-115-116 \quad 115-121-109-112-64}
+ \item Décode à la main le message chiffré sous les codes suivants :
+\mycenterline{80-121-116-104-111-110 \quad 101-115-116 \quad 115-121-109-112-64}
% [\symbol{80}\symbol{121}\symbol{116}\symbol{104}\symbol{111}\symbol{110}
% \symbol{101}\symbol{115}\symbol{116}
diff --git a/chercher/chercher.pdf b/chercher/chercher.pdf
index fdb0ccb..976d566 100644
Binary files a/chercher/chercher.pdf and b/chercher/chercher.pdf differ
diff --git a/chercher/chercher.tex b/chercher/chercher.tex
index f95b43c..81e8e13 100644
--- a/chercher/chercher.tex
+++ b/chercher/chercher.tex
@@ -31,8 +31,9 @@
\index{in@\ci{in}}
- La façon la plus simple de savoir si une sous-chaîne est présente dans une chaîne de caractères est d'utiliser l'opérateur \og{}\ci{in}\fg{}. Par exemple, l'expression :\\
- \centerline{\ci{"PAS" in "ETRE OU NE PAS ETRE"}}
+ La façon la plus simple de savoir si une sous-chaîne est présente dans une chaîne de caractères est d'utiliser l'opérateur \og{}\ci{in}\fg{}. Par exemple, l'expression :
+ \mycenterline{\ci{"PAS" in "ETRE OU NE PAS ETRE"}}
+
vaut \og{}vrai\fg{} car la sous-chaîne \mot{PAS} est bien présente dans la phrase
\mot{ETRE OU NE PAS ETRE}.
@@ -75,8 +76,8 @@
\objectifs{Objectifs : remplacer des portions de texte par d'autres.}
\begin{enumerate}
- \item La méthode \ci{replace()} s'utilise sous la forme :\\
- \centerline{\ci{chaine.replace(sous_chaine,nouv_sous_chaine)}}
+ \item La méthode \ci{replace()} s'utilise sous la forme :
+ \mycenterline{\ci{chaine.replace(sous_chaine,nouv_sous_chaine)}}
\index {replace@\ci{replace}}
@@ -85,8 +86,9 @@
Transforme la phrase \mot{ETRE OU NE PAS ETRE} en \mot{ETRE OU NE PLUS ETRE}, puis en
\mot{AVOIR OU NE PLUS AVOIR}.
- \item Écris ta propre fonction \ci{remplacer()} que tu appelleras sous la forme suivante :\\
- \centerline{\ci{remplacer(chaine,sous_chaine,nouv_sous_chaine)}}
+ \item Écris ta propre fonction \ci{remplacer()} que tu appelleras sous la forme suivante :
+ \mycenterline{\ci{remplacer(chaine,sous_chaine,nouv_sous_chaine)}}
+
et qui remplace seulement la première occurrence de \ci{sous_chaine} trouvée. Par exemple \ci{remplacer("ABBA","B","XY")} renvoie \ci{"AXYBA"}.
@@ -126,7 +128,7 @@
\bigskip
-Nous utiliserons les expressions rationnelles à travers la commande :\\ \centerline{\ci{python_regex_chercher(chaine,exp)}}
+Nous utiliserons les expressions rationnelles à travers la commande : \mycenterline{\ci{python_regex_chercher(chaine,exp)}}
\index{module!re@\ci{re}}
@@ -153,7 +155,7 @@
Exemple avec \ci{chaine = "ETRE OU NE PAS ETRE"}
\begin{itemize}
- \item avec \ci{exp = "P.S"}, alors \ci{python_regex_chercher(chaine,exp)} renvoie
+ \item avec \ci{exp = "P.S"}, alors \ci{python_regex_chercher(chaine, exp)} renvoie
\ci{('PAS', 11, 14)}.
\item avec \ci{exp = "E..E"}, la fonction renvoie
\ci{('ETRE', 0, 4)}.
@@ -209,33 +211,33 @@
Appliquer la transformation \rzero\run{} $\rightarrow$ \run\rzero{}
à la phrase \run\rzero\run\run\rzero.
-On lit la phrase de gauche à droite, on trouve le premier motif \rzero\run{} à partir de la seconde lettre, on le remplace par \run\rzero{} :\\
-\centerline{\run(\rzero\run)\run\rzero{} \quad $\longmapsto$ \quad \run(\run\rzero)\run\rzero}
+On lit la phrase de gauche à droite, on trouve le premier motif \rzero\run{} à partir de la seconde lettre, on le remplace par \run\rzero{} :
+\mycenterline{\run(\rzero\run)\run\rzero{} \quad $\longmapsto$ \quad \run(\run\rzero)\run\rzero}
-On peut recommencer à partir du début de la phrase obtenue, avec toujours la même transformation \rzero\run{} $\rightarrow$ \run\rzero{} :\\
-\centerline{\run\run(\rzero\run)\rzero{} \quad $\longmapsto$ \quad \run\run(\run\rzero)\rzero}
+On peut recommencer à partir du début de la phrase obtenue, avec toujours la même transformation \rzero\run{} $\rightarrow$ \run\rzero{} :
+\mycenterline{\run\run(\rzero\run)\rzero{} \quad $\longmapsto$ \quad \run\run(\run\rzero)\rzero}
Le motif \rzero\run{} n'apparaît plus dans la phrase \run\run\run\rzero\rzero{} donc
la transformation \rzero\run{} $\rightarrow$ \run\rzero{} laisse maintenant cette phrase inchangée.
-Résumons : voici l'effet de la transformation itérée \rzero\run{} $\rightarrow$ \run\rzero{} à la phrase \run\rzero\run\run\rzero{} :\\
-\centerline{\run\rzero\run\run\rzero{} \quad $\longmapsto$ \quad \run\run\rzero\run\rzero{} \quad $\longmapsto$ \quad \run\run\run\rzero\rzero}
+Résumons : voici l'effet de la transformation itérée \rzero\run{} $\rightarrow$ \run\rzero{} à la phrase \run\rzero\run\run\rzero{} :
+\mycenterline{\run\rzero\run\run\rzero{} \quad $\longmapsto$ \quad \run\run\rzero\run\rzero{} \quad $\longmapsto$ \quad \run\run\run\rzero\rzero}
\end{exemple}
\begin{exemple}
Appliquer la transformation \rzero\rzero\run{} $\rightarrow$ \run\run\rzero\rzero{}
à la phrase \rzero\rzero\run\run.
-Une première fois :\\
-\centerline{(\rzero\rzero\run)\run{} \quad $\longmapsto$ \quad (\run\run\rzero\rzero)\run}
-Une seconde fois :\\
-\centerline{\run\run(\rzero\rzero\run) \quad $\longmapsto$ \quad \run\run(\run\run\rzero\rzero)}
+Une première fois :
+\mycenterline{(\rzero\rzero\run)\run{} \quad $\longmapsto$ \quad (\run\run\rzero\rzero)\run}
+Une seconde fois :
+\mycenterline{\run\run(\rzero\rzero\run) \quad $\longmapsto$ \quad \run\run(\run\run\rzero\rzero)}
Et ensuite la transformation ne modifie plus la phrase.
\end{exemple}
\begin{exemple}
-Voyons un dernier exemple avec la transformation \rzero\run{} $\rightarrow$ \run\run\rzero\rzero{} pour la phrase de départ \rzero\rzero\rzero\run{}: \\
-\centerline{
+Voyons un dernier exemple avec la transformation \rzero\run{} $\rightarrow$ \run\run\rzero\rzero{} pour la phrase de départ \rzero\rzero\rzero\run{}:
+\mycenterline{
\rzero\rzero\rzero\run{} \quad $\longmapsto$ \quad
\rzero\rzero\run\run\rzero\rzero{} \quad $\longmapsto$ \quad
\rzero\run\run\rzero\rzero\run\rzero\rzero{} \quad $\longmapsto$ \quad
@@ -272,16 +274,20 @@
Programme une fonction \ci{iterations(phrase,motif,nouv_motif)} qui, à partir d'une phrase, itère la transformation. Une fois que la phrase est stabilisée, la fonction renvoie le nombre d'itérations effectuées ainsi que la phrase obtenue. Si le nombre d'itérations n'a pas l'air de s'arrêter (par exemple quand il dépasse $1000$) alors renvoie \ci{None}.
- Exemple. Pour la transformation \rzero\rzero\run\run{} $\rightarrow$ \run\run\rzero\rzero{} et la phrase \rzero\rzero\rzero\rzero\run\run\rzero\run\run, les phrases obtenues sont : \\
- \\
-\centerline{
-\rzero\rzero\rzero\rzero\run\run\rzero\run\run{} $\underset{\mathbf{1}}{\longmapsto}$
+ Exemple. Pour la transformation \rzero\rzero\run\run{} $\rightarrow$ \run\run\rzero\rzero{} et la phrase \rzero\rzero\rzero\rzero\run\run\rzero\run\run, les phrases obtenues sont :
+
+{\small
+\mycenterline{
+\ \rzero\rzero\rzero\rzero\run\run\rzero\run\run{} $\underset{\mathbf{1}}{\longmapsto}$
\rzero\rzero\run\run\rzero\rzero\rzero\run\run{} $\underset{\mathbf{2}}{\longmapsto}$
\run\run\rzero\rzero\rzero\rzero\rzero\run\run{} $\underset{\mathbf{3}}{\longmapsto}$
\run\run\rzero\rzero\rzero\run\run\rzero\rzero{} $\underset{\mathbf{4}}{\longmapsto}$
\run\run\rzero\run\run\rzero\rzero\rzero\rzero{} $\longmapsto$
idem
-}\\
+}
+}
+
+\medskip
Pour cet exemple l'appel à la fonction \ci{iterations()} renvoie alors $4$ (le nombre de transformations avant stabilisation) et \ci{"110110000"} (la phrase stabilisée).
@@ -296,8 +302,8 @@
\end{itemize}
Exemple : pour la transformation \rzero\run{} $\rightarrow$ \run\rzero\rzero, parmi toutes les phrases de longueur $p=4$, le maximum d'itérations possibles est $7$. Un tel exemple de phrase est \rzero\run\run\run, qui va se stabiliser (après 7 itérations donc) en \run\run\run\rzero\rzero\rzero\rzero\rzero\rzero\rzero\rzero.
-Ainsi la commande \ci{iteration_maximale(4,"01","100")} renvoie : \\
-\centerline{7, '0111', '11100000000'}
+Ainsi la commande \ci{iteration_maximale(4,"01","100")} renvoie :
+\mycenterline{\ci{7, '0111', '11100000000'}}
\emph{Indication.} Pour générer toutes les phrases de longueur $p$ formées de \rzero{} et \run{}, tu peux consulter la fiche \og{}Binaire II\fg{} (activité 3).
diff --git a/code/code.pdf b/code/code.pdf
index cf3ea01..ffc1a0f 100644
Binary files a/code/code.pdf and b/code/code.pdf differ
diff --git a/code/code.tex b/code/code.tex
index a6cd5fa..1550668 100644
--- a/code/code.tex
+++ b/code/code.tex
@@ -196,15 +196,15 @@ \subsection*{Activité 1}
\subsection*{Activité 2}
-\insertcode{../listes/listes_I_1.py}{Activité 2 \hfill \texttt{listes\_I\_2.py}}
+\insertcode{../listes/listes_I_2.py}{Activité 2 \hfill \texttt{listes\_I\_2.py}}
\subsection*{Activité 3}
-\insertcode{../listes/listes_I_1.py}{Activité 3 \hfill \texttt{listes\_I\_3.py}}
+\insertcode{../listes/listes_I_3.py}{Activité 3 \hfill \texttt{listes\_I\_3.py}}
\subsection*{Activité 4}
-\insertcode{../listes/listes_I_1.py}{Activité 4 \hfill \texttt{listes\_I\_4.py}}
+\insertcode{../listes/listes_I_4.py}{Activité 4 \hfill \texttt{listes\_I\_4.py}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -236,19 +236,19 @@ \section{Fichiers}
\subsection*{Activité 1}
-\insertcode{../fichiers/fichiers_1.py}{Activité 1 \hfill \texttt{fichier\_1.py}}
+\insertcode{../fichiers/fichiers_1.py}{Activité 1 \hfill \texttt{fichiers\_1.py}}
\subsection*{Activité 2}
-\insertcode{../fichiers/fichiers_2.py}{Activité 2 \hfill \texttt{fichier\_2.py}}
+\insertcode{../fichiers/fichiers_2.py}{Activité 2 \hfill \texttt{fichiers\_2.py}}
\subsection*{Activité 3}
-\insertcode{../fichiers/fichiers_3.py}{Activité 3 \hfill \texttt{fichier\_3.py}}
+\insertcode{../fichiers/fichiers_3.py}{Activité 3 \hfill \texttt{fichiers\_3.py}}
\subsection*{Activité 4}
-\insertcode{../fichiers/fichiers_4.py}{Activité 4 \hfill \texttt{fichier\_4.py}}
+\insertcode{../fichiers/fichiers_4.py}{Activité 4 \hfill \texttt{fichiers\_4.py}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/cover/python-logo_backup.svg b/cover/python-logo_backup.svg
new file mode 100644
index 0000000..ef8e8dc
--- /dev/null
+++ b/cover/python-logo_backup.svg
@@ -0,0 +1,112 @@
+
+
+
+
\ No newline at end of file
diff --git a/cover/python_cover4.pdf b/cover/python_cover4.pdf
new file mode 100644
index 0000000..40cb271
Binary files /dev/null and b/cover/python_cover4.pdf differ
diff --git a/cover/python_cover4.tex b/cover/python_cover4.tex
new file mode 100644
index 0000000..96bb5b6
--- /dev/null
+++ b/cover/python_cover4.tex
@@ -0,0 +1,259 @@
+%
+% A compiler avec xelatex !
+% xelatex -output-driver="xdvipdfmx" python_cover4.tex
+%
+\documentclass[tikz,border=0mm]{standalone}
+\usetikzlibrary{calc}
+% =====================================================
+% For the Python logo (that was in SVG)
+% =====================================================
+\usetikzlibrary{svg.path}
+% =====================================================
+% For the Hilbert curve
+% =====================================================
+\usetikzlibrary{shadings,lindenmayersystems}
+\pgfdeclarelindenmayersystem{Hilbert curve}{
+ \rule{L -> +RF-LFL-FR+}
+ \rule{R -> -LF+RFR+FL-}}
+% =====================================================
+% The font
+% =====================================================
+\usepackage{fontspec}
+\newfontfamily\titlefont{AlteDin1451Mittelschrift.ttf}
+\newfontfamily\roboto{Roboto}
+\setmainfont{Roboto}
+%\newfontfamily\authorfont{Times New Roman}
+%\newfontfamily\authorfont{Roboto}
+\newfontfamily\authorfont{AlteDin1451Mittelschrift.ttf}
+
+% =====================================================
+% The colors
+% =====================================================
+\definecolor{scratchgreen}{rgb}{.43000793,.78393555,.27934265}
+\definecolor{scratchviolet}{rgb}{.50601196,.10708618,.55937195}
+
+\definecolor{goldleaf}{HTML}{D1B280}
+% 16 Day & Night
+\definecolor{darknavy}{HTML}{011A27}
+\definecolor{blueberry}{HTML}{073852}
+\definecolor{tangerine}{HTML}{F0810F}
+\definecolor{daffodil}{HTML}{E7DF44}
+
+% Arnaud
+\definecolor{hazelnut}{HTML}{B99A77}
+\definecolor{aquablue}{HTML}{31A9B9}
+\definecolor{tomato}{HTML}{CF3721}
+\definecolor{avocado}{HTML}{258039}
+
+\definecolor{cayenne}{HTML}{AF4425}
+\definecolor{cinnamon}{HTML}{662E1C}
+\definecolor{caramel}{HTML}{C9A66B}
+
+% Style marron
+%\definecolor{coulfond}{HTML}{DDC5A2}
+%\definecolor{coulup}{HTML}{301B28}
+%\definecolor{couldown}{HTML}{B6452C}
+%\definecolor{coulreste}{HTML}{523634}
+
+% Couleur épreuve
+\definecolor{coulfond}{HTML}{CCCCCC}
+\definecolor{coulup}{HTML}{D01A55}
+\definecolor{couldown}{HTML}{C1D208}
+\definecolor{coulreste}{HTML}{666666}
+
+% Colors by function
+\colorlet{background}{coulfond}
+\tikzset{
+ hilbert/.style = {bottom color=black, top color=white, draw=black, opacity=.14},
+ spine/.style = {fill, opacity=.1}
+}
+
+\colorlet{author}{black}
+
+\colorlet{pythonlogoup}{coulup}
+\colorlet{pythonlogodown}{couldown}
+\colorlet{titlepython}{white}
+\colorlet{titleau}{coulreste}
+\colorlet{titlelycee}{white}
+
+\colorlet{subtitlealgo}{coulreste}
+
+\colorlet{spinepython}{coulup}
+\colorlet{spineau}{couldown}
+\colorlet{spinelycee}{coulup}
+\colorlet{spinealgo}{white}
+
+
+%=======================================================
+% The cover size
+%=======================================================
+% Calculate the splin
+\def\numPages{274}
+\newlength{\thickCream}\setlength{\thickCream}{0.0025 in}
+\newlength{\thickWhite}\setlength{\thickWhite}{0.002252 in}
+\newlength{\SpineW}\setlength{\SpineW}{\numPages\thickWhite} % 236*0.0025 = 0.59 (cream), 262*0.002252 = 0.590024 (white)
+% The standard bleed
+\newlength{\Bleed}\setlength{\Bleed}{.125 in}
+% Set the page size
+\newlength{\PageW}\setlength{\PageW}{7.5 in}
+\newlength{\PageH}\setlength{\PageH}{9.25 in}
+% Calculate the total dimensions
+\newlength{\TrimW}\setlength{\TrimW}{\dimexpr 2\PageW + \SpineW \relax}
+\newlength{\TrimH}\setlength{\TrimH}{\PageH}
+\newlength{\CropW}\setlength{\CropW}{\dimexpr \TrimW + 2\Bleed \relax}
+\newlength{\CropH}\setlength{\CropH}{\dimexpr \TrimH + 2\Bleed \relax}
+\newlength{\LineW}\setlength{\LineW}{2\Bleed}
+%=======================================================
+% Some PDF specials
+%=======================================================
+\special{pdf: docinfo <<
+/Author (Exo7)
+/Title (Python au Lycée - Algorithmes et programmation)
+/Keywords (Python, Lycée)
+/Subject (manuel de programmation en Python)
+>>}
+\edef\pwpt{\the\numexpr \dimexpr0.996264009963\CropW\relax/65536 \relax} %paper width in PS points
+\edef\phpt{\the\numexpr \dimexpr0.996264009963\CropH\relax/65536 \relax} %paper height in PS points
+\expandafter\special\expandafter{pdf: put @thispage <<
+ /MediaBox [0 0 \pwpt\space\phpt]
+ /BleedBox [0 0 \pwpt\space\phpt]
+ /CropBox [0 0 \pwpt\space\phpt]
+ /TrimBox [0 0 \pwpt\space\phpt]>>}
+%=======================================================
+% for test
+%=======================================================
+\usepackage{blindtext}
+\newif\ifshowborders\showbordersfalse % to display the security zone (Bleed)
+%\showborderstrue
+
+\tikzset{
+ frame/.style 2 args={inner sep=0, outer sep=0, minimum width=#1, minimum height=#2, node contents=}
+}
+
+\begin{document}%
+ \begin{tikzpicture}
+ % Clip
+ \clip (-.5*\CropW,-\Bleed) rectangle +(\CropW,\CropH);
+ % Set nodes for anchors : Cover, Back, Front and Spine
+ \path
+ (0,-\Bleed) node[name=Cover,above,fill=background,frame={\CropW}{\CropH}]
+ (-\SpineW/2,0) node[name=Back,above left,frame={\PageW}{\PageH}]
+ (\SpineW/2,0) node[name=Front,above right,frame={\PageW}{\PageH}]
+ (0,0) node[name=Spine,above,spine,frame={\SpineW}{\PageH}];
+ % ---------------------------------------------------
+ % Background
+ % ---------------------------------------------------
+ \def\steps{5}
+ \shadedraw[shift={(Cover.south west)}, hilbert]
+ [l-system={Hilbert curve, axiom=L, order=5, step={\CropW/31+.01pt}, angle=90}]
+ lindenmayer system;
+ % ---------------------------------------------------
+ % Python logo and title
+ % ---------------------------------------------------
+ \begin{scope}[scale=0.7,transform canvas ={yshift=21mm}]
+ \fill[shift={(Front.center)},pythonlogoup]svg{M 133.72 -122.51 v 52.97 c 0 41.07 -34.81 75.63 -74.52 75.63 h -119.15 c -32.64 0 -59.64 27.93 -59.64 60.61 v 113.59 c 0 32.32 28.11 51.34 59.64 60.61 c 37.76 11.1 73.96 13.12 119.15 0 c 30.03 -8.69 59.64 -26.19 59.64 -60.61 v -45.46 h -119.14 v -15.15 h 119.14 h 59.64 c 34.67 0 47.59 -24.18 59.64 -60.48 c 12.45 -37.37 11.93 -73.3 0 -121.23 c -8.57 -34.51 -24.93 -60.47 -59.64 -60.48 h -44.76 z m -67.01 287.64 c 12.37 0 22.38 10.13 22.38 22.66 c 0 12.57 -10.02 22.8 -22.38 22.8 c -12.32 0 -22.38 -10.23 -22.38 -22.8 c 0 -12.53 10.06 -22.66 22.38 -22.66 z};
+ \fill[shift={(Front.center)},pythonlogodown]svg{M -2.94 -250 c -20.39 .1 -39.87 1.83 -57 4.87 c -50.48 8.92 -59.64 27.58 -59.65 62.01 v 45.46 h 119.29 v 15.15 h -119.29 h -44.76 c -34.67 0 -65.02 20.84 -74.52 60.48 c -10.95 45.44 -11.44 73.79 0 121.23 c 8.48 35.31 28.73 60.47 63.4 60.48 h 41.01 v -54.51 c 0 -39.37 34.06 -74.1 74.51 -74.1 h 119.15 c 33.17 0 59.64 -27.31 59.64 -60.61 v -113.58 c 0 -32.32 -27.27 -56.61 -59.64 -62.01 c -20.49 -3.41 -41.75 -4.96 -62.14 -4.87 z m -64.51 36.57 c 12.32 0 22.38 10.23 22.38 22.8 c 0 12.53 -10.06 22.66 -22.38 22.66 c -12.37 0 -22.38 -10.13 -22.39 -22.66 c 0 -12.57 10.02 -22.8 22.39 -22.8 z};
+ % ---------------------------------------------------
+ \path[every node/.style={scale=5, font=\titlefont, outer sep=0, inner sep=0}]
+ (Front.center) +(21mm,21mm) node[titlepython]{PYTHON}
+ (Front.center) +(-21mm,-21mm) node
+ {\textcolor{titleau}{AU}\textcolor{titlelycee}{LYCÉE}};
+
+ \path (Cover.east) +(55mm,-125mm) node[left,scale=1.8,text width=.40\PageW,align=left,fill=white,text=subtitlealgo,inner sep=.3em,font=\authorfont,rounded corners=10pt]{\bf ~~Algorithmes et programmation~~\vphantom{\Large t}};
+
+ \path (Cover.east) +(55mm,-145mm) node[left,scale=1.8,text width=.20\PageW,align=left,fill=white,text=subtitlealgo,inner sep=.4em,font=\authorfont,rounded corners=10pt]{\bf ~~tome 1~~\vphantom{.}};
+
+ \end{scope}
+ % ---------------------------------------------------
+ % Auteur
+ % ---------------------------------------------------
+ \path (Front.north) +(0,-21mm) node[author,text=subtitlealgo,scale=2,font=\authorfont]{\bf Arnaud Bodin};
+ % ---------------------------------------------------
+ % Spine
+ % ---------------------------------------------------
+ \begin{scope}[transform canvas ={yshift=21mm}]
+ \node[rotate=90,scale=1.8] (tranche) at (Spine.center)
+ {\textcolor{spinepython}{PYTHON}\textcolor{spineau}{AU}\textcolor{spinelycee}{LYCÉE}\textcolor{spinealgo}{~~~\textemdash~~tome 1}\vphantom{\large y}};
+ \end{scope}
+ % ---------------------------------------------------
+ % Logos Exo7
+ % ---------------------------------------------------
+ \path (Spine.south) +(0,14mm) node{\includegraphics[width=11mm]{exo7_logo_white}};
+ \path (Front.south) +(0,14mm) node{\includegraphics[width=19mm]{exo7_logo_white}};
+ % ---------------------------------------------------
+ % Back
+ % ---------------------------------------------------
+ \path (Back.center) node[scale=1.6,text width=10.5cm,fill=white,fill opacity=.5,text opacity=.77,align = center]{
+ \vspace*{2ex}
+
+ \footnotesize
+
+ \hyphenchar\font=-1 % pas de césure
+
+
+
+ \emph{Python} est le langage idéal pour apprendre la programmation.
+C'est un langage puissant qui vous plongera dans le monde des algorithmes.
+
+\bigskip
+
+Ce livre vous guide pas à pas à travers des activités mathématiques et informatiques originales adaptées au lycée. Il se complète par des ressources en ligne : tous les codes \emph{Python}, des vidéos et des fiches en couleurs.
+Vous avez tout en main pour réussir !
+
+\bigskip
+\scriptsize
+
+\begin{center}
+\begin{minipage}{0.49\textwidth}
+\begin{itemize}
+\setlength{\itemsep}{-1pt}%
+\item Premiers pas
+\item Tortue (Scratch avec Python)
+\item Si ... alors ...
+\item Fonctions
+\item Arithmétique -- Boucle tant que -- I
+\item Chaînes de caractères% - Analyse d'un texte
+\item Listes I
+\item Statistique -- Visualisation de données
+\item Fichiers
+\item Arithmétique -- Boucle tant que -- II
+\item Binaire I
+\item Listes II
+\item Binaire II
+\end{itemize}
+\end{minipage}
+\begin{minipage}{0.49\textwidth}
+\begin{itemize}
+\setlength{\itemsep}{0pt}%
+\item Probabilités -- Paradoxe de Parrondo
+\item Chercher et remplacer
+\item Calculatrice polonaise -- Piles
+\item Visualiseur de texte -- Markdown
+\item L-système
+\item Images dynamiques
+\item Jeu de la vie
+\item Graphes et combinatoire de Ramsey
+\item Bitcoin
+\item Constructions aléatoires
+\end{itemize}
+\end{minipage}
+\end{center}
+
+ \vspace*{3ex}
+
+ };
+ % ---------------------------------------------------
+ \ifshowborders
+ % --- security zone
+ \begin{scope}[line width=\LineW,red,opacity=.35]
+ \draw (-.5*\TrimW,0) rectangle +(\TrimW,\TrimH);
+ \draw (-.5*\SpineW-\Bleed/3,0) rectangle +(\SpineW+2\Bleed/3,\TrimH);
+ \end{scope}
+ % --- guides
+ \begin{scope}[dashed]
+ \draw (-.5*\TrimW,0) rectangle +(\TrimW,\TrimH);
+ \draw (-.5*\SpineW,0) rectangle +(\SpineW,\TrimH);
+ \end{scope}
+ \fi
+ \end{tikzpicture}%
+\end{document}
diff --git a/cover/python_cover4_kdp.pdf b/cover/python_cover4_kdp.pdf
new file mode 100644
index 0000000..8eac954
Binary files /dev/null and b/cover/python_cover4_kdp.pdf differ
diff --git a/cover/python_cover4_kdp_bis.pdf b/cover/python_cover4_kdp_bis.pdf
new file mode 100644
index 0000000..05107ab
Binary files /dev/null and b/cover/python_cover4_kdp_bis.pdf differ
diff --git a/cover/readme_cover.txt b/cover/readme_cover.txt
new file mode 100644
index 0000000..700155e
--- /dev/null
+++ b/cover/readme_cover.txt
@@ -0,0 +1,3 @@
+# Il faut applatir la couverture selon le nouveau critèe kdp
+
+pdf2ps python_cover4.pdf - | ps2pdf - python_cover4_kdp_bis.pdf
diff --git a/divers/chapitres.txt b/divers/chapitres.txt
new file mode 100644
index 0000000..bb378e0
--- /dev/null
+++ b/divers/chapitres.txt
@@ -0,0 +1,69 @@
+Python au lycée (tome 1)
+Algorithmes et programmation
+Livres Exo7 4
+Numéro d’édition (Facultatif) 2
+
+Python est le langage idéal pour apprendre la programmation. C'est un langage puissant qui vous plongera dans le monde des algorithmes. Ce livre vous guide pas à pas à travers des activités mathématiques et informatiques originales adaptées au lycée. Il se complète par des ressources en ligne : tous les codes Python, des vidéos et des fiches en couleurs. Vous avez tout en main pour réussir !
+
+ • Premiers pas• Tortue (Scratch avec Python)• Si ... alors ...• Fonctions• Arithmétique – Boucle tant que – I• Chaînes de caractères• Listes I• Statistique – Visualisation de données• Fichiers• Arithmétique – Boucle tant que – II• Binaire I• Listes II• Binaire II• Probabilités – Paradoxe de Parrondo• Chercher et remplacer• Calculatrice polonaise – Piles• Visualiseur de texte – Markdown• L-système• Images dynamiques• Jeu de la vie• Graphes et combinatoire de Ramsey• Bitcoin• Constructions aléatoires
+
+Mathématiques
+Algorithmes
+Programmation
+Python
+Lycée
+
+
+
+Non-fiction > Ordinateurs > Langages de programmation > Python
+Scolaire et Ouvrages de référence > Éducation > Ordinateurs et Technologies
+
+ISBN utilisé sur CreateSpace
+9781986820035
+
+Date de publication 04/04/2018
+
+intérieur nb avec papier blanc
+
+taille de coupe 7.5 x 9.25 pouces
+
+Absence de fond perdu
+
+couv brillante
+
+Territoire europe + canada + usa
+
+prix 6,08 € 7,16$
+
+
+
+# NEW
+Code ISBN : 9781091267510
+Marque éditoriale : Independently published
+prix 6,28 €
+
+
+ • Premiers pas
+ • Tortue (Scratch avec Python)
+ • Si ... alors ...
+ • Fonctions
+ • Arithmétique – Boucle tant que – I
+ • Chaînes de caractères
+ • Listes I
+ • Statistique – Visualisation de données
+ • Fichiers
+ • Arithmétique – Boucle tant que – II
+ • Binaire I
+ • Listes II
+ • Binaire II
+ • Probabilités – Paradoxe de Parrondo
+ • Chercher et remplacer
+ • Calculatrice polonaise – Piles
+ • Visualiseur de texte – Markdown
+ • L-système
+ • Images dynamiques
+ • Jeu de la vie
+ • Graphes et combinatoire de Ramsey
+ • Bitcoin
+ • Constructions aléatoires
+
diff --git a/divers/postface_livre_python.tex b/divers/postface_livre_python.tex
index 16628f6..154a971 100644
--- a/divers/postface_livre_python.tex
+++ b/divers/postface_livre_python.tex
@@ -18,12 +18,12 @@ \section*{Remerciements}
\begin{center}
Vous pouvez récupérer l'intégralité des codes \Python{} des activités ainsi que tous les fichiers sources sur la page \emph{GitHub} d'Exo7 :
-\href{https://github.com/exo7math}{\og{}GitHub : Python au lycée\fg{}}.
+\href{https://github.com/exo7math/python1-exo7}{\og{}GitHub : Python au lycée\fg{}}.
\medskip
Les vidéos des cours avec des explications pas à pas et la présentation des projets sont disponibles depuis la chaîne \emph{Youtube} :
-\href{https://www.youtube.com/PythonAuLycée}{\og{}Youtube : Python au lycée\fg{}}.
+\href{https://www.youtube.com/channel/UC6PiFyqBiUjiJ7Q3DRSW2Wg}{\og{}Youtube : Python au lycée\fg{}}.
%\\ \centerline{
diff --git a/divers/preface_livre_python.tex b/divers/preface_livre_python.tex
index 7f0365c..71264db 100644
--- a/divers/preface_livre_python.tex
+++ b/divers/preface_livre_python.tex
@@ -3,32 +3,35 @@
\vspace*{\fill}
\vspace*{5ex}
\begin{center}
-\fontsize{52}{52}\selectfont
+\fontsize{40}{40}\selectfont
\textsc{python au lycée}
-\vspace*{1ex}
+\vspace*{-0.5ex}
+\textsc{\fontsize{24}{24}\selectfont tome \fontsize{22}{22}\selectfont 1}
+
+\vspace*{2ex}
%\fontsize{32}{32}\selectfont
-\huge
+\Large
\textsc{arnaud bodin}
- %\hfil
- % \includegraphics[width = 6cm]{logoScratchAuCollege}
+
\end{center}
\vfill
\begin{center}
-\huge
+\Large
\textsc{algorithmes \ et \ programmation}
\end{center}
\begin{center}
\LogoExoSept{2}
\end{center}
-\clearemptydoublepage
-%\clearpage
+
+% \clearemptydoublepage
+\clearpage
\thispagestyle{empty}
\vspace*{\fill}
-\section*{Python au lycée}
+\section*{Python au lycée -- tome 1}
%---------------------------
{\large\textbf{C'est parti !}}
@@ -67,12 +70,12 @@ \section*{Python au lycée}
\begin{center}
Vous pouvez récupérer l'intégralité des codes \Python{} des activités ainsi que tous les fichiers sources sur la page \emph{GitHub} d'Exo7 :
-\href{https://github.com/exo7math}{\og{}GitHub : Python au lycée\fg{}}.
+\href{https://github.com/exo7math/python1-exo7}{\og{}GitHub : Python au lycée\fg{}}.
\medskip
Les vidéos des cours avec des explications pas à pas et la présentation des projets sont disponibles depuis la chaîne \emph{Youtube} :
-\href{https://www.youtube.com/PythonAuLycée}{\og{}Youtube : Python au lycée\fg{}}.
+\href{https://www.youtube.com/channel/UC6PiFyqBiUjiJ7Q3DRSW2Wg}{\og{}Youtube : Python au lycée\fg{}}.
\end{center}
@@ -89,13 +92,14 @@ \section*{Python au lycée}
\newpage
+
\section*{Résumé des activités}
-\newcommand{\titreactivite}[1]{{\large\textbf{#1}}\nopagebreak}
+\newcommand{\titreactivite}[1]{{\textbf{#1}}\nopagebreak}
\newcommand{\descriptionactivite}[1]{%
\smallskip\hfill
-\begin{minipage}{0.95\textwidth}#1\end{minipage}\medskip\smallskip}
+\begin{minipage}{0.95\textwidth}\small#1\end{minipage}\medskip\smallskip}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\titreactivite{Premiers pas}
diff --git a/fichiers/fichiers.pdf b/fichiers/fichiers.pdf
index 0cd84e4..c3c8949 100644
Binary files a/fichiers/fichiers.pdf and b/fichiers/fichiers.pdf differ
diff --git a/fichiers/fichiers.tex b/fichiers/fichiers.tex
index 2ce22a9..281dcc9 100644
--- a/fichiers/fichiers.tex
+++ b/fichiers/fichiers.tex
@@ -41,7 +41,7 @@
\end{lstlisting}
\end{minipage}
\begin{minipage}{0.3\textwidth}
-\includegraphics[scale=0.5]{ecran-fichiers-cours-1}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-fichiers-cours-1}
\end{minipage}
\end{center}
@@ -117,18 +117,18 @@
\objectifs{Objectifs : écrire un fichier de notes, puis le lire pour calculer les moyennes.}
\begin{enumerate}
- \item Génère au hasard un fichier de notes, nommé \ci{notes.txt}, qui est composé de lignes ayant la structure :\\
- \centerline{\ci{Prenom Nom note1 note2 note3}}
+ \item Génère au hasard un fichier de notes, nommé \ci{notes.txt}, qui est composé de lignes ayant la structure :
+ \mycenterline{\ci{Prenom Nom note1 note2 note3}}
Par exemple :
\begin{center}
-\includegraphics[scale=0.7]{ecran-fichiers-1a}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-fichiers-1a}
\end{center}
\emph{Indications.}
\begin{itemize}
\item Construis un liste de prénoms \ci{liste_prenoms = ["Tintin","Harry","Alice",...]}. Puis choisis un prénom au hasard par la commande
- \ci{prenom = choice(liste_prenoms)}.\index{choice@\ci{choice}} (il faut importer le module \ci{random}).
+ \ci{prenom = choice(liste_prenoms)}\index{choice@\ci{choice}} (il faut importer le module \ci{random}).
\item Même chose pour les noms !
@@ -139,12 +139,12 @@
\end{itemize}
- \item Lis le fichier \ci{notes.txt} que tu as produit. Calcule la moyenne de chaque personne et écrit le résultat dans un fichier \ci{moyennes.txt} où chaque ligne est de la forme :\\
- \centerline{\ci{Prenom Nom moyenne}}
+ \item Lis le fichier \ci{notes.txt} que tu as produit. Calcule la moyenne de chaque personne et écrit le résultat dans un fichier \ci{moyennes.txt} où chaque ligne est de la forme :
+ \mycenterline{\ci{Prenom Nom moyenne}}
Par exemple :
\begin{center}
-\includegraphics[scale=0.7]{ecran-fichiers-1b}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-fichiers-1b}
\end{center}
\emph{Indications.}
@@ -171,8 +171,10 @@
Le format \emph{csv}\index{csv@\emph{csv}} (pour \emph{comma-separated values}) est un format très simple de fichier texte contenant des données.
Chaque ligne du fichier contient des données (des nombres ou du texte). Sur une même ligne les données sont séparées par une virgule (d'où le nom du format, même si d'autres séparateurs sont possibles).
+\medskip
+
\textbf{Exemple.} Voici un fichier qui contient les noms, prénoms, années de naissance, la taille ainsi que le nombre de prix Nobel reçus :
- \begin{center}
+\begin{center}
\begin{minipage}{0.4\textwidth}
\begin{lstlisting}
CURIE,Marie,1867,1.55,2
@@ -184,6 +186,7 @@
\end{cours}
+%\medskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Activité 2
@@ -199,7 +202,7 @@
Voici un exemple :
\begin{center}
-\includegraphics[scale=0.6]{ecran-fichiers-2a}
+\includegraphics[scale=\myscale,scale=0.6]{ecran-fichiers-2a}
\end{center}
\begin{itemize}
@@ -209,18 +212,18 @@
\end{itemize}
\begin{center}
-\includegraphics[scale=0.4]{ecran-fichiers-2b}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-fichiers-2b}
\end{center}
\item Lit le fichier \ci{ventes.csv} pour afficher les courbes de ventes.
\begin{center}
-\includegraphics[scale=0.5]{ecran-fichiers-2c}
+\includegraphics[scale=\myscale,scale=0.55]{ecran-fichiers-2c}
\end{center}
\emph{Indications.}
\begin{itemize}
- \item Le package \ci{matplotlib} permet d'afficher facilement des graphiques, il s'appelle souvent avec l'instruction :\\
- \centerline{\ci{import matplotlib.pyplot as plt}}
+ \item Le package \ci{matplotlib} permet d'afficher facilement des graphiques, il s'appelle souvent avec l'instruction :
+ \mycenterline{\ci{import matplotlib.pyplot as plt}}
\item Voici comment visualiser deux listes de données \ci{liste1} et \ci{liste2} :
\begin{center}
@@ -272,7 +275,7 @@
\end{lstlisting}
\end{minipage}
\begin{minipage}{0.3\textwidth}
-\includegraphics[scale=0.2]{ecran-cours-image_nb}
+\includegraphics[scale=\myscale,scale=0.2]{ecran-cours-image_nb}
\end{minipage}
\end{center}
@@ -303,7 +306,7 @@
\end{lstlisting}
\end{minipage}
\begin{minipage}{0.3\textwidth}
-\includegraphics[scale=0.2]{ecran-cours-image_gris}
+\includegraphics[scale=\myscale,scale=0.2]{ecran-cours-image_gris}
\end{minipage}
\end{center}
@@ -334,7 +337,7 @@
\end{lstlisting}
\end{minipage}
\begin{minipage}{0.3\textwidth}
-\includegraphics[scale=0.2]{ecran-cours-image_coul}
+\includegraphics[scale=\myscale,scale=0.2]{ecran-cours-image_coul}
\end{minipage}
\end{center}
@@ -362,39 +365,39 @@
\begin{enumerate}
\item Génère un fichier \ci{image_nb.pbm} qui représente une image en noir et blanc (par exemple de taille $300 \times 200$) selon le motif suivant :
\begin{center}
-\includegraphics[scale=0.5]{ecran-image_nb}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-image_nb}
\end{center}
-\emph{Indications.} Si $i$ désigne le numéro de ligne et $j$ le numéro de colonne (en partant du haut à gauche), alors le pixel en position $(i,j)$ est blanc si $i+j$ est compris entre $0$ et $9$, ou compris entre $20$ et $29$, ou entre $40$ et $49$,\ldots{} Ce qui s'obtient par la formule :\\
-\centerline{\ci{coul = (i+j)//10 \% 2}}
+\emph{Indications.} Si $i$ désigne le numéro de ligne et $j$ le numéro de colonne (en partant du haut à gauche), alors le pixel en position $(i,j)$ est blanc si $i+j$ est compris entre $0$ et $9$, ou compris entre $20$ et $29$, ou entre $40$ et $49$,\ldots{} Ce qui s'obtient par la formule :
+\mycenterline{\ci{coul = (i+j)//10 \% 2}}
qui renvoie $0$ ou $1$ comme désiré.
\item Génère un fichier \ci{image_gris.pgm} qui représente une image en niveaux de gris (par exemple de taille $200 \times 200$ avec $256$ niveaux de gris) selon le motif suivant :
\begin{center}
-\includegraphics[scale=0.7]{ecran-image_gris}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-image_gris}
\end{center}
-\emph{Indications.} Cette fois la formule est :\\
-\centerline{\ci{coul = (i**2 + j**2) \% 256}}
+\emph{Indications.} Cette fois la formule est :
+\mycenterline{\ci{coul = (i**2 + j**2) \% 256}}
qui renvoie un entier entre $0$ et $255$.
\item Génère un fichier \ci{image_coul.ppm} qui représente une image en couleurs (par exemple de taille $200 \times 200$ avec $256$ niveaux de rouge, vert et bleu) selon le motif suivant :
\begin{center}
-\includegraphics[scale=0.7]{ecran-image_coul}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-image_coul}
\end{center}
-\emph{Indications.} Cette fois la formule est :\\
-\centerline{\ci{R = (i*j) \% 256}}
-\centerline{\ci{V = i \% 256}}
-\centerline{\ci{B = (i + j)//3 \% 256}}
+\emph{Indications.} Cette fois la formule est :
+\mycenterline{\ci{R = (i*j) \% 256}}
+\mycenterline{\ci{V = i \% 256}}
+\mycenterline{\ci{B = (i + j)//3 \% 256}}
qui donne les niveaux de rouge, vert et bleu du pixel $(i,j)$.
\item Écris une fonction \ci{inverser_couleurs_nb(fichier)} qui lit un fichier image noir et blanc \ci{.pbm} et crée un nouveau fichier dans lequel les pixels blancs sont devenus noirs et inversement.
Exemple : à gauche l'image de départ, à droite l'image d'arrivée.
\begin{center}
-\includegraphics[scale=0.3]{ecran-simple_nb}\qquad\qquad
-\includegraphics[scale=0.3]{ecran-simple_nb_inverse}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-simple_nb}\qquad\qquad
+\includegraphics[scale=\myscale,scale=0.3]{ecran-simple_nb_inverse}
\end{center}
\item Écris une fonction \ci{couleurs_vers_gris(fichier)} qui lit un fichier image couleur au format \ci{.ppm} et crée un nouveau fichier au format \ci{.pgm} dans lequel les pixels couleurs sont transformés en niveaux de gris.
@@ -409,8 +412,8 @@
Exemple : à gauche l'image de départ en couleur, à droite l'image d'arrivée en niveau de gris.
\begin{center}
-\includegraphics[scale=0.5]{ecran-image_coul}\qquad\qquad
-\includegraphics[scale=0.5]{ecran-image_coul_gris}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-image_coul}\qquad\qquad
+\includegraphics[scale=\myscale,scale=0.5]{ecran-image_coul_gris}
\end{center}
@@ -440,12 +443,12 @@
\textbf{Exemple.} Voici un exemple de fichier en entrée :
\begin{center}
-\includegraphics[scale=0.7]{ecran-fichiers-4a}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-fichiers-4a}
\end{center}
Et voici le fichier de sortie produit par le programme :
\begin{center}
-\includegraphics[scale=0.7]{ecran-fichiers-4b}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-fichiers-4b}
\end{center}
On lit sur ce fichier que la distance entre Lille et Marseille est de $1077$ kilomètres.
@@ -465,12 +468,12 @@
\textbf{Exemple.} Voici un exemple de fichier en entrée :
\begin{center}
-\includegraphics[scale=0.7]{ecran-fichiers-4c}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-fichiers-4c}
\end{center}
Et voici le fichier de sortie produit par le programme :
\begin{center}
-\includegraphics[scale=0.55]{ecran-fichiers-4d}
+\includegraphics[scale=\myscale,scale=0.55]{ecran-fichiers-4d}
\end{center}
diff --git a/fonctions/fonctions.pdf b/fonctions/fonctions.pdf
index c591938..3c27af6 100644
Binary files a/fonctions/fonctions.pdf and b/fonctions/fonctions.pdf differ
diff --git a/fonctions/fonctions.tex b/fonctions/fonctions.tex
index 0ed1e91..3b22185 100644
--- a/fonctions/fonctions.tex
+++ b/fonctions/fonctions.tex
@@ -32,7 +32,7 @@
Pour définir une fonction avec \Python{}, c'est très simple.
Voici deux exemples :
\begin{center}
-\begin{minipage}{0.4\textwidth}
+\begin{minipage}{0.5\textwidth}
\begin{lstlisting}
def dit_bonjour():
print("Bonjour le monde !")
@@ -203,7 +203,10 @@
\item Dans les instructions d'une fonction, on peut bien sûr faire appel à d'autres fonctions !
- \item Il est important de bien commenter tes programmes. Pour documenter une fonction, tu peux décrire ce qu'elle fait en commençant par un \emph{docstring}\index{docstring@\emph{docstring}}\index{fonction!docstring@\emph{docstring}}, c'est-à-dire une description (en français) entourée par trois guillemets : \ci{""" Ma fonction fait ceci et cela. """} à placer juste après l'entête.
+ \item Il est important de bien commenter tes programmes. Pour documenter une fonction, tu peux décrire ce qu'elle fait en commençant par un \emph{docstring}\index{docstring@\emph{docstring}}\index{fonction!docstring@\emph{docstring}}, c'est-à-dire une description (en français) entourée par trois guillemets :
+ \mycenterline{\ci{""" Ma fonction fait ceci et cela. """}}
+
+ à placer juste après l'entête.
\item Lorsque l'on définit une fonction, les variables qui apparaissent entre les parenthèses sont appelées les \defi{paramètres} ; par contre, lorsque l'on appelle la fonction, les valeurs entre les parenthèses sont appelées les \defi{arguments}\index{argument}\index{fonction!argument}. Il y a bien sûr une correspondance entre les deux.
@@ -235,12 +238,12 @@
\item \textbf{Devises.}
\begin{enumerate}
- \item Écris une fonction \ci{conversion_euros_vers_dollars(montant)} qui dépend d'un paramètre et qui pour une somme d'argent \ci{montant}, exprimée en euros, renvoie sa valeur en dollars (tu prendras par exemple $1$ euro = $1,15$ dollar).
+ \item Écris une fonction \ci{conversion_euros_vers_dollars(montant)} qui dépend d'un paramètre et qui pour une somme d'argent \ci{montant}, exprimée en euros, renvoie sa valeur en dollars (tu prendras par exemple $1$ euro = $1.15$ dollar).
\item Écris une fonction \ci{conversion_euros(montant,devise)} qui dépend d'un paramètre \ci{montant} et d'une monnaie \ci{devise} et qui convertit la somme \ci{montant} donnée en euros, dans la devise souhaitée.
Exemples de devises :
- $1$ euro = $1,15$ dollar ;
- $1$ euro = $0,81$ livre ;
+ $1$ euro = $1.15$ dollar ;
+ $1$ euro = $0.81$ livre ;
$1$ euro = $130$ yens.
Par exemple \ci{conversion_euros(100,"livre")} renvoie $81$.
@@ -273,8 +276,9 @@
\item Utilise ta fonction précédente pour conjecturer à partir de quel rayon, l'aire d'un disque est plus grande que le périmètre de ce disque.
- \emph{Indication.} Si tu veux balayer les rayons en incrémentant la valeur de $0.1$ à chaque fois, tu peux construire une boucle ainsi :\\
- \centerline{\ci{for rayon in range(0,30):}}
+ \emph{Indication.} Si tu veux balayer les rayons en incrémentant la valeur de $0.1$ à chaque fois, tu peux construire une boucle ainsi :
+ \mycenterline{\ci{for rayon in range(0,30):}}
+
puis faire un appel à la fonction par \ci{perimetre_aire_disque(rayon/10)}.
\end{enumerate}
\end{enumerate}
@@ -295,7 +299,7 @@
\objectifs{Objectifs : définir quelques fonctions qui dessinent des figures géométriques. Créer une fonction est similaire à créer un bloc avec \emph{Scratch}.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-fonctions-tortue}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-fonctions-tortue}
\end{center}
\begin{enumerate}
diff --git a/fonctions/fonctions_4.py b/fonctions/fonctions_4.py
index 2f2d888..1bd3dfb 100644
--- a/fonctions/fonctions_4.py
+++ b/fonctions/fonctions_4.py
@@ -74,7 +74,8 @@ def test_multiplication(a,b,lang):
question = "Combien vaut le produit a x b ? "
reponse_juste = "Bravo !"
reponse_fausse = "Eh non !"
- elif lang == "anglais":
+
+ if lang == "anglais":
question = "How much is the product a x b? "
reponse_juste = "Well done!"
reponse_fausse = "It's wrong!"
diff --git a/guide/guide-biblio.pdf b/guide/guide-biblio.pdf
index c97a922..401ab19 100644
Binary files a/guide/guide-biblio.pdf and b/guide/guide-biblio.pdf differ
diff --git a/guide/guide-biblio.tex b/guide/guide-biblio.tex
index 6783779..63884c4 100644
--- a/guide/guide-biblio.tex
+++ b/guide/guide-biblio.tex
@@ -15,22 +15,25 @@ \section*{Ressources générales}
\begin{itemize}
\item \emph{Apprendre à programmer avec Python 3} de Gérard Swinnen, aux éditions Eyrolles.
C'est un des livres de référence en français pour débuter. La seconde moitié du livre contient des notions beaucoup plus avancées.
- Le livre est disponible gratuitement en téléchargement, selon la licence \emph{Creative Commons BY-NC-SA} :\\
- \centerline{
+ Le livre est disponible gratuitement en téléchargement, selon la licence \emph{Creative Commons BY-NC-SA} :
+ \mycenterline{
\href{https://inforef.be/swi/python.htm}{inforef.be/swi/python.htm}
}
- \item La documentation officielle de \Python{} contient des tutoriels et les explications de chacune des fonctions. Malheureusement certaines pages sont en anglais\\
- \centerline{
+
+ \item La documentation officielle de \Python{} contient des tutoriels et les explications de chacune des fonctions. Malheureusement certaines pages sont en anglais
+ \mycenterline{
\href{https://docs.python.org/fr/3/}{docs.python.org/fr/3/}
}
+
\item \emph{Wikipédia} est une source fiable pour en savoir plus sur certaines notions (principalement les projets) mais le niveau n'est pas toujours adapté à un lycéen.
\item \emph{Internet} et en particulier les forums ont bien souvent la réponse aux questions que tu te poses !
- \item Les plus fondus d'entre vous peuvent participer au \emph{projet Euler} (en anglais) qui propose une liste d'énigmes mathématico-informatique. Accrochez-vous !\\
- \centerline{
+ \item Les plus fondus d'entre vous peuvent participer au \emph{projet Euler} (en anglais) qui propose une liste d'énigmes mathématico-informatique. Accrochez-vous !
+ \mycenterline{
\href{https://projecteuler.net/}{projecteuler.net}
}
+
\end{itemize}
@@ -44,8 +47,8 @@ \section{Premiers pas}
\section{Tortue (Scratch avec Python)}
L'idéal c'est de bien maîtriser \emph{Scratch} avant de s'attaquer à \Python{} !
-Pour ceux qui ont zappé \emph{Scratch}, il y a les activités \emph{Scratch au collège}. Le livre et les vidéos sont disponibles ici :\\
-\centerline{
+Pour ceux qui ont zappé \emph{Scratch}, il y a les activités \emph{Scratch au collège}. Le livre et les vidéos sont disponibles ici :
+\mycenterline{
\href{http://exo7.emath.fr/}{exo7.emath.fr} \qquad et \qquad
\href{https://www.youtube.com/ScratchAuCollege}{youtube.com/ScratchAuCollege}
}
@@ -71,8 +74,8 @@ \section{Si ... alors ...}
Certains éditeurs \Python{} permettent aussi une exécution \og{}pas à pas\fg{} du programme.
On reviendra par la suite sur le \og{}vrai\fg{} et le \og{}faux\fg{}.
-Il existe aussi le test\\
-\centerline{\ci{if ... elif ... elif ... else ...}}
+Il existe aussi le test
+\mycenterline{\ci{if ... elif ... elif ... else ...}}
qui permet d'enchaîner les tests et qui n'est pas abordé ici.
Bien comprendre \ci{if ... else ...} est suffisant !
@@ -240,11 +243,11 @@ \section{L-système}
Pour les L-systèmes définis par des expressions contenant des crochets on retrouve la notion de pile.
Les formules sont tirées du livre \emph{The algorithmic beauty of plants}, par
-P.~Prusinkiewicz et A.~Lindenmayer (Springer-Verlag, 2004) en accès libre ici :
-\href{http://algorithmicbotany.org/papers/abop/abop.pdf}{\emph{The algorithmic beauty of plants} (pdf)}.
+P.~Prusinkiewicz et A.~Lindenmayer (Springer-Verlag, 2004) disponible en accès libre :
+\href{http://algorithmicbotany.org/papers/abop/abop.pdf}{\emph{The algorithmic beauty of plants}}.
-Les illustrations qui débutent chaque partie de ce livre sont des itérations du L-système appelé la courbe de Hilbert et défini par :\\
-\centerline{
+Les illustrations qui débutent chaque partie de ce livre sont des itérations du L-système appelé la courbe de Hilbert et défini par :
+\mycenterline{
\ci{depart = "X"}
\quad
\ci{regle1 = ("X","gYAdXAXdAYg")}
diff --git a/guide/guide-fonctions.pdf b/guide/guide-fonctions.pdf
index 80bc6da..1e5087f 100644
Binary files a/guide/guide-fonctions.pdf and b/guide/guide-fonctions.pdf differ
diff --git a/guide/guide-fonctions.tex b/guide/guide-fonctions.tex
index 0e69837..aa3bd48 100644
--- a/guide/guide-fonctions.tex
+++ b/guide/guide-fonctions.tex
@@ -26,8 +26,8 @@ \section{Mathématiques}
\textbf{Module \og{}math\fg{}}
-L'usage d'autres fonctions mathématiques nécessite le recours au module \ci{math} qui s'appelle par la commande :\\
-\centerline{\ci{from math import *}}
+L'usage d'autres fonctions mathématiques nécessite le recours au module \ci{math} qui s'appelle par la commande :
+\mycenterline{\ci{from math import *}}
\begin{itemize}
\item \ci{sqrt(x)}\quad racine carrée $\sqrt{x}$
@@ -41,8 +41,8 @@ \section{Mathématiques}
\textbf{Module \og{}random\fg{}}
-Le module \ci{random} génère des nombres de façon pseudo-aléatoire. Il s'appelle par la commande :\\
-\centerline{\ci{from random import *}}
+Le module \ci{random} génère des nombres de façon pseudo-aléatoire. Il s'appelle par la commande :
+\mycenterline{\ci{from random import *}}
\begin{itemize}
\item \ci{random()}\quad à chaque appel, renvoie un nombre flottant $x$ au hasard vérifiant $0 \le x < 1$.
@@ -68,7 +68,7 @@ \section{Mathématiques}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Booléens}
-Un booléen est une donnée qui prend soit la valeur \ci{True} (\og{}vrai\fg{}), soit la valeur \ci{False} (\og{}faux\fg{}).
+Un booléen est une donnée qui prend soit la valeur \ci{True} (\og{}Vrai\fg{}), soit la valeur \ci{False} (\og{}Faux\fg{}).
\bigskip
@@ -279,7 +279,7 @@ \section{Chaînes de caractères II}
Exemples :
\begin{itemize}
- \item \ci{"".join(["Etre", "ou", "ne", "pas", "etre."])} \quad renvoie \ci{'Etreounepasetre.'} Il manque les espaces.
+ \item \ci{"".join(["Etre", "ou", "ne", "pas", "etre."])} \ renvoie \ci{'Etreounepasetre.'} Il manque les espaces.
\item \ci{" ".join(["Etre", "ou", "ne", "pas", "etre."])} \ renvoie \ci{'Etre ou ne pas etre.'} C'est mieux lorsque le séparateur est une espace.
\item \ci{"--".join(["Etre", "ou", "ne", "pas", "etre."])} renvoie
@@ -360,8 +360,8 @@ \section{Listes I}
\end{lstlisting}
\end{minipage}
\end{center}
-\`A la fin \ci{liste_carres} vaut :\\
-\centerline{\ci{[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]}}
+\`A la fin \ci{liste_carres} vaut :
+\mycenterline{\ci{[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]}}
\bigskip
@@ -443,8 +443,9 @@ \section{Listes II}
\ci{liste.index(element)} renvoie la première position à laquelle l'élément a été trouvé. Exemple : avec \ci{liste = [12, 30, 5, 9, 5, 21]},
\ci{liste.index(5)} renvoie $2$.
- \item Si on souhaite juste savoir si un élément appartient à une liste, alors l'instruction :\\
- \centerline{\ci{element in liste}}
+ \item Si on souhaite juste savoir si un élément appartient à une liste, alors l'instruction :
+ \mycenterline{\ci{element in liste}}
+
renvoie \ci{True} ou \ci{False}.
Exemple : avec \ci{liste = [12, 30, 5, 9, 5, 21]},
\og\ci{9 in liste}\fg{} est vrai, alors que \og\ci{8 in liste}\fg{} est faux.
@@ -512,8 +513,8 @@ \section{Listes II}
\textbf{Liste de listes}
-Exemple : \\
- \centerline{\ci{tableau = [ [2,14,5], [3,5,7], [15,19,4], [8,6,5] ]}}
+Exemple :
+ \mycenterline{\ci{tableau = [ [2,14,5], [3,5,7], [15,19,4], [8,6,5] ]}}
correspond au tableau :
\myfigure{0.7}{
\tikzinput{fig-tableau}
@@ -641,8 +642,8 @@ \section{Fichiers}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Tortue}
-Le module \ci{turtle} s'appelle par la commande :\\
-\centerline{\ci{from turtle import *}}
+Le module \ci{turtle} s'appelle par la commande :
+\mycenterline{\ci{from turtle import *}}
\bigskip
@@ -661,7 +662,7 @@ \section{Tortue}
\item \ci{down()} \quad abaisse le stylo
\item \ci{up()} \quad relève le stylo
\item \ci{width(epaisseur)} \quad change l'épaisseur du trait
- \item \ci{color(couleur)} \quad change la couleur du trait : \ci{"red"}, \ci{"green"}, \ci{"blue"}, \ci{"orange"}, \ci{"purple"},\ldots
+ \item \ci{color(couleur)} \quad change la couleur du trait : \ci{"red"}, \ci{"green"}, \ci{"blue"}, \ci{"orange"}\ldots
\item \ci{position()} \quad renvoie la position $(x,y)$ de la tortue
\item \ci{heading()} \quad renvoie la direction \ci{angle} vers laquelle pointe la tortue
@@ -695,7 +696,7 @@ \section{Matplotlib}
Avec le module \ci{matplotlib} il est très facile de tracer une liste. Voici un exemple.
\begin{center}
-\includegraphics[scale=0.5]{../listes/ecran-liste-cours-visualisation}
+\includegraphics[scale=\myscale,scale=0.5]{../listes/ecran-liste-cours-visualisation}
\end{center}
\begin{lstlisting}
@@ -735,7 +736,7 @@ \subsection{Graphiques}
Pour afficher ceci :
\begin{center}
-\includegraphics[scale=0.6]{../statistique/ecran-stat-cours-intro}
+\includegraphics[scale=\myscale,scale=0.6]{../statistique/ecran-stat-cours-intro}
\end{center}
le code est :
\begin{lstlisting}
@@ -790,8 +791,7 @@ \subsection{Graphiques}
\textbf{Portion de cercle.}
La fonction \ci{create_arc()} n'est pas très intuitive. Il faut penser que l'on dessine un cercle, en précisant les coordonnées de deux sommets opposés d'un carré qui l'entoure, puis en précisant l'angle de début et l'angle du secteur (en degrés).
-
-\centerline{\ci{canvas.create_arc(x1,y1,x2,y2,start=debut_angle,extent=mon_angle)}}
+\mycenterline{\ci{canvas.create_arc(x1,y1,x2,y2,start=debut_angle,extent=mon_angle)}}
\myfigure{0.8}{
@@ -807,7 +807,7 @@ \subsection{Boutons}
Voici un petit programme qui affiche une fenêtre avec deux boutons. Le premier bouton change la couleur du rectangle, le second termine le programme.
\begin{center}
-\includegraphics[scale=0.6]{../statistique/ecran-stat-cours-boutons}
+\includegraphics[scale=\myscale,scale=0.6]{../statistique/ecran-stat-cours-boutons}
\end{center}
Le code est :
\begin{lstlisting}
@@ -820,15 +820,15 @@ \subsection{Boutons}
def action_bouton():
canvas.delete("all") # Efface tout
- couleurs = ["red","orange","yellow","green","cyan","blue","violet","purple"]
+ couleurs = ["red","orange","yellow","green","cyan","blue","violet"]
coul = choice(couleurs) # Couleur au hasard
canvas.create_rectangle(100,50,300,150,width=5,fill=coul)
return
-bouton_couleur = Button(root,text="Afficher", width=20, command=action_bouton)
+bouton_couleur=Button(root,text="Afficher",width=20,command=action_bouton)
bouton_couleur.pack()
-bouton_quitter = Button(root,text="Quitter", width=20, command=root.quit)
+bouton_quitter = Button(root,text="Quitter",width=20,command=root.quit)
bouton_quitter.pack()
root.mainloop()
@@ -837,11 +837,11 @@ \subsection{Boutons}
Quelques explications :
\begin{itemize}
\item On crée un bouton par la commande \ci{Button}. L'option \ci{text} personnalise le texte qui s'affiche sur le bouton. On ajoute le bouton créé à la fenêtre par la méthode \ci{pack}.
- \item Le plus important est l'action associée au bouton ! C'est l'option \ci{command} qui reçoit le nom de la fonction à exécuter lorsque le bouton est cliqué. Pour notre exemple \ci{command=action_bouton} associe au clic sur le bouton un changement de couleur.
+ \item Le plus important est l'action associée au bouton ! C'est l'option \ci{command} qui reçoit le nom de la fonction à exécuter lorsque le bouton est cliqué. Pour notre exemple \ci{command = action_bouton} associe au clic sur le bouton un changement de couleur.
- \item Attention ! il faut donner le nom de la fonction sans parenthèses : \ci{commande=ma_fonction} et pas \ci{command=ma_fonction()}.
+ \item Attention ! il faut donner le nom de la fonction sans parenthèses : \ci{command=ma_fonction} et pas \ci{command = ma_fonction()}.
- \item Pour associer au bouton \og{}Quitter\fg{} la fermeture du programme, l'argument est \ci{command=root.quit}.
+ \item Pour associer au bouton \og{}Quitter\fg{} la fermeture du programme, l'argument est \ci{command = root.quit}.
\item La commande \ci{canvas.delete("all")} efface tous les dessins de notre fenêtre graphique.
@@ -853,7 +853,7 @@ \subsection{Texte}
Voici comment afficher du texte avec \Python{} et le module des fenêtres graphiques \ci{tkinter}.
\begin{center}
-\includegraphics[scale=0.6]{../markdown/ecran-markdown-7}
+\includegraphics[scale=\myscale,scale=0.6]{../markdown/ecran-markdown-7}
\end{center}
Le code est :
\begin{lstlisting}
@@ -936,8 +936,9 @@ \subsection{Clic de souris}
\begin{itemize}
\item La création de la fenêtre est habituelle. Le programme se termine par le lancement de la fenêtre avec la commande \ci{mainloop()}.
- \item Le premier point clé est d'associer un clic de souris à une action, c'est ce que fait la ligne \\
-\centerline{\ci{canvas.bind("", action_clic_souris)}}
+ \item Le premier point clé est d'associer un clic de souris à une action, c'est ce que fait la ligne
+\mycenterline{\ci{canvas.bind("", action_clic_souris)}}
+
Chaque fois que le bouton gauche de la souris est cliqué, \Python{} exécute la fonction \ci{action_clic_souris}. Note qu'il n'y a pas de parenthèses pour l'appel à la fonction.
\item Second point clé : la fonction \ci{action_clic_souris} récupère les coordonnées du clic et ici ensuite fait deux choses : elle affiche un petit rectangle à l'endroit du clic et affiche dans la fenêtre du terminal les coordonnées $(x,y)$.
@@ -951,7 +952,7 @@ \subsection{Mouvement}
Voici un programme qui fait se déplacer un petit carré en le faisant rebondir sur les bords de la fenêtre.
\begin{center}
-\includegraphics[scale=0.5]{../aleatoire/ecran-alea-cours-mouv}
+\includegraphics[scale=\myscale,scale=0.5]{../aleatoire/ecran-alea-cours-mouv}
\end{center}
Voici les points principaux :
@@ -960,8 +961,8 @@ \subsection{Mouvement}
\item Cet objet est (un petit peu) déplacé par la fonction \ci{deplacer()} qui décale le rectangle de \ci{(dx,dy)}.
- \item Le point clé est que cette fonction sera exécutée une nouvelle fois après un court laps de temps. La commande :\\
- \centerline{\ci{canvas.after(50,deplacer)}}
+ \item Le point clé est que cette fonction sera exécutée une nouvelle fois après un court laps de temps. La commande :
+ \mycenterline{\ci{canvas.after(50,deplacer)}}
demande une nouvelle exécution de la fonction \ci{deplacer()} après un court délai (ici $50$ millisecondes).
\item La répétition de petits déplacements simule le mouvement.
@@ -1009,10 +1010,10 @@ \subsection{Mouvement}
return
# Boutons
-bouton_couleur = Button(root,text="Déplacer", width=20, command=action_deplacer)
-bouton_couleur.pack(pady=10)
+bouton_deplacer=Button(root,text="Déplacer",width=20,command=action_deplacer)
+bouton_deplacer.pack(pady=10)
-bouton_quitter = Button(root,text="Quitter", width=20, command=root.quit)
+bouton_quitter = Button(root,text="Quitter",width=20,command=root.quit)
bouton_quitter.pack(side=BOTTOM, pady=10)
root.mainloop()
diff --git a/guide/guide-python.pdf b/guide/guide-python.pdf
index be0f875..cb64559 100644
Binary files a/guide/guide-python.pdf and b/guide/guide-python.pdf differ
diff --git a/guide/guide-python.tex b/guide/guide-python.tex
index 589a5b7..bbe474d 100644
--- a/guide/guide-python.tex
+++ b/guide/guide-python.tex
@@ -222,8 +222,8 @@ \subsection{Variable globale}
Une \defi{variable globale} est une variable qui est définie pour l'ensemble du programme. Il n'est généralement pas recommandé d'utiliser de telles variables, mais cela peut être utile dans certain cas. Voyons un exemple.
-On déclare la variable globale, ici la constante de gravitation, en début de programme comme une variable classique : \\
-\centerline{\ci{gravitation = 9.81}}
+On déclare la variable globale, ici la constante de gravitation, en début de programme comme une variable classique :
+\mycenterline{\ci{gravitation = 9.81}}
La contenu de la variable \ci{gravitation} est maintenant accessible partout.
Par contre, si on souhaite changer la valeur de cette variable dans une fonction, il faut bien préciser à \Python{} que l'on est conscient de modifier une variable globale !
@@ -232,7 +232,7 @@ \subsection{Variable globale}
\begin{lstlisting}
def sur_la_lune():
- global gravitation # Oui, je veux modifier cette variable globale !
+ global gravitation # Oui, je veux modifier cette variable globale!
gravitation = 1.625 # Nouvelle valeur pour tout le programme
...
\end{lstlisting}
@@ -242,8 +242,8 @@ \subsection{Variable globale}
\subsection{Arguments optionnels}
-Il est possible de donner des arguments optionnels. Voici comment définir une fonction (ici qui dessinerait un trait) en donnant des valeurs par défaut :\\
- \centerline{\ci{def tracer(longueur, epaisseur=5, couleur="blue"):}}
+Il est possible de donner des arguments optionnels. Voici comment définir une fonction (ici qui dessinerait un trait) en donnant des valeurs par défaut :
+ \mycenterline{\ci{def tracer(longueur, epaisseur=5, couleur="blue"):}}
\begin{itemize}
\item La commande \ci{tracer(100)} trace mon trait, et comme je n'ai précisé que la longueur, les arguments \ci{epaisseur} et \ci{couleur} prennent les valeurs par défaut ($5$ et bleu).
diff --git a/images/images.pdf b/images/images.pdf
index 2915c6b..b8f9afe 100644
Binary files a/images/images.pdf and b/images/images.pdf differ
diff --git a/images/images.tex b/images/images.tex
index 84e28ef..8f816f6 100644
--- a/images/images.tex
+++ b/images/images.tex
@@ -69,21 +69,21 @@
Voici une image $256 \times 256$ et sa première transformation :
\begin{center}
-\includegraphics[scale=0.4]{images_fiche/pi_gimp_new_photo_0.png}\qquad\qquad
-\includegraphics[scale=0.4]{images_fiche/pi_gimp_new_photo_1.png}
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/pi_gimp_new_photo_0.png}\qquad\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/pi_gimp_new_photo_1.png}
\end{center}
Voici ce qui se passe si on répète plusieurs fois la transformation du photomaton :
\begin{center}
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_2.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_3.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_4.png}
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_2.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_3.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_4.png}
\end{center}
\begin{center}
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_5.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_6.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_7.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/pi_gimp_new_photo_8.png}
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_5.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_6.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_7.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/pi_gimp_new_photo_8.png}
\end{center}
L'image devient de plus en plus brouillée, mais au bout d'un certain nombre de répétitions de la transformation, on retombe sur l'image de départ !
\end{cours}
@@ -124,11 +124,11 @@
13&15&14&16
\end{array}$$
- \emph{Indications.} Tu peux initialiser un nouveau tableau par la commande :\\
- \centerline{\ci{nouv_tableau = [[0 for j in range(n)] for i in range(n)]}}
+ \emph{Indications.} Tu peux initialiser un nouveau tableau par la commande :
+ \mycenterline{\ci{nouv_tableau = [[0 for j in range(n)] for i in range(n)]}}
- Puis le remplir par des commandes du type :\\
- \centerline{\ci{nouv_tableau[ii][jj] = tableau[i][j]}}
+ Puis le remplir par des commandes du type :
+ \mycenterline{\ci{nouv_tableau[ii][jj] = tableau[i][j]}}
\item Programme une fonction \ci{photomaton_iterer(tableau,k)} qui renvoie le tableau calculé après $k$ itérations de la transformation du photomaton.
@@ -143,19 +143,19 @@
Voici l'image de départ de taille $256 \times 256$ et les images obtenues par itérations de la transformation du photomaton pour $k=1$ jusqu'à $k=8$. Au bout de $8$ itérations on retrouve l'image initiale !
\begin{center}
-\includegraphics[scale=0.4]{images_fiche/chat_gimp_new_photo_0.png}
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/chat_gimp_new_photo_0.png}
\end{center}
\begin{center}
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_1.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_2.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_3.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_4.png}
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_1.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_2.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_3.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_4.png}
\end{center}
\begin{center}
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_5.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_6.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_7.png}\qquad
-\includegraphics[scale=0.3]{images_fiche/chat_gimp_new_photo_8.png}
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_5.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_6.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_7.png}\qquad
+\includegraphics[scale=\myscale,scale=0.3]{images_fiche/chat_gimp_new_photo_8.png}
\end{center}
@@ -193,7 +193,7 @@
\end{minipage}
\begin{minipage}{0.3\textwidth}
\begin{center}
-\includegraphics[scale=0.15]{input/ecran-test-pgm}
+\includegraphics[scale=\myscale,scale=0.15]{input/ecran-test-pgm}
\end{center}
\end{minipage}
\end{center}
@@ -233,7 +233,7 @@
\medskip
-\emph{Formules.} Un élément en position $(i,j)$ du tableau d'arrivée, correspond à un élément $(2i,j//2)$ (si $j$ est pair) ou bien $(2i+1,j//2)$ (si $j$ est impair) avec ici $0 \le i < \frac n2$ et $0 \le j < 2n$.
+\emph{Formules.} Un élément en position $(i,j)$ du tableau d'arrivée, correspond à un élément $(2i,j//2)$ (si $j$ est pair) ou bien $(2i+1,j//2)$ (si $j$ est impair) du tableau de départ, avec ici $0 \le i < \frac n2$ et $0 \le j < 2n$.
\medskip
@@ -287,20 +287,20 @@
À gauche l'image initiale de taille $128 \times 128$, puis le résultat de $k=1,2,3$ itérations.
\begin{center}
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_0.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_1.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_2.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_3.png}
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_0.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_1.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_2.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_3.png}
\end{center}
Voici les images pour $k=12,13,14,15$ itérations :
\begin{center}
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_12.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_13.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_14.png}\qquad
-\includegraphics[scale=0.65]{images_fiche/surf_gimp_new_boul_15.png}
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_12.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_13.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_14.png}\qquad
+\includegraphics[scale=\myscale,scale=0.65]{images_fiche/surf_gimp_new_boul_15.png}
\end{center}
\end{cours}
@@ -358,22 +358,22 @@
Voici un exemple avec une image de taille $256 \times 256$, d'abord l'image initiale, puis une première itération ($k=1$) et une deuxième itération ($k=2$).
\begin{center}
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_0.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_1.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_2.png}
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_0.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_1.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_2.png}
\end{center}
$k=3,4,5$ :
\begin{center}
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_3.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_4.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_5.png}
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_3.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_4.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_5.png}
\end{center}
$k=15,16,17$ :
\begin{center}
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_15.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_16.png}\qquad
-\includegraphics[scale=0.4]{images_fiche/reveil_gimp_new_boul_17.png}
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_15.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_16.png}\qquad
+\includegraphics[scale=\myscale,scale=0.4]{images_fiche/reveil_gimp_new_boul_17.png}
\end{center}
Pour $k=17$ on retrouve l'image de départ !
diff --git a/listes/listes-1.pdf b/listes/listes-1.pdf
index 9e84fd4..a16e940 100644
Binary files a/listes/listes-1.pdf and b/listes/listes-1.pdf differ
diff --git a/listes/listes-1.tex b/listes/listes-1.tex
index c433044..c887f85 100644
--- a/listes/listes-1.tex
+++ b/listes/listes-1.tex
@@ -72,8 +72,8 @@
\end{lstlisting}
\end{minipage}
\end{center}
-\`A la fin \ci{liste_carres} vaut :\\
-\centerline{\ci{[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]}}
+\`A la fin \ci{liste_carres} vaut :
+\mycenterline{\ci{[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]}}
\end{itemize}
@@ -101,8 +101,8 @@
print(i,liste[i])
\end{lstlisting}
-\item Pour obtenir une liste à partir de \ci{range()} il faut écrire :\\
-\centerline{\ci{list(range(n))}}
+\item Pour obtenir une liste à partir de \ci{range()} il faut écrire :
+\mycenterline{\ci{list(range(n))}}
\end{itemize}
\end{cours}
@@ -146,18 +146,20 @@
\sauteligne
\begin{itemize}
\item \textbf{Concaténer deux listes.}\index{liste!fusionner}\index{concatenation@concaténation} Si on a deux listes, on peut les fusionner par l'opérateur \og{}\ci{+}\fg{}. Par exemple avec
- \ci{liste1 = [4,5,6]} et \ci{liste2 = [7,8,9]} \\
- \centerline{\ci{liste1 + liste2} \quad vaut \quad \ci{[4,5,6,7,8,9]}.}
+ \ci{liste1 = [4,5,6]} et \ci{liste2 = [7,8,9]}
+ \mycenterline{\ci{liste1 + liste2} \quad vaut \quad \ci{[4,5,6,7,8,9]}.}
- \item \textbf{Ajouter un élément à la fin.}\index{liste!ajouter} L'opérateur \og{}\ci{+}\fg{} fournit une autre méthode permettant d'ajouter un élément à une liste :\\
- \centerline{\ci{liste = liste + [element]}}
+ \item \textbf{Ajouter un élément à la fin.}\index{liste!ajouter} L'opérateur \og{}\ci{+}\fg{} fournit une autre méthode permettant d'ajouter un élément à une liste :
+ \mycenterline{\ci{liste = liste + [element]}}
+
Par exemple \ci{[1,2,3,4] + [5]} vaut \ci{[1,2,3,4,5]}.
Attention ! Il faut entourer l'élément à ajouter de crochets.
C'est une méthode alternative à \ci{liste.append(element)}.
- \item \textbf{Ajouter un élément au début.} Avec :\\
- \centerline{\ci{liste = [element] + liste}}
+ \item \textbf{Ajouter un élément au début.} Avec :
+ \mycenterline{\ci{liste = [element] + liste}}
+
on ajoute l'élément en début de liste.
Par exemple \ci{[5] + [1,2,3,4]} vaut \ci{[5,1,2,3,4]}.
@@ -282,8 +284,9 @@
\emph{Indications.}
\begin{itemize}
\item Commence par définir \ci{nouv_liste = list(liste)} et travaille uniquement avec cette nouvelle liste.
- \item Pour que l'indice $i$ parcourt les indices à rebours de $n-1$ à $0$, tu peux utiliser la commande :\\
-\centerline{\ci{for i in range(n-1,-1,-1):}}
+ \item Pour que l'indice $i$ parcourt les indices à rebours de $n-1$ à $0$, tu peux utiliser la commande :
+\mycenterline{\ci{for i in range(n-1,-1,-1):}}
+
En effet \ci{range(a,b,-1)} correspond à la liste décroissante des entiers $i$ vérifiant $a \ge i > b$ (comme d'habitude la borne de droite n'est pas incluse).
\end{itemize}
@@ -338,8 +341,8 @@
\end{minipage}
\end{center}
- \item \textbf{Liste de nombres premiers.} \'Ecris une fonction \ci{liste_premiers(n)} qui renvoie la liste de tous les nombres premiers strictement inférieurs à $n$. Par exemple \ci{liste_premiers(100)} renvoie la liste :\\
- \centerline{\small\ci{[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]}}
+ \item \textbf{Liste de nombres premiers.} \'Ecris une fonction \ci{liste_premiers(n)} qui renvoie la liste de tous les nombres premiers strictement inférieurs à $n$. Par exemple \ci{liste_premiers(100)} renvoie la liste :
+ \mycenterline{\small\ci{[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]}}
Pour cela, tu vas programmer un algorithme qui est une version simple du crible d'Ératosthène :
@@ -383,6 +386,7 @@
\begin{itemize}
\item Au départ la liste est
$$[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]$$
+
\item On part avec $d=2$, on élimine tous les nombres divisibles par $2$, sauf si c'est le nombre $2$ : on élimine donc $4$, $6$, $8$,\ldots, la liste est maintenant : $[2,3,5,7,9,11,13,15,17,19,21,23,25,27,29]$.
\item On continue avec $d=3$, on élimine les multiples de $3$ (sauf $3$), après ces opérations la liste est : $[2,3,5,7,11,13,17,19,23,25,29]$.
\item Avec $d=4$, on élimine les multiples de $4$ (mais il n'y en a plus).
@@ -410,7 +414,7 @@
\index{graphique}
\begin{center}
-\includegraphics[scale=0.45]{ecran-liste-cours-visualisation}
+\includegraphics[scale=\myscale,scale=0.45]{ecran-liste-cours-visualisation}
\end{center}
\begin{lstlisting}
@@ -442,12 +446,12 @@
\bigskip
-Pour afficher des points $(x_i,y_i)$ il faut fournir la listes des abscisses puis la listes des ordonnées :\\
-\centerline{\ci{plt.plot(liste_x,liste_y,color="red")}}
+Pour afficher des points $(x_i,y_i)$ il faut fournir la listes des abscisses puis la listes des ordonnées :
+\mycenterline{\ci{plt.plot(liste_x,liste_y,color="red")}}
Voici un exemple de graphe obtenu en affichant des points de coordonnées du type $(x,y)$ avec $y = x^2$.
\begin{center}
-\includegraphics[scale=0.45]{ecran-liste-cours-visualisation-bis}
+\includegraphics[scale=\myscale,scale=0.45]{ecran-liste-cours-visualisation-bis}
\end{center}
@@ -455,7 +459,7 @@
import matplotlib.pyplot as plt
liste_x = [2, 3, 5, 7, 9]
-liste_y = [4, 9,25,49,81]
+liste_y = [4, 9, 25, 49, 81]
plt.plot(liste_x,liste_y,color="red")
plt.grid()
plt.show()
@@ -475,7 +479,7 @@
\index{tir balistique}
\begin{center}
-\includegraphics[scale=0.45]{ecran-liste-I-tir-bis}
+\includegraphics[scale=\myscale,scale=0.45]{ecran-liste-I-tir-bis}
\end{center}
On tire un boulet de canon depuis l'origine $(0,0)$. L'équation de la trajectoire est donnée par la formule :
diff --git a/listes/listes-2.pdf b/listes/listes-2.pdf
index ce61106..1170694 100644
Binary files a/listes/listes-2.pdf and b/listes/listes-2.pdf differ
diff --git a/listes/listes-2.tex b/listes/listes-2.tex
index 05582d7..2f19c77 100644
--- a/listes/listes-2.tex
+++ b/listes/listes-2.tex
@@ -70,8 +70,9 @@
\ci{liste.index(5)} renvoie $2$.
\item \index{in@\ci{in}}
- Si on souhaite juste savoir si un élément appartient à une liste, alors l'instruction :\\
- \centerline{\ci{element in liste}}
+ Si on souhaite juste savoir si un élément appartient à une liste, alors l'instruction :
+ \mycenterline{\ci{element in liste}}
+
renvoie \ci{True} ou \ci{False}.
Exemple : avec \ci{liste = [12, 30, 5, 9, 5, 21]},
\og\ci{9 in liste}\fg{} est vrai, alors que \og\ci{8 in liste}\fg{} est faux.
@@ -105,11 +106,13 @@
\index{liste!de listes}
\index{tableau}
- Une liste peut contenir d'autres listes, par exemple :\\
- \centerline{\ci{maliste = [ ["Harry", "Hermione", "Ron"], [101,103] ]}}
+ Une liste peut contenir d'autres listes, par exemple :
+ \mycenterline{\ci{maliste = [ ["Harry", "Hermione", "Ron"], [101,103] ]}}
+
contient deux listes.
- Nous allons nous intéresser à des listes qui contiennent des listes d'entiers, que nous appellerons des \defi{tableaux}. Par exemple : \\
- \centerline{\ci{tableau = [ [2,14,5], [3,5,7], [15,19,4], [8,6,5] ]}}
+ Nous allons nous intéresser à des listes qui contiennent des listes d'entiers, que nous appellerons des \defi{tableaux}. Par exemple :
+ \mycenterline{\ci{tableau = [ [2,14,5], [3,5,7], [15,19,4], [8,6,5] ]}}
+
Alors \ci{tableau[i]} renvoie la sous-liste de rang $i$, alors que
\ci{tableau[i][j]} renvoie l'entier situé au rang $j$ dans la sous-liste de rang $i$. Par exemple :
\begin{itemize}
@@ -161,10 +164,10 @@
\objectifs{Objectifs : chercher à atteindre le total de $100$ dans une liste de nombres.}
On considère une liste de $n$ entiers compris entre $1$ et $99$ (inclus).
-Par exemple la liste de $n=20$ entiers :\\
-\centerline{\ci{[16,2,85,27,9,45,98,73,12,26,46,25,26,49,18,99,10,86,7,42]}}
-qui a été obtenue au hasard par la commande :\\
-\centerline{\ci{liste_20 = [randint(1,99) for i in range(20)]}}
+Par exemple la liste de $n=20$ entiers :
+\mycenterline{\ci{[16,2,85,27,9,45,98,73,12,26,46,25,26,49,18,99,10,86,7,42]}}
+qui a été obtenue au hasard par la commande :
+\mycenterline{\ci{liste_20 = [randint(1,99) for i in range(20)]}}
On cherche différentes manières de trouver des nombres de la liste dont la somme fait exactement $100$.
@@ -201,8 +204,8 @@
Dans cette activité nous travaillons avec des tableaux carrés de taille $n \times n$ contenant des entiers.
L'élément \ci{tableau} est donc une liste de $n$ listes ayant chacune $n$ éléments.
-Par exemple (avec $n=3$) : \\
-\centerline{\ci{tableau = [ [1,2,3], [4,5,6], [7,8,9] ]}}
+Par exemple (avec $n=3$) :
+\mycenterline{\ci{tableau = [ [1,2,3], [4,5,6], [7,8,9] ]}}
représente le tableau :
$$\begin{array}{ccc}1&2&3\\4&5&6\\7&8&9\end{array}$$
@@ -215,8 +218,8 @@
\item Écris une fonction \ci{somme_tout(tableau)} qui calcule la somme totale de tous les éléments. Pour l'exemple la somme totale vaut $45$.
- \item Écris une fonction \ci{affiche_tableau(tableau)} qui affiche proprement à l'écran un tableau. Tu peux utiliser la commande :\\
-\centerline{\ci{print('\{:>3d\}'.format(tableau[i][j]), end="")}}
+ \item Écris une fonction \ci{affiche_tableau(tableau)} qui affiche proprement à l'écran un tableau. Tu peux utiliser la commande :
+\mycenterline{\ci{print('\{:>3d\}'.format(tableau[i][j]), end="")}}
\emph{Explications.}
\begin{itemize}
@@ -281,10 +284,10 @@
3&8&1\\2&4&6\\7&0&5
\end{array}$$
-\emph{Indications.} Pour définir un nouveau carré, commence par le remplir avec des $0$ :\\
-\centerline{\ci{nouv_carre = [[0 for j in range(n)] for i in range(n)]}}
-puis remplis-le avec les bonnes valeurs par des commandes du type :\\
-\centerline{\ci{nouv_carre[i][j] = ...}}
+\emph{Indications.} Pour définir un nouveau carré, commence par le remplir avec des $0$ :
+\mycenterline{\ci{nouv_carre = [[0 for j in range(n)] for i in range(n)]}}
+puis remplis-le avec les bonnes valeurs par des commandes du type :
+\mycenterline{\ci{nouv_carre[i][j] = ...}}
\item \textbf{Multiplication.} Définis une fonction \ci{multiplication_carre(carre,k)}
qui multiplie par $k$ tous les éléments du carré. Avec l'exemple du carré $3\times 3$, la commande \ci{multiplication_carre(carre,2)} multiplie tous les éléments par $2$ et renvoie donc un tableau qui s'afficherait ainsi :
@@ -336,7 +339,7 @@
\end{array}
$$
-\item \textbf{Addition de blocs.} Définis une fonction \ci{addition_bloc_carre(grand_carre,petit_carre)} qui ajoute par bloc un petit carré au grand carré comme sur l'exemple ci-dessous. Le petit carré $2 \times 2$ à gauche est ajouté au grand carré au centre pour donner le résultat à droite. Pour cette addition le grand carré est décomposé en $9$ blocs, il y a en tout $36$ additions.
+\item \textbf{Addition de blocs.} Définis une fonction \ci{addition_bloc_carre(grand_carre,petit_carre)} qui ajoute par bloc un petit carré de taille $n \times n$ au grand carré de taille $nm \times nm$ comme sur l'exemple ci-dessous avec $n=2$ et $m=3$ (donc $nm=6$). Le petit carré $2 \times 2$ à gauche est ajouté au grand carré au centre pour donner le résultat à droite. Pour cette addition le grand carré est décomposé en $9$ blocs, il y a en tout $36$ additions.
$$
\begin{array}{cc}
1& 2 \\
@@ -373,7 +376,7 @@
\item Sortie : un carré magique $C$ de taille $(nm)\times(nm)$.
\end{itemize}
- \item Définis le carré $C_{3a}$ en retirant $1$ à tous les éléments de $C_2$. (Utilise la commande \ci{addition(carre2,-1)}.)
+ \item Définis le carré $C_{3a}$ en retirant $1$ à tous les éléments de $C_2$. (Utilise la commande \ci{addition_carre(carre2,-1)}.)
\item Définis le carré $C_{3b}$ comme l'homothétie du carré $C_{3a}$ de rapport $n$. (Utilise la commande \ci{homothetie(carre3a,n)}.)
diff --git a/listes/listes_I_cours.py b/listes/listes_I_cours.py
index d93e39e..04e31a7 100644
--- a/listes/listes_I_cours.py
+++ b/listes/listes_I_cours.py
@@ -26,7 +26,7 @@
# plt.show()
liste_x = [2, 3, 5, 7, 9]
-liste_y = [4, 9,25,49,81]
+liste_y = [4, 9, 25, 49, 81]
plt.plot(liste_x,liste_y,color="red")
plt.grid()
plt.show()
diff --git a/livre-python1-print.pdf b/livre-python1-print.pdf
new file mode 100644
index 0000000..f571f4c
Binary files /dev/null and b/livre-python1-print.pdf differ
diff --git a/livre-python1-print.tex b/livre-python1-print.tex
index e975fbb..47dbb2d 100644
--- a/livre-python1-print.tex
+++ b/livre-python1-print.tex
@@ -1,5 +1,5 @@
%\documentclass[11pt]{report}
-\documentclass[11pt,twoside,openright]{report}
+\documentclass[10pt,twoside,openright]{report}
%\usepackage[screen]{python}
\usepackage[print]{python}
@@ -34,6 +34,7 @@ \part{Mise en route}
% 2 - Tortue (Scratch avec Python)
\import{tortue/}{tortue.tex}
+
%======================================
% Fondamentaux
%======================================
@@ -97,7 +98,7 @@ \part{Projets}
\import{piles/}{piles.tex}
% 4 - Markdown
-\import{markdown/}{markdown.tex}
+\import{markdown/}{texte_markdown.tex}
% 5 - L-systèmes
\import{lsysteme/}{lsysteme.tex}
@@ -153,11 +154,12 @@ \part{Guides}
\import{divers/}{postface_livre_python.tex}
+
\vfill
\bigskip
\bigskip
-\centerline{Version 1.01 -- Juin 2018}
+\mycenterline{Version 1.03 -- Avril 2019}
diff --git a/livre-python1.pdf b/livre-python1.pdf
index 5ab9533..4894e35 100644
Binary files a/livre-python1.pdf and b/livre-python1.pdf differ
diff --git a/livre-python1.tex b/livre-python1.tex
index ba542a3..d0a4f49 100644
--- a/livre-python1.tex
+++ b/livre-python1.tex
@@ -16,12 +16,9 @@
\debutchapitres
\pagenumbering{arabic}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Les feuilles
\clearemptydoublepage
-
%======================================
% Introduction
%======================================
@@ -98,7 +95,7 @@ \part{Projets}
\import{piles/}{piles.tex}
% 4 - Markdown
-\import{markdown/}{markdown.tex}
+\import{markdown/}{texte_markdown.tex}
% 5 - L-systèmes
\import{lsysteme/}{lsysteme.tex}
@@ -157,7 +154,7 @@ \part{Guides}
\bigskip
\bigskip
-\centerline{Version 1.01 -- Juin 2018}
+\mycenterline{Version 1.03 -- Avril 2019}
diff --git a/lsysteme/lsysteme.pdf b/lsysteme/lsysteme.pdf
index f14fd94..4d0be6a 100644
Binary files a/lsysteme/lsysteme.pdf and b/lsysteme/lsysteme.pdf differ
diff --git a/lsysteme/lsysteme.tex b/lsysteme/lsysteme.tex
index de2b495..36c0d80 100644
--- a/lsysteme/lsysteme.tex
+++ b/lsysteme/lsysteme.tex
@@ -15,7 +15,7 @@
}
\begin{center}
-\includegraphics[scale=0.3]{ecran-lsysteme-14}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-lsysteme-14}
\end{center}
\index{lsysteme@L-système}
@@ -31,8 +31,8 @@
\begin{cours}[L-système]
Un \defi{L-système} est la donnée d'un mot initial et de règles de remplacement.
-Voici un exemple avec le mot de départ et une seule règle : \\
-\centerline{\mot{BgAdB} \qquad \mot{A} $\rightarrow$ \mot{ABA}}
+Voici un exemple avec le mot de départ et une seule règle :
+\mycenterline{\mot{BgAdB} \qquad \mot{A} $\rightarrow$ \mot{ABA}}
Le \defi{$k$-ème itéré} du L-système s'obtient en appliquant $k$ fois la substitution au mot de départ.
@@ -47,8 +47,7 @@
Lorsqu'il y a deux règles (ou plus) il faut les appliquer en même temps.
Voici un exemple de L-système à deux règles :
- \\
-\centerline{\mot{A} \qquad \mot{A} $\rightarrow$ \mot{BgA} \qquad \mot{B} $\rightarrow$ \mot{BB}}
+\mycenterline{\mot{A} \qquad \mot{A} $\rightarrow$ \mot{BgA} \qquad \mot{B} $\rightarrow$ \mot{BB}}
Avec notre exemple :
\begin{itemize}
\item Première itération. Le mot de départ est \mot{A}, on applique la première règle \mot{A} $\rightarrow$ \mot{BgA} (la seconde règle ne s'applique pas, car il n'y a pas encore de \mot{B}): on obtient le mot \mot{BgA}.
@@ -68,16 +67,16 @@
Je veux programmer une fonction qui trace un trait d'une longueur donnée, avec la possibilité de changer l'épaisseur du trait et la couleur.
-Une méthode serait de définir une fonction par : \\
- \centerline{\ci{def tracer(longueur, epaisseur, couleur):}}
- Je l'appellerais alors par exemple par :\\
- \centerline{\ci{tracer(100, 5, "blue"):}}
+Une méthode serait de définir une fonction par :
+ \mycenterline{\ci{def tracer(longueur, epaisseur, couleur):}}
+ Je l'appellerais alors par exemple par :
+ \mycenterline{\ci{tracer(100, 5, "blue"):}}
Mais comme mes traits auront le plupart du temps l'épaisseur $5$ et la couleur bleue, je perds du temps et de la lisibilité en redonnant ces informations à chaque fois.
\medskip
-Avec \Python{} il est possible de donner des arguments optionnels. Voici une meilleure façon de faire en donnant des valeurs par défaut :\\
- \centerline{\ci{def tracer(longueur, epaisseur=5, couleur="blue"):}}
+Avec \Python{} il est possible de donner des arguments optionnels. Voici une meilleure façon de faire en donnant des valeurs par défaut :
+ \mycenterline{\ci{def tracer(longueur, epaisseur=5, couleur="blue"):}}
\begin{itemize}
\item La commande \ci{tracer(100)} trace mon trait, et comme je n'ai précisé que la longueur, les arguments \ci{epaisseur} et \ci{couleur} prennent les valeurs par défaut ($5$ et bleu).
@@ -122,7 +121,7 @@
Par exemple : \ci{trace_lsysteme("AgAdAAdAdA")} affiche ceci :
\begin{center}
-\includegraphics[scale=0.6]{ecran-lsysteme-1}
+\includegraphics[scale=\myscale,scale=0.6]{ecran-lsysteme-1}
\end{center}
\end{activite}
@@ -139,7 +138,7 @@
\objectifs{Objectifs : tracer le flocon de Koch à partir d'un mot obtenu par itérations.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-lsysteme-2}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-lsysteme-2}
\end{center}
\begin{enumerate}
@@ -155,24 +154,26 @@
\item \ci{regle = ("A","AgAdAdAgA")} c'est-à-dire \mot{A} $\rightarrow$ \mot{AgAdAdAgA}
\item pour \ci{k = 0}, la fonction renvoie le mot de départ \ci{A},
\item pour \ci{k = 1}, la fonction renvoie \ci{AgAdAdAgA},
- \item pour \ci{k = 2}, la fonction renvoie :\\ \centerline{\ci{AgAdAdAgAgAgAdAdAgAdAgAdAdAgAdAgAdAdAgAgAgAdAdAgA}}
+ \item pour \ci{k = 2}, la fonction renvoie :
+ \mycenterline{\ci{AgAdAdAgAgAgAdAdAgAdAgAdAdAgAdAgAdAdAgAgAgAdAdAgA}}
+
\item pour \ci{k = 3}, la fonction renvoie : \ci{AgAdAdAgAgA...} un mot de $249$ lettres.
\end{itemize}
- \item Trace les premières images du flocon de Koch donné comme ci-dessus par : \\
- \centerline{départ : \mot{A} \qquad règle : \mot{A} $\rightarrow$ \mot{AgAdAdAgA}}
+ \item Trace les premières images du flocon de Koch donné comme ci-dessus par :
+ \mycenterline{départ : \mot{A} \qquad règle : \mot{A} $\rightarrow$ \mot{AgAdAdAgA}}
Ici les images pour $k=1$ jusqu'à $k=5$.
Pour $k=1$, le mot est \mot{AgAdAdAgA} et tu peux vérifier le tracé sur la première image.
\begin{center}
-\includegraphics[scale=0.22]{ecran-lsysteme-3a}
-\includegraphics[scale=0.22]{ecran-lsysteme-3b}
-\includegraphics[scale=0.22]{ecran-lsysteme-3c}
-\includegraphics[scale=0.22]{ecran-lsysteme-3d}
-\includegraphics[scale=0.22]{ecran-lsysteme-3e}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-3a}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-3b}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-3c}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-3d}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-3e}
\end{center}
\item Trace d'autres figures fractales à partir des L-systèmes suivants. Pour tous ces exemples le mot de départ est \ci{"AdAdAdA"} (un carré) et la règle est à choisir parmi :
@@ -180,7 +181,7 @@
\medskip
\begin{itemize}
- \item \ci{("A"," AdAgAgAAdAdAgA")}
+ \item \ci{("A","AdAgAgAAdAdAgA")}
\item \ci{("A","AgAAdAAdAdAgAgAAdAdAgAgAAgAAdA")}
\item \ci{("A","AAdAdAdAdAA")}
\item \ci{("A","AAdAddAdA")}
@@ -193,9 +194,9 @@
\medskip
\begin{center}
-\includegraphics[scale=0.3]{ecran-lsysteme-4}\quad
-\includegraphics[scale=0.2]{ecran-lsysteme-5}\quad
-\includegraphics[scale=0.27]{ecran-lsysteme-6}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-lsysteme-4}\quad
+\includegraphics[scale=\myscale,scale=0.2]{ecran-lsysteme-5}\quad
+\includegraphics[scale=\myscale,scale=0.27]{ecran-lsysteme-6}
\end{center}
@@ -219,7 +220,7 @@
\index{triangle de Sierpinski}
\begin{center}
-\includegraphics[scale=0.35]{ecran-lsysteme-7e}
+\includegraphics[scale=\myscale,scale=0.35]{ecran-lsysteme-7e}
\end{center}
\begin{enumerate}
@@ -239,27 +240,28 @@
\item \ci{regle2 = ("B","BB")} c'est-à-dire \mot{B} $\rightarrow$ \mot{BB}
\item pour \ci{k = 0}, la fonction renvoie le mot de départ \ci{AdBdB},
\item pour \ci{k = 1}, la fonction renvoie \ci{AdBgAgBdAdBBdBB},
- \item pour \ci{k = 2}, la fonction renvoie :\\
- \centerline{\ci{AdBgAgBdAdBBgAdBgAgBdAgBBdAdBgAgBdAdBBBBdBBBB}}
+ \item pour \ci{k = 2}, la fonction renvoie :
+ \mycenterline{\ci{AdBgAgBdAdBBgAdBgAgBdAgBBdAdBgAgBdAdBBBBdBBBB}}
\end{itemize}
- \item Trace les premières images du triangle de Sierpinski donné comme ci-dessus par : \\
- \centerline{départ : \mot{AdBdB} \qquad règles : \mot{A} $\rightarrow$ \mot{AdBgAgBdA} \quad \mot{B} $\rightarrow$ \mot{BB}}
+ \item Trace les premières images du triangle de Sierpinski donné comme ci-dessus par :
+ \mycenterline{départ : \mot{AdBdB} \qquad règles : \mot{A} $\rightarrow$ \mot{AdBgAgBdA} \quad \mot{B} $\rightarrow$ \mot{BB}}
+
L'angle est de $-120$ degrés. Voici les images pour $k=0$ jusqu'à $k=4$.
\begin{center}
-\includegraphics[scale=0.22]{ecran-lsysteme-7a}
-\includegraphics[scale=0.22]{ecran-lsysteme-7b}
-\includegraphics[scale=0.22]{ecran-lsysteme-7c}
-\includegraphics[scale=0.22]{ecran-lsysteme-7d}
-\includegraphics[scale=0.22]{ecran-lsysteme-7e}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-7a}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-7b}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-7c}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-7d}
+\includegraphics[scale=\myscale,scale=0.22]{ecran-lsysteme-7e}
\end{center}
\item Trace d'autres figures fractales à partir des L-systèmes suivants.
\begin{itemize}
- \item La courbe du dragon :\\
-\centerline{\ci{
+ \item La courbe du dragon :
+\mycenterline{\ci{
depart="AX"
regle1=("X","XgYAg")
regle2=("Y","dAXdY")
@@ -267,26 +269,24 @@
Les lettres \ci{X} et \ci{Y} ne correspondent à aucune action.
- \item Une variante du triangle de Sierpinski, avec \ci{angle = 60} :\\
-\centerline{\ci{
+ \item Une variante du triangle de Sierpinski, avec \ci{angle = 60} :
+\mycenterline{\ci{
depart="A"
regle1=("A","BdAdB")
regle2=("B","AgBgA")
}}
-\item La courbe de Gosper, avec \ci{angle = 60} :\\
-\centerline{\ci{
-depart="A"
-regle1=("A","AgBggBdAddAAdBg")
-regle2=("B","dAgBBggBgAddAdB")
-}}
+\item La courbe de Gosper, avec \ci{angle = 60} :
+\mycenterline{\ci{depart="A"}}
+\mycenterline{\ci{regle1=("A","AgBggBdAddAAdBg")}}
+\mycenterline{\ci{regle2=("B","dAgBBggBgAddAdB")}}
\end{itemize}
\begin{center}
-\includegraphics[scale=0.15]{ecran-lsysteme-8}\quad
-\includegraphics[scale=0.33]{ecran-lsysteme-9}\quad
-\includegraphics[scale=0.24]{ecran-lsysteme-10}
+\includegraphics[scale=\myscale,scale=0.15]{ecran-lsysteme-8}\quad
+\includegraphics[scale=\myscale,scale=0.33]{ecran-lsysteme-9}\quad
+\includegraphics[scale=\myscale,scale=0.24]{ecran-lsysteme-10}
\end{center}
@@ -312,9 +312,10 @@
\item On modélise une pile par une liste.
\item Au départ la pile est vide : \ci{pile = []}.
- \item \textbf{Empiler.} On ajoute les éléments en fin de liste : \ci{pile = pile + [element]}.
- \item \textbf{Dépiler.} On retire un élément par la commande \ci{pop()}\index{pop@\ci{pop}}\index{depiler@dépiler} :\\
- \centerline{\ci{element = pile.pop()}}
+ \item \textbf{Empiler.} On ajoute les éléments en fin de liste : \ci{pile.append(element)} ou bien \ci{pile = pile + [element]}.
+ \item \textbf{Dépiler.} On retire un élément par la commande \ci{pop()}\index{pop@\ci{pop}}\index{depiler@dépiler} :
+ \mycenterline{\ci{element = pile.pop()}}
+
qui renvoie le dernier élément de la pile et le supprime de la liste.
\item Sur le dessin et dans l'activité suivante, les éléments de la pile sont du type $\big((x,y),\theta\big)$ qui stockeront un état de la tortue : $(x,y)$ est la position et $\theta$ sa direction.
@@ -333,7 +334,7 @@
\objectifs{Objectifs : améliorer nos tracés en autorisant d'avancer sans tracer et aussi à l'aide d'une sorte de retour en arrière, afin de tracer des plantes.}
\begin{center}
-\includegraphics[scale=0.25]{ecran-lsysteme-17}
+\includegraphics[scale=\myscale,scale=0.27]{ecran-lsysteme-17}
\end{center}
\begin{enumerate}
@@ -349,7 +350,7 @@
\item \ci{regle2 = ("a","aaaaaa")}
\end{itemize}
\begin{center}
-\includegraphics[scale=0.2]{ecran-lsysteme-11}
+\includegraphics[scale=\myscale,scale=0.2]{ecran-lsysteme-11}
\end{center}
\item \textbf{Retour en arrière.}
@@ -422,9 +423,9 @@
\end{itemize}
\begin{center}
-\includegraphics[scale=0.27]{ecran-lsysteme-15}\qquad
-\includegraphics[scale=0.25]{ecran-lsysteme-16}\qquad
-\includegraphics[scale=0.25]{ecran-lsysteme-12}
+\includegraphics[scale=\myscale,scale=0.27]{ecran-lsysteme-15}\qquad
+\includegraphics[scale=\myscale,scale=0.25]{ecran-lsysteme-16}\qquad
+\includegraphics[scale=\myscale,scale=0.25]{ecran-lsysteme-12}
\end{center}
diff --git a/markdown/markdown.pdf b/markdown/markdown.pdf
index 05dae8f..612f5db 100644
Binary files a/markdown/markdown.pdf and b/markdown/markdown.pdf differ
diff --git a/markdown/texte_markdown.pdf b/markdown/texte_markdown.pdf
new file mode 100644
index 0000000..cff0d3a
Binary files /dev/null and b/markdown/texte_markdown.pdf differ
diff --git a/markdown/markdown.tex b/markdown/texte_markdown.tex
similarity index 99%
rename from markdown/markdown.tex
rename to markdown/texte_markdown.tex
index fd0c536..341e553 100644
--- a/markdown/markdown.tex
+++ b/markdown/texte_markdown.tex
@@ -301,7 +301,7 @@
Exemple : \ci{coupures_simples(longueurs)} où \ci{longueurs} est l'exemple donné ci-dessus, renvoie la liste \ci{[0, 9, 17, 27, 39, 49, 50]}. C'est-à-dire que :
\begin{itemize}
- \item la première ligne correspond aux indices $0$ à $8$ (donnés pas \ci{range(0,9)}),
+ \item la première ligne correspond aux indices $0$ à $8$ (donnés par \ci{range(0,9)}),
\item la deuxième ligne correspond aux indices $9$ à $16$ (donnés par \ci{range(9,17)}),
\item la troisième ligne correspond aux indices $17$ à $26$ (donnés par \ci{range(17,27)}),
\item \ldots
diff --git a/piles/fig-piles3.tikz b/piles/fig-piles3.tikz
index 29fabe5..972972f 100644
--- a/piles/fig-piles3.tikz
+++ b/piles/fig-piles3.tikz
@@ -23,7 +23,7 @@
\begin{scope}[xshift=10cm]
-\node at (0,1) {\bf\texttt{pile = [4,2,11,7]}};
+\node[scale=1.1] at (0,1) {\bf\texttt{pile = [4,2,11,7]}};
\node at (0,-2) {\bf Mod\`ele sous forme de liste};
\end{scope}
diff --git a/piles/piles.pdf b/piles/piles.pdf
index f209641..0929720 100644
Binary files a/piles/piles.pdf and b/piles/piles.pdf differ
diff --git a/piles/piles.tex b/piles/piles.tex
index 5c18dfa..104b7bb 100644
--- a/piles/piles.tex
+++ b/piles/piles.tex
@@ -37,7 +37,7 @@
\tikzinput{fig-piles1}
}
-\myfigure{0.5}{
+\myfigure{0.45}{
\tikzinput{fig-piles2}
}
@@ -65,8 +65,8 @@
Une \defi{variable globale} est une variable qui est définie pour l'ensemble du programme. Il n'est généralement pas recommandé d'utiliser de telles variables mais cela peut être utile dans certain cas. Voyons un exemple.
-On déclare la variable globale, ici la constante de gravitation, en début de programme comme une variable classique : \\
-\centerline{\ci{gravitation = 9.81}}
+On déclare la variable globale, ici la constante de gravitation, en début de programme comme une variable classique :
+\mycenterline{\ci{gravitation = 9.81}}
La contenu de la variable \ci{gravitation} est maintenant accessible partout.
Par contre, si on souhaite changer la valeur de cette variable dans une fonction, il faut bien préciser à \Python{} que l'on est conscient de modifier une variable globale !
@@ -75,7 +75,7 @@
\begin{lstlisting}
def sur_la_lune():
- global gravitation # Oui, je veux modifier cette variable globale !
+ global gravitation # Oui, je veux modifier cette variable globale!
gravitation = 1.625 # Nouvelle valeur pour tout le programme
...
\end{lstlisting}
@@ -99,8 +99,8 @@
}
La pile sera stockée dans une variable globale \ci{pile}.
-Il faut commencer chaque fonction qui modifie la pile par la commande : \\
-\centerline{\ci{global pile}}
+Il faut commencer chaque fonction qui modifie la pile par la commande :
+\mycenterline{\ci{global pile}}
\begin{enumerate}
@@ -226,10 +226,10 @@
Rappelons que l'on peut convertir une chaîne en un entier par la commande \ci{int(chaine)}. Le petit programme suivant teste si une chaîne peut être convertie en un entier positif :
\begin{lstlisting}
-machaine = "1789" # Une chaîne
+machaine = "1789" # Une chaîne
if machaine.isdigit():
- monentier = int(chaine) # monentier est un entier
-else: # Problème
+ monentier = int(machaine) # monentier est un entier
+else: # Problème
print("Je ne sais pas convertir la chaîne en un entier !")
\end{lstlisting}
@@ -301,7 +301,7 @@
\end{itemize}
-En suivant les instructions du chef de gare, écris une fonction \ci{tri_wagons()} qui sépare les wagons bleus et rouges d'un train.
+En suivant les instructions du chef de gare et en utilisant les opérations sur une pile, écris une fonction \ci{tri_wagons()} qui sépare les wagons bleus et rouges d'un train.
\begin{fonction}[\ci{tri_wagons()}]
@@ -624,9 +624,9 @@
tant que la pile n'est pas vide : \\
\indentation dépiler un élément,\\
\indentation si cet élément est l'opérateur de multiplication \ci{"*"}, alors :\\
- \indentation \indentation ajouter cet élément à la chaîne de sortie \ci{polonaise}\\
+ \indentation \indentation ajouter cet élément \ci{"*"} à la chaîne de sortie \ci{polonaise}\\
\indentation sinon :\\
- \indentation \indentation empiler cet élément (on le remet sur la pile après l'avoir enlevé)\\
+ \indentation \indentation empiler cet élément \ci{"*"} (on le remet sur la pile après l'avoir enlevé)\\
\indentation \indentation terminer immédiatement la boucle \og{}tant que\fg{} (avec \ci{break})\\
enfin, ajouter l'opérateur d'addition \ci{"+"} à la pile.
@@ -681,8 +681,9 @@
\begin{itemize}
\item Définis une expression \ci{exp = "( 17 * ( 2 + 3 ) ) + ( 4 + ( 8 * 5 ) )"}
\item Demande à \Python{} de calculer cette expression : \ci{eval(exp)}.\index{eval@\ci{eval}} \Python{} renvoie \ci{129}.
- \item Convertis l'expression en écriture polonaise : \ci{ecriture_polonaise(exp)} renvoie \\
- \centerline{ \ci{"17 2 3 + * 4 8 5 * + +"} }
+ \item Convertis l'expression en écriture polonaise : \ci{ecriture_polonaise(exp)} renvoie
+ \mycenterline{ \ci{"17 2 3 + * 4 8 5 * + +"} }
+
\item Avec ta calculatrice calcule le résultat : \ci{calculatrice_polonaise("17 2 3 + * 4 8 5 * + +")} renvoie \ci{129}. On obtient bien le même résultat !
\end{itemize}
diff --git a/premiers_pas/premiers_pas.pdf b/premiers_pas/premiers_pas.pdf
index 91267d7..3515b56 100644
Binary files a/premiers_pas/premiers_pas.pdf and b/premiers_pas/premiers_pas.pdf differ
diff --git a/premiers_pas/premiers_pas.tex b/premiers_pas/premiers_pas.tex
index 41a3f28..3d27a0d 100644
--- a/premiers_pas/premiers_pas.tex
+++ b/premiers_pas/premiers_pas.tex
@@ -69,7 +69,7 @@
$$(1+2)\times(3+4)\times(5+6)\times(7+8)\times\cdots$$
\item Quels sont les trois derniers chiffres de
- $$\underbrace{123456789 \times 123456789 \times \cdots}_{7 \text{ occurrences de } 123456789} \quad ?$$
+ $$123456789 \times 123456789 \times 123456789 \times 123456789 \times 123456789 \times 123456789 \times 123456789 \quad ?$$
\item $7$ est le premier entier tel que son inverse a une écriture décimale périodique de longueur $6$ :
$$\frac{1}{7} = 0.\underbrace{142857}\underbrace{142857}\underbrace{142857}\ldots$$ Trouve le premier entier dont l'inverse a une écriture décimale périodique de longueur $7$ :
@@ -449,8 +449,8 @@
Attention ! la liste s'arrête bien à $n-1$ et pas à $n$. Ce qu'il faut retenir
c'est que la liste contient bien $n$ éléments (car elle commence à $0$).
- \item Si tu veux afficher la liste des éléments parcourus, il faut utiliser la commande :\\
- \centerline{\ci{list(range(10))}}
+ \item Si tu veux afficher la liste des éléments parcourus, il faut utiliser la commande :
+ \mycenterline{\ci{list(range(10))}}
\item Avec \ci{range(a,b)} on parcourt les éléments de $a$ à $b-1$.
Par exemple \ci{range(10,20)} correspond à la liste \ci{[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}.
@@ -516,7 +516,7 @@
\end{itemize}
\item Cherche une valeur approchée que doit avoir
- le rayon $R$ d'une boule afin que son volume soit $100$ ?
+ le rayon $R$ d'une boule afin que son volume soit $100$.
\emph{Indications.}
\begin{itemize}
@@ -547,8 +547,9 @@
\emph{Indications.} Commence par définir une variable \ci{produit} initialisée à la valeur $1$. Utilise \ci{range(a,b,2)} pour obtenir un entier sur deux.
- \item Affiche les tables de multiplication entre $1$ et $10$. Voici un exemple de ligne à afficher :\\
- \centerline{\ci{7 x 9 = 63}}
+ \item Affiche les tables de multiplication entre $1$ et $10$. Voici un exemple de ligne à afficher :
+ \mycenterline{\ci{7 x 9 = 63}}
+
Utilise une commande d'affichage du style : \ci{print(a,"x",b,"=",a*b)}.
\end{enumerate}
\end{activite}
diff --git a/premiers_pas/premiers_pas_1.py b/premiers_pas/premiers_pas_1.py
index 9aa3b12..0f5148f 100644
--- a/premiers_pas/premiers_pas_1.py
+++ b/premiers_pas/premiers_pas_1.py
@@ -56,7 +56,7 @@
# Q2
# A partir dans quand plus grand qu'un milliard
print("--- Question 2 ---")
-print((1+2)*(3+4)*(5+6)*(7+8)*(9+10)*(11+12)*(13+14)*(14+15))
+print((1+2)*(3+4)*(5+6)*(7+8)*(9+10)*(11+12)*(13+14)*(15+16))
# Q3
diff --git a/premiers_pas/premiers_pas_4.py b/premiers_pas/premiers_pas_4.py
index a7361bb..336e87f 100644
--- a/premiers_pas/premiers_pas_4.py
+++ b/premiers_pas/premiers_pas_4.py
@@ -70,7 +70,7 @@
print("x =",x,"y =",y)
# Q4
-# Aire d'un disque qui vaut 100
+# Volume d'une boule qui vaut 100
for i in range(50):
R = i/10
V = 4/3 * 3.14 * R**3
diff --git a/proba/proba.pdf b/proba/proba.pdf
index c089c17..47febf7 100644
Binary files a/proba/proba.pdf and b/proba/proba.pdf differ
diff --git a/python-common.sty b/python-common.sty
index 1d03d13..f664f05 100644
--- a/python-common.sty
+++ b/python-common.sty
@@ -19,7 +19,7 @@
\fi
% ----------------------------------------------------------------------
% Pour la francisation du LaTeX
-\usepackage[francais]{babel}
+\usepackage[french]{babel}
% Pour ne pas modifier les espacements standard dans les listes et les retraits
%\frenchbsetup{StandardLayout=true}
\frenchbsetup{ReduceListSpacing=true}
diff --git a/python-minimal.sty b/python-minimal.sty
index b080a6b..5bf2476 100644
--- a/python-minimal.sty
+++ b/python-minimal.sty
@@ -111,6 +111,4 @@ pdftitle={Exo7 - Cours de mathématiques}, pdfauthor={Exo7}}
% ----------------------------------------------------------------------
% Constantes pour l'inclusion des figures
-\newcommand{\scalebloc}{0.35}
-\newcommand{\scalesolution}{0.27}
-\newcommand{\scaleecran}{0.35}
\ No newline at end of file
+\newcommand{\myscale}{1}
diff --git a/python-print.sty b/python-print.sty
index 3522da2..17b7bca 100644
--- a/python-print.sty
+++ b/python-print.sty
@@ -4,10 +4,13 @@
% ----------------------------------------------------------------------
% Format de la page
\usepackage[
- papersize={8.5in,11in},%papersize={7.5in,9.25in}
+ papersize={7.5in,9.25in},
+ % old Python/Scratch papersize={8.5in,11in},
+ % algebre/analyse papersize={7.5in,9.25in},
nomarginpar, nofoot,
- margin = 0.9in,
- %top=0.5in,
+ margin = 0.7in,
+ %old margin = 0.9in,
+ %top=0.9in,
%right=0.8in, left=0.8in, top=0.5in, bottom=0.7in,
bindingoffset=0.5in,
headsep=21pt, heightrounded,
@@ -34,10 +37,10 @@
\ifXeTeX\else
\tikzifexternalizing{}{
\pdfinfo{
- /Title (Cours de mathématiques - Première année)
- /Author (exo7)
- /Subject (cours de mathématiques)
- /Keywords (cours, mathématiques, exercices)
+ /Title (Python au lycée - tome 1)
+ /Author (Arnaud Bodin)
+ /Subject (algorithmes et programmation)
+ /Keywords (informatique, mathématiques, algorithme, python)
/GTS_PDFXVersion (PDF/X-3:2002)
}%
\pdfcatalog{
@@ -78,7 +81,7 @@
\fi
-\usepackage[charter]{mathdesign}
+\usepackage[charter,cal=cmcal]{mathdesign}
% Police pour l'entete
@@ -452,9 +455,8 @@
% ----------------------------------------------------------------------
% Constantes pour l'inclusion des figures
-\newcommand{\scalebloc}{1.1}
-\newcommand{\scaleecran}{0.27}
-\newcommand{\scalesolution}{0.7}
+\newcommand{\myscale}{0.8}
+
% Pour afficher/cacher les solutions
@@ -479,7 +481,7 @@
% --- les figures avec échelle éventuel
\renewcommand{\myfigure}[2]{% entrée : échelle, fichier(s) figure à inclure
\begin{center}\small
-\tikzstyle{every picture}=[scale=0.95*#1]% mise en échelle + 10% (automatiquement annulé à la fin du groupe)
+\tikzstyle{every picture}=[scale=0.90*#1]% mise en échelle + 10% (automatiquement annulé à la fin du groupe)
#2
\end{center}}
@@ -562,7 +564,13 @@ colback=lightgray}]
}
% code en ligne (\codeinline)
-\newcommand{\codeinline}[1]{\lstinline[showstringspaces=false]!#1!}
+% \newcommand{\codeinline}[1]{\lstinline[showstringspaces=false]!#1!}
+\newcommand{\codeinline}[1]{\lstinline[showstringspaces=false,breaklines=true,breakatwhitespace=true]!#1!}
\newcommand{\ci}[1]{\codeinline{#1}}
-
+% Ligne bien centrée ()sans utiliser \centerline)
+\newenvironment{nscenter}
+{\parskip=0pt\par\nopagebreak\centering}
+{\par\noindent\ignorespacesafterend}
+\newcommand{\mycenterline}[1]{\begin{nscenter}#1\end{nscenter}}
+%\renewcommand{\centerline}[1]{\erreur} % A commenter après débugage
diff --git a/python-screen.sty b/python-screen.sty
index b0a3ea7..1fa6a0e 100644
--- a/python-screen.sty
+++ b/python-screen.sty
@@ -22,7 +22,7 @@
% ----------------------------------------------------------------------
% Police par defaut
-\usepackage[charter]{mathdesign}
+\usepackage[charter,cal=cmcal]{mathdesign}
% Police pour l'entete
@@ -384,7 +384,7 @@ colframe=red!50!black,colback=black!5!white,colbacktitle=green!20!white,coltitle
\usepackage[hypertexnames=true,pdfencoding=auto]{hyperref}
%\usepackage[hypertexnames=true,plainpages=false,pdfpagelabels,pagebackref]{hyperref}
\hypersetup{colorlinks=true, linkcolor=blue, urlcolor=blue,
-pdftitle={Exo7 - Cours de mathématiques}, pdfauthor={Exo7}}
+pdftitle={Python au lycée - tome 1}, pdfauthor={Arnaud Bodin}}
% --- Liens vers vidéo Youtube
% variable myvideo : 0 pas de video, sinon la référence youtube
\newcommand{\video}[1]{\def\myvideo{#1}}
@@ -402,10 +402,7 @@ pdftitle={Exo7 - Cours de mathématiques}, pdfauthor={Exo7}}
% ----------------------------------------------------------------------
% Constantes pour l'inclusion des figures
-\newcommand{\scalebloc}{1.2}
-\newcommand{\scalesolution}{0.9}
-\newcommand{\scaleecran}{0.35}
-
+\newcommand{\myscale}{1}
% Pour afficher/cacher les solutions
\usepackage{comment}
@@ -501,7 +498,15 @@ colback=lightgray}]
}
% code en ligne (\codeinline)
-\newcommand{\codeinline}[1]{\lstinline[showstringspaces=false]!#1!}
+%\newcommand{\codeinline}[1]{\lstinline[showstringspaces=false]!#1!}
+\newcommand{\codeinline}[1]{\lstinline[showstringspaces=false,breaklines=true,breakatwhitespace=true]!#1!}
\newcommand{\ci}[1]{\codeinline{#1}}
+% Ligne bien centrée ()sans utiliser \centerline)
+\newenvironment{nscenter}
+{\parskip=0pt\par\nopagebreak\centering}
+{\par\noindent\ignorespacesafterend}
+\newcommand{\mycenterline}[1]{\begin{nscenter}#1\end{nscenter}}
+%\renewcommand{\centerline}[1]{\erreur} % A commenter après débugage
+
diff --git a/ramsey/ramsey.pdf b/ramsey/ramsey.pdf
index 054de41..dc92378 100644
Binary files a/ramsey/ramsey.pdf and b/ramsey/ramsey.pdf differ
diff --git a/ramsey/ramsey.tex b/ramsey/ramsey.tex
index f40094c..912cb07 100644
--- a/ramsey/ramsey.tex
+++ b/ramsey/ramsey.tex
@@ -11,7 +11,7 @@
\objectifs{Tu vas voir qu'un problème tout simple, qui concerne les relations entre seulement six personnes, va demander énormément de calculs pour être résolu.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-ramsey-1d}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-ramsey-1d}
\end{center}
\index{graphe}
@@ -90,21 +90,22 @@
\begin{center}
-\includegraphics[height=5cm]{ecran-ramsey-1a}\quad
-\includegraphics[height=5cm]{ecran-ramsey-1b}
+\includegraphics[scale=\myscale,height=5cm]{ecran-ramsey-1a}\quad
+\includegraphics[scale=\myscale,height=5cm]{ecran-ramsey-1b}
\end{center}
\begin{center}
-\includegraphics[height=5cm]{ecran-ramsey-1c}\quad
-\includegraphics[height=5cm]{ecran-ramsey-1d}
+\includegraphics[scale=\myscale,height=5cm]{ecran-ramsey-1c}\quad
+\includegraphics[scale=\myscale,height=5cm]{ecran-ramsey-1d}
\end{center}
\begin{enumerate}
\item Définis le tableau des graphes des quatre exemples ci-dessus.
- Tu peux commencer par initialiser le tableau par \\
- \centerline{\ci{graphe = [[0 for j in range(n)] for i in range(n)]}}
- Puis ajoute des commandes :\\
- \centerline{\ci{graphe[i][j] = 1} \quad et \quad \ci{graphe[j][i] = 1}}
+ Tu peux commencer par initialiser le tableau par
+ \mycenterline{\ci{graphe = [[0 for j in range(n)] for i in range(n)]}}
+
+ Puis ajoute des commandes :
+ \mycenterline{\ci{graphe[i][j] = 1} \quad et \quad \ci{graphe[j][i] = 1}}
N'oublie pas que si le sommet $i$ est relié au sommet $j$ par une arête, alors il faut mettre un $1$ en position $(i,j)$ mais aussi en position $(j,i)$.
@@ -136,7 +137,7 @@
\objectifs{Objectifs : dessiner un graphe ! Activité facultative.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-ramsey-2}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-ramsey-2}
\end{center}
Programme l'affichage graphique d'un graphe par une fonction \ci{afficher_graphe(graphe)}.
@@ -301,8 +302,9 @@
\begin{enumerate}
\item Programme la fonction \ci{sous_ensembles(n)} qui renvoie la liste de tous les sous-ensembles possibles de $E_n = \{0,1,2,\ldots,n-1\}$.
- Par exemple, pour $n=3$, \ci{sous_ensembles(n)} renvoie la liste (qui contient elle-même des listes) :\\
-\centerline{\ci{[ [], [2], [1], [1, 2], [0], [0, 2], [0, 1], [0, 1, 2] ]}}
+ Par exemple, pour $n=3$, \ci{sous_ensembles(n)} renvoie la liste (qui contient elle-même des listes) :
+\mycenterline{\ci{[ [], [2], [1], [1, 2], [0], [0, 2], [0, 1], [0, 1, 2] ]}}
+
C'est-à-dire les $8$ sous-ensembles (en commençant par l'ensemble vide) :
$$\varnothing \quad \{2\}\quad \{1\}\quad \{1,2\}\quad \{0\}\quad \{0,2\}\quad \{0,1\}\quad \{0,1,2\}.$$
@@ -310,8 +312,8 @@
\item Déduis-en une fonction \ci{sous_ensembles_fixe(n,k)} qui renvoie seulement les sous-ensembles de $E_n$ ayant $k$ éléments.
- Par exemple, pour $n=3$ et $k=2$, \ci{sous_ensembles_fixe(n,k)} renvoie la liste des paires :\\
-\centerline{\ci{[ [0, 1], [0, 2], [1, 2] ]}}
+ Par exemple, pour $n=3$ et $k=2$, \ci{sous_ensembles_fixe(n,k)} renvoie la liste des paires :
+\mycenterline{\ci{[ [0, 1], [0, 2], [1, 2] ]}}
Teste ton programme :
\begin{itemize}
@@ -357,7 +359,7 @@
\emph{Indications.}
-Pour remplir un tableau à partir d'une écriture binaire \ci{b} donnée, tu peux utiliser une double boucle du type :
+Pour remplir un tableau à partir d'une écriture binaire \ci{liste_binaire} donnée de $p$, tu peux utiliser une double boucle du type :
\begin{lstlisting}
for j in range(0,n):
@@ -371,7 +373,7 @@
Cette boucle prend le dernier \emph{bit} de la liste et le place sur la première case libre au-dessus de la diagonale ; puis l'avant-dernier \emph{bit} est placé sur la seconde case libre\ldots ; le premier \emph{bit} de la liste remplit la dernière case libre.
- \myfigure{0.7}{
+ \myfigure{0.6}{
\tikzinput{fig-ramsey-5}
}
@@ -387,6 +389,7 @@
\end{activite}
+
\begin{activite}[Pour aller plus loin]
\objectifs{Objectifs : améliorer ton programme et prouver d'autres conjectures. Activité facultative.}
@@ -403,6 +406,7 @@
\item Tu peux seulement tester les graphes qui correspondent à $p$ entre $0$ et $2^{N}/2$ (car pour les $p$ suivants cela revient à échanger les segments verts en rouges et inversement).
\end{itemize}
+\medskip
Avec ces conseils voici les temps de calcul auxquels tu peux t'attendre :
\begin{center}
diff --git a/sialors/sialors.pdf b/sialors/sialors.pdf
index dca16f4..118a514 100644
Binary files a/sialors/sialors.pdf and b/sialors/sialors.pdf differ
diff --git a/sialors/sialors.tex b/sialors/sialors.tex
index b1d9e36..ca33d73 100644
--- a/sialors/sialors.tex
+++ b/sialors/sialors.tex
@@ -38,7 +38,7 @@
Voici un exemple, qui avertit un conducteur si une variable \ci{vitesse} est trop grande.
\begin{center}
-\begin{minipage}{0.5\textwidth}
+\begin{minipage}{0.7\textwidth}
\begin{lstlisting}
if vitesse > 110:
print("Attention, tu roules trop vite.")
@@ -83,7 +83,7 @@
Voici un petit programme qui demande le prénom et l'âge de l'utilisateur et affiche un message du style \og{}Bonjour Kevin\fg{} puis \og{}Tu es mineur/majeur !\fg{} selon l'âge.
\begin{center}
-\begin{minipage}{0.5\textwidth}
+\begin{minipage}{0.6\textwidth}
\begin{lstlisting}
prenom = input("Comment t'appelles-tu ? ")
print("Bonjour",prenom)
@@ -125,8 +125,8 @@
Le module \ci{random} génère des nombres comme s'ils étaient tirés au hasard.
\begin{itemize}
- \item Voici la commande à placer au début du programme pour appeler ce module :\\
- \centerline{\ci{from random import *}}
+ \item Voici la commande à placer au début du programme pour appeler ce module :
+ \mycenterline{\ci{from random import *}}
\item La commande \ci{randint(a,b)}\index{randint@\ci{randint}} renvoie un entier au hasard compris entre $a$ et $b$.
@@ -165,12 +165,16 @@
\mybox{
-\textbf{Test d'égalité.} Pour tester si deux nombres $x$ et $y$ sont égaux, l'instruction est :\\
-\centerline{\ci{if x == y:}}
+\begin{minipage}{0.95\textwidth}
+\textbf{Test d'égalité.} Pour tester si deux nombres $x$ et $y$ sont égaux, l'instruction est :
+
+\mycenterline{\ci{if x == y:}}
+
Le test d'égalité s'écrit bien avec le double signe égal \og{}\ci{==}\fg{}.
Par exemple \og{}\ci{x == 3}\fg{} renvoie \og{}vrai\fg{} si $x$ vaut $3$ et \og{}faux\fg{} sinon.
Attention ! La commande \og{}\ci{x = 3}\fg{} n'a rien à voir, cette instruction stocke $3$ dans la variable $x$.
+\end{minipage}
}
\end{activite}
@@ -197,7 +201,7 @@
Voici le dessin que doit tracer la tortue lorsque \ci{mot} vaut \ci{"AagAgAdAgAAgaAA"}.
\begin{center}
-\includegraphics[scale=0.4]{ecran-sialors-2}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-sialors-2}
\end{center}
\emph{Indications.}
@@ -245,6 +249,7 @@
\item ~\index{affectation}\index{=@\ci{=}}
\mybox{
+ \begin{minipage}{0.95\textwidth}
\textbf{ATTENTION !}
L'erreur classique est de confondre \og{}\ci{a = b}\fg{} et \og{}\ci{a == b}\fg{}.
\begin{itemize}
@@ -252,6 +257,7 @@
met le contenu de la variable \ci{b} dans la variable \ci{a}.
\item \textbf{Test d'égalité.} \ci{a == b} teste si les contenus de \ci{a} et de \ci{b} sont égaux et vaut \ci{True} ou \ci{False}.
\end{itemize}
+ \end{minipage}
}
\item On peut comparer autre chose que des nombres. Par exemple
@@ -331,7 +337,7 @@
On se donne trois longueurs $a$, $b$ et $c$. Tu vas déterminer les propriétés du triangle dont les longueurs seraient $a$, $b$, $c$.
-\myfigure{1}{
+\myfigure{1.1}{
\tikzinput{fig-sialors-1}
}
@@ -359,7 +365,7 @@
\begin{itemize}
\item La loi des cosinus permet de calculer un angle en fonction des longueurs :
- \myfigure{1}{
+ \myfigure{1.1}{
\tikzinput{fig-sialors-3}
}
@@ -377,10 +383,14 @@
\end{enumerate}
+ \smallskip
+
\objectifs{Trouve des exemples de longueurs $a,b,c$ pour illustrer les différentes propriétés.}
\end{activite}
+\bigskip
+\bigskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Activité 5
diff --git a/sialors/sialors_5.py b/sialors/sialors_5.py
index dd96004..1998527 100644
--- a/sialors/sialors_5.py
+++ b/sialors/sialors_5.py
@@ -24,9 +24,11 @@
if nb_mystere == reponse_int:
print("Bravo !")
break # Arrête la boucle
- elif nb_mystere < reponse_int:
+
+ if nb_mystere < reponse_int:
print("Non, le nombre à trouver est plus petit !")
- elif nb_mystere > reponse_int:
+
+ if nb_mystere > reponse_int:
print("Non, le nombre à trouver est plus grand !")
# Lorsque c'est fini :
@@ -55,12 +57,14 @@
# if nb_mystere == reponse_int:
# print("Bravo !")
# break # Arrête la boucle
-# elif nb_mystere < reponse_int:
+#
+# if nb_mystere < reponse_int:
# if verite == True:
# print("Non, le nombre à trouver est plus petit !")
# else:
-# print("Non, le nombre à trouver est plus grand !")
-# elif nb_mystere > reponse_int:
+# print("Non, le nombre à trouver est plus grand !")
+#
+# if nb_mystere > reponse_int:
# if verite == True:
# print("Non, le nombre à trouver est plus grand !")
# else:
@@ -94,9 +98,9 @@
# if nb_mystere == reponse_int:
# print("Bravo !")
# break # Arrête la boucle
-# elif nb_mystere < reponse_int:
+# if nb_mystere < reponse_int:
# print("Non, le nombre à trouver est plus petit !")
-# elif nb_mystere > reponse_int:
+# if nb_mystere > reponse_int:
# print("Non, le nombre à trouver est plus grand !")
# # Lorsque c'est fini :
diff --git a/statistique/statistique.pdf b/statistique/statistique.pdf
index 0e863eb..93d6038 100644
Binary files a/statistique/statistique.pdf and b/statistique/statistique.pdf differ
diff --git a/statistique/statistique.tex b/statistique/statistique.tex
index 77d9d55..a6d3f03 100644
--- a/statistique/statistique.tex
+++ b/statistique/statistique.tex
@@ -98,8 +98,11 @@
% \centerline{\ci{from math import *}}
\item Voici les températures mensuelles moyennes à Brest et à Strasbourg.
- \centerline{\ci{temp_brest = [6.4,6.5,8.5,9.7,11.9,14.6,15.9,16.3,15.1,12.2,9.2,7.1]}}
- \centerline{\ci{temp_strasbourg = [0.9,2.4,6.1,9.7,13.8,17.2,19.2,18.6,15.7,10.7,5.3,2.1]}}
+
+{\small
+ \mycenterline{\ci{temp_brest = [6.4,6.5,8.5,9.7,11.9,14.6,15.9,16.3,15.1,12.2,9.2,7.1]}}
+ \mycenterline{\ci{temp_strasbourg = [0.9,2.4,6.1,9.7,13.8,17.2,19.2,18.6,15.7,10.7,5.3,2.1]}}
+}
Calcule la température moyenne sur l'année à Brest puis à Strasbourg. Calcule l'écart-type
des températures à Brest puis à Strasbourg. Quelles conclusions en tires-tu ?
@@ -122,7 +125,7 @@
Pour afficher ceci :
\begin{center}
-\includegraphics[scale=0.6]{ecran-stat-cours-intro}
+\includegraphics[scale=\myscale,scale=0.6]{ecran-stat-cours-intro}
\end{center}
Le code est :
\begin{lstlisting}
@@ -187,16 +190,16 @@
\objectifs{Objectifs : visualiser des données par différents types de graphiques.}
\begin{center}
-\includegraphics[width=5cm]{ecran-stat-2a}\qquad\qquad
-\includegraphics[height=5cm]{ecran-stat-2b}
+\includegraphics[scale=\myscale,width=5cm]{ecran-stat-2a}\qquad\qquad
+\includegraphics[scale=\myscale,height=5cm]{ecran-stat-2b}
\qquad\qquad\textbf{Graphique en barres}\qquad\qquad\quad
\textbf{Graphique cumulatif}
\end{center}
\begin{center}
-\includegraphics[width=7cm]{ecran-stat-2c}\qquad\qquad
-\includegraphics[width=4cm]{ecran-stat-2d}
+\includegraphics[scale=\myscale,width=7cm]{ecran-stat-2c}\qquad\qquad
+\includegraphics[scale=\myscale,width=4cm]{ecran-stat-2d}
\qquad\qquad\textbf{Graphique en pourcentage}\qquad\qquad\qquad
\textbf{Graphique en secteurs}
@@ -232,8 +235,7 @@
La fonction \ci{create_arc()}, qui permet de dessiner des arcs de cercles, n'est pas très intuitive. Il faut penser que l'on dessine un cercle, en précisant les coordonnées des coins d'un carré qui l'entoure, puis en précisant l'angle de début et l'angle du secteur (en degrés).
-
-\centerline{\ci{canvas.create_arc(x1,y1,x2,y2,start=debut_angle,extent=mon_angle)}}
+\mycenterline{\ci{canvas.create_arc(x1,y1,x2,y2,start=debut_angle,extent=mon_angle)}}
\myfigure{1}{
@@ -245,7 +247,7 @@
\item \textbf{Bonus.} Rassemble ton travail en un programme qui laisse la possibilité à l'utilisateur de choisir le diagramme qu'il souhaite en cliquant sur des boutons, et aussi la possibilité d'obtenir une nouvelle série aléatoire de données. \emph{Pour afficher et gérer les boutons avec \ci{tkinter}, vois le cours ci-dessous.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-stat-2e}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-stat-2e}
\end{center}
\end{enumerate}
\end{activite}
@@ -262,7 +264,7 @@
Voici la fenêtre d'un petit programme avec deux boutons. Le premier bouton change la couleur du rectangle, le second termine le programme.
\begin{center}
-\includegraphics[scale=0.6]{ecran-stat-cours-boutons}
+\includegraphics[scale=\myscale,scale=0.6]{ecran-stat-cours-boutons}
\end{center}
Le code est :
\begin{lstlisting}
@@ -275,15 +277,15 @@
def action_bouton():
canvas.delete("all") # Efface tout
- couleurs = ["red","orange","yellow","green","cyan","blue","violet","purple"]
+ couleurs = ["red","orange","yellow","green","cyan","blue","violet"]
coul = choice(couleurs) # Couleur au hasard
canvas.create_rectangle(100,50,300,150,width=5,fill=coul)
return
-bouton_couleur = Button(root,text="Afficher", width=20, command=action_bouton)
+bouton_couleur=Button(root,text="Afficher",width=20,command=action_bouton)
bouton_couleur.pack()
-bouton_quitter = Button(root,text="Quitter", width=20, command=root.quit)
+bouton_quitter=Button(root,text="Quitter",width=20,command=root.quit)
bouton_quitter.pack()
root.mainloop()
@@ -294,7 +296,7 @@
\item On crée un bouton par la commande \ci{Button}. L'option \ci{text} personnalise le texte qui s'affiche sur le bouton. On ajoute le bouton créé à la fenêtre par la méthode \ci{pack}.
\item Le plus important est l'action associée au bouton ! C'est l'option \ci{command} qui reçoit le nom de la fonction à exécuter lorsque le bouton est cliqué. Pour notre exemple \ci{command=action_bouton}, associe au clic sur le bouton un changement de couleur.
- \item Attention ! il faut donner le nom de la fonction sans parenthèses : \ci{commande=ma_fonction} et pas \ci{command=ma_fonction()}.
+ \item Attention ! il faut donner le nom de la fonction sans parenthèses : \ci{command=ma_fonction} et pas \ci{command=ma_fonction()}.
\item Pour associer au bouton \og{}Quitter\fg{} la fermeture du programme, l'argument est \ci{command=root.quit}.
@@ -332,7 +334,7 @@
\end{itemize}
\item \textbf{Cas $n$ pair.} La médiane est la moyenne entre la valeur de la liste au rang $\frac{n}{2}-1$ et au rang $\frac{n}{2}$.
- Exemple avec \ci{liste = [13,14,19,20]} :
+ Exemple avec \ci{liste = [10,14,19,20]} :
\begin{itemize}
\item la longueur de la liste est $n=4$ (les indices vont de $0$ à $3$),
\item les indices du milieu sont $1$ et $2$,
@@ -343,8 +345,9 @@
- \item Les résultats d'une classe sont collectés sous la forme suivante d'un effectif par note : \\
- \centerline{\ci{effectif_notes = [0,0,0,0,0,1,0,2,0,1,5,1,2,3,2,4,1,2,0,1,0]}}
+ \item Les résultats d'une classe sont collectés sous la forme suivante d'un effectif par note :
+ \mycenterline{\ci{effectif_notes = [0,0,0,0,0,1,0,2,0,1,5,1,2,3,2,4,1,2,0,1,0]}}
+
Le rang $i$ va de $0$ à $20$. Et la valeur au rang $i$ indique le nombre d'élèves ayant eu la note $i$.
Par exemple ici, $1$ élève a eu la note $5$, $2$ élèves ont eu la note $7$,\ldots , $5$ élèves ont obtenus $10$, \ldots{}
Écris une fonction \ci{notes_vers_liste(effectif_notes)} qui prend en entrée un effectif de notes et renvoie la liste des notes. Pour notre exemple la fonction doit renvoyer \ci{[5,7,7,9,10,10,10,10,10,10,...]}.
@@ -384,7 +387,7 @@
Écris une fonction \ci{diagramme_boite(effectif_notes)} qui trace le diagramme en boîte des notes d'une classe à partir d'un effectif par note (voir l'activité précédente).
\begin{center}
-\includegraphics[scale=0.7]{ecran-stat-4}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-stat-4}
\end{center}
\end{activite}
@@ -403,18 +406,18 @@
\begin{enumerate}
\item Simule le cours de la bourse de l'indice \emph{Top 40} sur 365 jours.
- Au jour $j=0$, l'indice vaut $1000$. Ensuite l'indice d'un jour est déterminé en ajoutant une valeur au hasard (positive ou négative) à la valeur de l'indice de la veille :\\
- \centerline{indice du jour $j$ = indice du jour $(j-1)$ \ + \ valeur au hasard}.
+ Au jour $j=0$, l'indice vaut $1000$. Ensuite l'indice d'un jour est déterminé en ajoutant une valeur au hasard (positive ou négative) à la valeur de l'indice de la veille :
+ \mycenterline{indice du jour $j$ = indice du jour $(j-1)$ \ + \ valeur au hasard}.
- Pour cette valeur au hasard, tu peux essayer une formule du style :\\
- \centerline{\ci{valeur = randint(-10,12)/3}}
+ Pour cette valeur au hasard, tu peux essayer une formule du style :
+ \mycenterline{\ci{valeur = randint(-10,12)/3}}
Écris une fonction \ci{cours_bourse()}, sans paramètre, qui renvoie une liste de $365$ valeurs de l'indice \emph{Top 40} selon cette méthode.
\item Trace point par point la courbe du cours sur une année. (Pour tracer un point, tu peux afficher un carré de taille $1$ pixel.)
\begin{center}
-\includegraphics[scale=0.7]{ecran-stat-5a}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-stat-5a}
\end{center}
\item \emph{Comme la courbe du cours journalier est très chaotique, nous souhaitons la lisser afin de la rendre plus lisible. Pour cela nous calculons des moyennes mobiles.}
@@ -423,10 +426,10 @@
Écris une fonction \ci{moyenne_mobile(liste,duree)} qui renvoie la liste de toutes les moyennes mobiles d'une série de données, pour une durée fixée.
- \item Trace point par point sur un même graphique : la courbe du cours sur une année (en rouge ci-dessous), la courbe de ses moyennes mobiles à $7$ jours (en bleu ci-dessous) et la courbe des ses moyennes mobiles à $30$ jours (en marron ci-dessous). Note que plus la durée est longue plus la courbe est \og{}lisse\fg{}. (Bien sûr la courbe des moyennes mobiles à $30$ jours ne commence qu'à partir du trentième jour.)
+ \item Trace point par point sur un même graphique : la courbe du cours sur une année\couleurnb{ (en rouge ci-dessous)}{}, la courbe de ses moyennes mobiles à $7$ jours\couleurnb{ (en bleu ci-dessous)}{} et la courbe des ses moyennes mobiles à $30$ jours\couleurnb{ (en marron ci-dessous)}{}. Note que plus la durée est longue plus la courbe est \og{}lisse\fg{}. (Bien sûr la courbe des moyennes mobiles à $30$ jours ne commence qu'à partir du trentième jour.)
\begin{center}
-\includegraphics[scale=0.7]{ecran-stat-5b}
+\includegraphics[scale=\myscale,scale=0.7]{ecran-stat-5b}
\end{center}
\end{enumerate}
diff --git a/tantque/tantque-1.pdf b/tantque/tantque-1.pdf
index 2adcce6..7d5ceb7 100644
Binary files a/tantque/tantque-1.pdf and b/tantque/tantque-1.pdf differ
diff --git a/tantque/tantque-1.tex b/tantque/tantque-1.tex
index 04ab5f5..0c3ec4f 100644
--- a/tantque/tantque-1.tex
+++ b/tantque/tantque-1.tex
@@ -50,8 +50,8 @@
\end{itemize}
}
-Il est facile de vérifier que :\\
-\centerline{$b$ est un diviseur de $a$ si et seulement si $r=0$.}
+Il est facile de vérifier que :
+\mycenterline{$b$ est un diviseur de $a$ si et seulement si $r=0$.}
\end{cours}
@@ -146,6 +146,8 @@
\end{lstlisting}
\end{minipage}
+\medskip
+
On résume ceci sous la forme d'un tableau :
$$
\begin{array}{l}
@@ -242,8 +244,8 @@
$$
\medskip
-Pour ce dernier exemple il est beaucoup plus naturel de démarrer la boucle par\\
-\centerline{\ci{while est_pair(n):}}
+Pour ce dernier exemple il est beaucoup plus naturel de démarrer la boucle par
+\mycenterline{\ci{while est_pair(n):}}
En effet \ci{est_pair(n)} est déjà une valeur \og{}vrai\fg{} ou \ci{}faux\fg{}.
On se rapproche d'une phrase \og{}tant que $n$ est pair...\fg{}
@@ -252,8 +254,8 @@
\textbf{Opération \og{}\ci{+=}\fg{}.}
\index{+=@\ci{+=}}
-Pour incrémenter un nombre tu peux utiliser ces deux méthodes :\\
-\centerline{\ci{nb = nb + 1} \qquad ou \qquad \ci{nb += 1}}
+Pour incrémenter un nombre tu peux utiliser ces deux méthodes :
+\mycenterline{\ci{nb = nb + 1} \qquad ou \qquad \ci{nb += 1}}
La seconde écriture est plus courte mais rend le programme moins lisible.
\end{cours}
@@ -278,6 +280,8 @@
Par exemple \ci{plus_petit_diviseur(91)} renvoie $7$, car $91 = 7 \times 13$.
+ \medskip
+
\textbf{Méthode.}
\begin{itemize}
\item On rappelle que $d$ divise $n$ si et seulement si \ci{n \% d} vaut $0$.
@@ -309,7 +313,7 @@
\emph{Indication.} Avec \Python{} $b^c$ s'écrit \ci{b ** c} et donc
$a^{(b^c)}$ s'écrit \ci{a ** (b ** c)}.
- \medskip
+ \bigskip
\emph{On va améliorer notre fonction qui teste si un nombre est premier ou pas, cela nous permettra de tester plus vite plein de nombres ou bien des nombres très grands.}
@@ -387,15 +391,18 @@
number=100000))
\end{lstlisting}
+
\textbf{Résultats.} \\
Le résultat dépend de l'ordinateur, mais permet la comparaison des temps d'exécution des deux fonctions.
\begin{itemize}
- \item La mesure pour la première fonction renvoie $5$ secondes. L'algorithme n'est pas très malin. On teste
+ \item La mesure pour la première fonction (appelée $100\,000$ fois) renvoie $5$ secondes. L'algorithme n'est pas très malin. On teste
si $7\times 1 =n$, puis on teste $7\times 2 = n$, $7\times 3 = n$\ldots
\item La mesure pour la seconde fonction renvoie $0.01$ seconde ! On teste si le reste de $n$ divisé par $7$ est $0$. La seconde méthode est donc $500$ fois plus rapide que la première.
\end{itemize}
+\medskip
+
\textbf{Explications.}
\begin{itemize}
\item On appelle le module \ci{timeit}.
diff --git a/tantque/tantque-2.pdf b/tantque/tantque-2.pdf
index a464596..5721480 100644
Binary files a/tantque/tantque-2.pdf and b/tantque/tantque-2.pdf differ
diff --git a/tantque/tantque-2.tex b/tantque/tantque-2.tex
index 107af85..b7cecf6 100644
--- a/tantque/tantque-2.tex
+++ b/tantque/tantque-2.tex
@@ -297,7 +297,7 @@
\begin{exemple}
-Voici des programmes qui cherchent la racine carrée entière de $777$, c'est-à-dire le plus grand entier $i$ qui vérifie $i^2 \le 777$. Dans le script de droite, la recherche est limitée aux entiers $i$ entre $0$ et $99$.
+Voici des programmes qui cherchent la racine carrée entière de $777$, c'est-à-dire le plus grand entier $i$ qui vérifie $i^2 \le 777$. Dans le script de gauche, la recherche est limitée aux entiers $i$ entre $0$ et $99$.
\begin{minipage}{0.4\textwidth}
\begin{lstlisting}
@@ -335,7 +335,7 @@
break
print(sqrt(element))
\end{lstlisting}
-\end{minipage}\qquad\qquad
+\end{minipage}\qquad
\begin{minipage}{0.4\textwidth}
\begin{lstlisting}
# Mieux avec try/except
diff --git a/tantque/tantque_2.py b/tantque/tantque_2.py
index cb77c29..8f57a70 100644
--- a/tantque/tantque_2.py
+++ b/tantque/tantque_2.py
@@ -118,7 +118,7 @@ def est_premier_3(n):
## Question 5 ##
-# Calcul les temps d'éxécution moyens des différents fonction est_premier()
+# Calcul les temps d'éxécution des différentes fonctions est_premier()
import timeit
print(timeit.timeit("est_premier_1(97)", setup="from __main__ import est_premier_1", number=10000))
diff --git a/tortue/tortue.pdf b/tortue/tortue.pdf
index 729f2cc..aef51df 100644
Binary files a/tortue/tortue.pdf and b/tortue/tortue.pdf differ
diff --git a/tortue/tortue.tex b/tortue/tortue.tex
index e6eeacf..65ea90c 100644
--- a/tortue/tortue.tex
+++ b/tortue/tortue.tex
@@ -44,11 +44,11 @@
\end{lstlisting}
\begin{center}
-\includegraphics[scale=0.6]{ecran-tortue-0}
+\includegraphics[scale=\myscale,scale=0.6]{ecran-tortue-0}
\end{center}
-Voici une liste des principales commandes, accessibles après avoir écrit :\\
-\centerline{\ci{from turtle import *}}
+Voici une liste des principales commandes, accessibles après avoir écrit :
+\mycenterline{\ci{from turtle import *}}
\begin{itemize}
\item \ci{forward(longueur)}\index{forward@\ci{forward}} avance d'un certain nombre de pas
@@ -64,7 +64,7 @@
\item \ci{down()}\index{down@\ci{down}} abaisse le stylo
\item \ci{up()}\index{up@\ci{up}} relève le stylo
\item \ci{width(epaisseur)} change l'épaisseur du trait
- \item \ci{color(couleur)} change la couleur : \ci{"red"}, \ci{"green"}, \ci{"blue"}, \ci{"orange"}, \ci{"purple"},\ldots
+ \item \ci{color(couleur)} change la couleur : \ci{"red"}, \ci{"green"}, \ci{"blue"}, \ci{"orange"}, \ci{"purple"}\ldots
\item \ci{position()} renvoie la position $(x,y)$ de la tortue
\item \ci{heading()} renvoie la direction \ci{angle} vers laquelle pointe la tortue
@@ -93,7 +93,7 @@
Trace les premières lettres de \Python{}, par exemple comme ci-dessous.
\begin{center}
-\includegraphics[scale=0.4]{ecran-tortue-1}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-tortue-1}
\end{center}
\end{activite}
@@ -110,17 +110,18 @@
\objectifs{Objectifs : tracer des figures géométriques.}
\begin{center}
-\includegraphics[scale=0.25]{ecran-tortue-2a}
-\includegraphics[scale=0.25]{ecran-tortue-2b}
-\includegraphics[scale=0.25]{ecran-tortue-2c}
-\includegraphics[scale=0.2]{ecran-tortue-2d}
+\includegraphics[scale=\myscale,scale=0.25]{ecran-tortue-2a}
+\includegraphics[scale=\myscale,scale=0.25]{ecran-tortue-2b}
+\includegraphics[scale=\myscale,scale=0.25]{ecran-tortue-2c}
+\includegraphics[scale=\myscale,scale=0.2]{ecran-tortue-2d}
\end{center}
\begin{enumerate}
\item \textbf{Pentagone.} Trace un premier pentagone (en bleu). Tu dois répéter $5$ fois : avancer de $100$ pas, tourner de $72$ degrés.
- \emph{Indication.} Pour construire une boucle utilise \\
- \centerline{\ci{for i in range(5):}}
+ \emph{Indication.} Pour construire une boucle utilise
+ \mycenterline{\ci{for i in range(5):}}
+
(même si tu n'utilises pas ensuite la variable \ci{i}).
\item \textbf{Pentagone (bis).} Définis une variable \ci{longueur} qui vaut $200$ et une variable \ci{angle} qui vaut $72$ degrés. Trace un second pentagone (en rouge) en avançant cette fois de \ci{longueur} et en tournant de \ci{angle}.
@@ -148,8 +149,8 @@
\objectifs{Objectifs : tracer le graphe d'une fonction.}
\begin{center}
-\includegraphics[scale=0.4]{ecran-tortue-3a}
-\includegraphics[scale=0.4]{ecran-tortue-3b}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-tortue-3a}
+\includegraphics[scale=\myscale,scale=0.4]{ecran-tortue-3b}
\end{center}
Trace le graphe de la fonction carré et de la fonction sinus.
@@ -163,8 +164,8 @@
Pour la sinuso\"ide, tu peux utiliser la formule
$$y = 100\sin\left(\frac{1}{20}x\right).$$
-Par défaut \Python{} ne connaît pas la fonction sinus, pour utiliser \ci{sin()} il faut d'abord importer le module \ci{math} :\\
-\centerline{\ci{from math import *}}
+Par défaut \Python{} ne connaît pas la fonction sinus, pour utiliser \ci{sin()} il faut d'abord importer le module \ci{math} :
+\mycenterline{\ci{from math import *}}
Pour que la tortue avance plus vite, tu peux utiliser la commande \ci{speed("fastest")}.
\end{activite}
@@ -182,10 +183,10 @@
\index{triangle de Sierpinski}
\begin{center}
-\includegraphics[scale=0.3]{ecran-tortue-4a}
-\includegraphics[scale=0.3]{ecran-tortue-4b}
-\includegraphics[scale=0.3]{ecran-tortue-4c}
-\includegraphics[scale=0.3]{ecran-tortue-4d}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-tortue-4a}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-tortue-4b}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-tortue-4c}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-tortue-4d}
\end{center}
Voici comment tracer le second dessin. Analyse l'imbrication des boucles et trace les dessins suivants.
@@ -216,7 +217,7 @@
\begin{activite}[Le c\oe ur des tables de multiplication]
\objectifs{Objectifs : dessiner les tables de multiplication. Pour une introduction en vidéo voir
-\href{https://youtu.be/-X49VQgi86E}{\emph{la face cachée des tables de multiplication}} sur \emph{Youtube} par Micmaths.}
+\og{}\href{https://youtu.be/-X49VQgi86E}{\emph{la face cachée des tables de multiplication}}\fg{} sur \emph{Youtube} par Micmaths.}
On fixe un entier $n$. On étudie la table de $2$, c'est-à-dire
que l'on calcule $2 \times 0$, $2\times 1$, $2 \times 2$, jusqu'à $2 \times (n-1)$. En plus les calculs se feront modulo $n$. On calcule donc
@@ -254,7 +255,7 @@
Voici ce que cela donne pour $n=100$.
\begin{center}
-\includegraphics[scale=0.5]{ecran-tortue-5b}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-tortue-5b}
\end{center}
\emph{Indications.}
@@ -311,7 +312,7 @@
Programme quatre tortues qui courent les unes après les autres :
\begin{center}
-\includegraphics[scale=0.5]{ecran-tortue-6a}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-tortue-6a}
\end{center}
@@ -358,7 +359,7 @@
Améliore ton programme en traçant à chaque fois un segment entre la tortue poursuivante et la tortue poursuivie.
\begin{center}
-\includegraphics[scale=0.5]{ecran-tortue-6b}
+\includegraphics[scale=\myscale,scale=0.5]{ecran-tortue-6b}
\end{center}
\end{activite}
diff --git a/vie/fig-vie-0b.tikz b/vie/fig-vie-0b.tikz
index d480503..c1a0446 100644
--- a/vie/fig-vie-0b.tikz
+++ b/vie/fig-vie-0b.tikz
@@ -32,7 +32,7 @@
\draw (0,0) grid ++(7,5);
-\draw[<-,>=latex,ultra thick] (2.5,2.5) to[bend right] (3.5,6.2) node[left] {A $5$ voisins};
+\draw[<-,>=latex,ultra thick] (2.5,2.5) to[bend right] (3.5,6.2) node[left] {A $4$ voisins};
\draw[<-,>=latex,ultra thick] (2.5,3.5) to[bend right] (2.5,5.5) node[left] {A $4$ voisins};
\draw[<-,>=latex,ultra thick] (5.5,1.5) to[bend right] (7,5.5) node[left] {A $0$ voisin};
diff --git a/vie/vie.pdf b/vie/vie.pdf
index c47e22d..bc63edf 100644
Binary files a/vie/vie.pdf and b/vie/vie.pdf differ
diff --git a/vie/vie.tex b/vie/vie.tex
index a782159..0578914 100644
--- a/vie/vie.tex
+++ b/vie/vie.tex
@@ -11,7 +11,7 @@
\objectifs{Le \emph{jeu de la vie} est un modèle simple de l'évolution d'une population de cellules qui naissent et meurent au cours du temps. Le \og{}jeu\fg{} consiste à trouver des configurations initiales qui donnent des évolutions intéressantes : certains groupes de cellules disparaissent, d'autres se stabilisent, certains se déplacent\ldots}
\begin{center}
-\includegraphics[scale=0.3]{ecran-vie-0}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-vie-0}
\end{center}
\insertvideo{7SR5-sUnotY}{Jeu de la vie}
@@ -78,8 +78,8 @@
\begin{itemize}
\item Initialise deux variables \ci{n} (la hauteur du tableau) et \ci{p} (la largeur) (par exemple à $5$ et $8$).
- \item Définis un tableau à deux dimensions rempli de zéros par la commande :\\
- \centerline{\ci{tableau = [[0 for j in range(p)] for i in range(n)]}}
+ \item Définis un tableau à deux dimensions rempli de zéros par la commande :
+ \mycenterline{\ci{tableau = [[0 for j in range(p)] for i in range(n)]}}
\item Par des instructions du type \ci{tableau[i][j] = 1} remplis le tableau afin de définir la configuration du clignotant, de la bouche\ldots
\end{itemize}
@@ -112,7 +112,7 @@
\objectifs{Objectifs : réaliser l'affichage graphique d'une configuration de cellules.}
\begin{center}
-\includegraphics[scale=0.3]{ecran-vie-2}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-vie-2}
\end{center}
\begin{enumerate}
@@ -173,7 +173,9 @@
\end{minipage}
\end{center}
- \emph{Indications.} Pour définir un nouveau tableau reprend la commande :\\ \centerline{\ci{nouveau_tableau = [[0 for j in range(p)] for i in range(n)]}}
+ \emph{Indications.} Pour définir un nouveau tableau reprend la commande :
+ \mycenterline{\ci{nouveau_tableau = [[0 for j in range(p)] for i in range(n)]}}
+
puis modifie le tableau comme voulu.
\end{enumerate}
@@ -198,7 +200,7 @@
\end{itemize}
\begin{center}
-\includegraphics[scale=0.3]{ecran-vie-4a}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-vie-4a}
\end{center}
\item Perfectionne ton programme afin que l'utilisateur dessine la configuration qu'il souhaite par des clics de la souris. Un clic sur une case éteinte l'allume, un clic sur une case allumée l'éteint.
@@ -210,7 +212,7 @@
\end{itemize}
\begin{center}
-\includegraphics[scale=0.3]{ecran-vie-4b}
+\includegraphics[scale=\myscale,scale=0.3]{ecran-vie-4b}
\end{center}
@@ -256,8 +258,9 @@
\begin{itemize}
\item La création de la fenêtre est habituelle. Le programme se termine par le lancement avec la commande \ci{mainloop()}.
- \item Le premier point clé est d'associer un clic de souris à une action, c'est ce que fait la ligne \\
-\centerline{\ci{canvas.bind("", action_clic_souris)}}
+ \item Le premier point clé est d'associer un clic de souris à une action, c'est ce que fait la ligne
+\mycenterline{\ci{canvas.bind("", action_clic_souris)}}
+
Chaque fois que le bouton gauche de la souris est cliqué, \Python{} exécute la fonction \ci{action_clic_souris}. (Note qu'il n'y a pas de parenthèses pour l'appel à la fonction.)
\item Second point clé : la fonction \ci{action_clic_souris} récupère les coordonnées du clic et ici ensuite fait deux choses : elle affiche un petit rectangle à l'endroit du clic et affiche dans la fenêtre du terminal les coordonnées $(x,y)$.