Skip to content
Snippets Groups Projects
Commit ad3fedf9 authored by mathieu.schiess@edu.ge.ch's avatar mathieu.schiess@edu.ge.ch
Browse files

Première version utilisable du nb sur les fonctions type procedure

parent f2a63d63
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div class = "alert alert-danger"> <div class = "alert alert-danger">
Attention: **veillez à bien sauvegarder votre travail** dans le bon dossier du disque réseau (dossier document) avec le bon nom (et l'extension *.ipynb*), **sinon toutes les modifications seront perdues!** Attention: **veillez à bien sauvegarder votre travail** dans le bon dossier du disque réseau (dossier document) avec le bon nom (et l'extension *.ipynb*), **sinon toutes les modifications seront perdues!**
Pour reprendre votre travail, il suffit d'ouvrir le fichier .ipynb en cliquant sur *Fichier ouvrir* Pour reprendre votre travail, il suffit d'ouvrir le fichier .ipynb en cliquant sur *Fichier ouvrir*
</div> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Le fonctions simples (brouillon) # Le fonctions simples
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Rappel de quelques fonction de Turtle avec des exemples qui pourront vous servir Rappel de quelques fonction de Turtle avec des exemples qui pourront vous servir
| Fonction |Exemple|Commentaire| | Fonction |Exemple|Commentaire|
|:-------- |:------|:----------| |:-------- |:------|:----------|
|forward(x)|forward(150)|Trace un trait de 150 points| |forward(x)|forward(150)|Trace un trait de 150 points|
|backward(x)|backward(150)|Trace un trait “à reculons” de 150 points| |backward(x)|backward(150)|Trace un trait “à reculons” de 150 points|
|left(n)|left(60)|Tourne sur place la tortue de 60° à gauche| |left(n)|left(60)|Tourne sur place la tortue de 60° à gauche|
|right(n)|right(60)|Tourne sur place la tortue de 60° à droite| |right(n)|right(60)|Tourne sur place la tortue de 60° à droite|
|width(x)|width(5)|Change l’épaisseur à 5 points| |width(x)|width(5)|Change l’épaisseur à 5 points|
|color("c")|color("yellow")|Change la couleur du trait (mais aucun trait n’est tracé à ce moment). Notez les guillemets !| |color("c")|color("yellow")|Change la couleur du trait (mais aucun trait n’est tracé à ce moment). Notez les guillemets !|
|penup()|penup()|Lève la tortue (permet de se déplacer sans dessiner)| |penup()|penup()|Lève la tortue (permet de se déplacer sans dessiner)|
|pendown()|pendown()|Baisse le stylo| |pendown()|pendown()|Baisse le stylo|
|circle(R, A)|circle(100, 180)|Dessine un demi-cercle (angle de 180°) de rayon 100 points| |circle(R, A)|circle(100, 180)|Dessine un demi-cercle (angle de 180°) de rayon 100 points|
|stamp()|stamp()|Laisse une impression de la tortue à sa position actuelle| |stamp()|stamp()|Laisse une impression de la tortue à sa position actuelle|
|shape(forme)|shape('circle')|Change la forme de la tortue| |shape(forme)|shape('circle')|Change la forme de la tortue|
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Définir - `def` # Définir - `def`
Dans ce chapitre, nous allons découvrir comment augmenter le vocabulaire de notre langage de programmation en définissant de nouvelles instructions, qu'on appelle aussi **fonction**. Ceci permet de rendre un code plus compact, mais surtout plus lisible. Nous allons voir que : Dans ce chapitre, nous allons découvrir comment augmenter le vocabulaire de notre langage de programmation en définissant de nouvelles instructions, qu'on appelle aussi **fonction**. Ceci permet de rendre un code plus compact, mais surtout plus lisible. Nous allons voir que :
- le mot-clé `def` permet de nommer (définir) une séquence, - le mot-clé `def` permet de nommer (définir) une séquence,
- le bloc qui suit doit être en **indentation** (décalé à droite), - le bloc qui suit doit être en **indentation** (décalé à droite),
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
``` ```
Une fonction permet de Une fonction permet de
A) donner un nom à une séquence A) donner un nom à une séquence
B) augmenter le vocabulaire du langage de programmation B) augmenter le vocabulaire du langage de programmation
C) nous dire si ça fonctionne C) nous dire si ça fonctionne
D) rendre un programme plus lisible D) rendre un programme plus lisible
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8"> <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">
A) donner un nom à une séquence A) donner un nom à une séquence
B) augmenter le vocabulaire du langage de programmation B) augmenter le vocabulaire du langage de programmation
D) rendre un programme plus lisible D) rendre un programme plus lisible
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Nommer une séquence ## Nommer une séquence
Dessiner un rectangle est assez utile. C'est une forme qu'on pourra réutiliser certainement souvent. Il serait pratique de définir un nom pour ces 8 lignes de code. Pouvons-nous définir de nouvelles commandes ? Dessiner un rectangle est assez utile. C'est une forme qu'on pourra réutiliser certainement souvent. Il serait pratique de définir un nom pour ces 8 lignes de code. Pouvons-nous définir de nouvelles commandes ?
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
forward(160) forward(160)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(160) forward(160)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Oui, c'est possible. Avec le mot-clé `def`, nous pouvons définir une nouvelle commande que nous pouvons par exemple appeler `rectangle()`. Oui, c'est possible. Avec le mot-clé `def`, nous pouvons définir une nouvelle commande que nous pouvons par exemple appeler `rectangle()`.
Cette façon de créer un raccourci est appelée **définir** une fonction. Cette façon de créer un raccourci est appelée **définir** une fonction.
Le code à exécuter suit l'expression `def rectangle():` et se trouve en **indentation** (décalé vers la droite). Le code à exécuter suit l'expression `def rectangle():` et se trouve en **indentation** (décalé vers la droite).
Ensuite, il suffit d'écrire `rectangle()` pour dessiner un rectangle. On appelle ceci **appeler** une fonction. Ensuite, il suffit d'écrire `rectangle()` pour dessiner un rectangle. On appelle ceci **appeler** une fonction.
Rappelez-vous ceci : Rappelez-vous ceci :
- on définit une fonction une seule fois, - on définit une fonction une seule fois,
- on appelle une fonction autant de fois que l'on veut, - on appelle une fonction autant de fois que l'on veut,
- si on ne l'appelle pas, elle n'est pas exécutée et il ne se passe rien. - si on ne l'appelle pas, elle n'est pas exécutée et il ne se passe rien.
Définir une fonction nous permet de réduire le nombre de lignes de code nécessaires. Définir une fonction nous permet de réduire le nombre de lignes de code nécessaires.
Chaque fois que nous utilisons `rectangle()`, Chaque fois que nous utilisons `rectangle()`,
au lieu d'écrire 8 lignes, nous écrivons seulement une ligne de code. au lieu d'écrire 8 lignes, nous écrivons seulement une ligne de code.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 1 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 1 </h3>
Dessinez encore d'autres rectangles en appelant la nouvelle fonction `rectangle()`. Dessinez encore d'autres rectangles en appelant la nouvelle fonction `rectangle()`.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def rectangle(): def rectangle():
forward(160) forward(160)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(160) forward(160)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
rectangle() rectangle()
left(90) left(90)
rectangle() rectangle()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
``` ```
Rappel: Une indentation de texte est Rappel: Une indentation de texte est
A) un décalage vers la gauche A) un décalage vers la gauche
B) un décalage vers la droite B) un décalage vers la droite
C) une mise en paragraphe C) une mise en paragraphe
D) une mise en sous-section D) une mise en sous-section
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8"> <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">
B) un décalage vers la droite B) un décalage vers la droite
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Donner du sens ## Donner du sens
Une fonction ne permet pas seulement d'économiser des lignes de code. Une fonction ne permet pas seulement d'économiser des lignes de code.
Elle permet aussi de structurer le code et de lui donner un sens. Considérez par exemple le code ci-dessous. Il est presque impossible de comprendre ce que fait le programme en regardant les 17 lignes de code. Elle permet aussi de structurer le code et de lui donner un sens. Considérez par exemple le code ci-dessous. Il est presque impossible de comprendre ce que fait le programme en regardant les 17 lignes de code.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(30) forward(30)
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Si nous observons la tortue, nous comprenons finalement qu'elle dessine deux fois un rectangle. Nous pouvons même interpréter cette image et donner le sens de bâtiment au premier rectangle, et de porte au second. Si nous observons la tortue, nous comprenons finalement qu'elle dessine deux fois un rectangle. Nous pouvons même interpréter cette image et donner le sens de bâtiment au premier rectangle, et de porte au second.
Essayons maintenant de découper le code en **sous-programmes** en utilisant deux fonctions `batiment()` et `porte()`. Essayons maintenant de découper le code en **sous-programmes** en utilisant deux fonctions `batiment()` et `porte()`.
En regardant ces 3 lignes de code, on comprend immédiatement le sens du programme. En regardant ces 3 lignes de code, on comprend immédiatement le sens du programme.
``` python ``` python
batiment() batiment()
forward(30) # repositionner la tortue forward(30) # repositionner la tortue
porte() porte()
``` ```
La définition d'une fonction permet d'ajouter de nouveaux mots à un langage de programmation. Contrairement aux commandes natives de Python qui sont toutes en anglais, nous sommes libres de les choisir en français. La définition d'une fonction permet d'ajouter de nouveaux mots à un langage de programmation. Contrairement aux commandes natives de Python qui sont toutes en anglais, nous sommes libres de les choisir en français.
**Attention** : écrivez les fonctions sans accents et sans circonflexes : `batiment()`, `carre()`, `boite()`. **Attention** : écrivez les fonctions sans accents et sans circonflexes : `batiment()`, `carre()`, `boite()`.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 2 </h3>Ajoutez une deuxième porte au bâtiment. Ensuite, faites-en une porte double. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 2 </h3>Ajoutez une deuxième porte au bâtiment. Ensuite, faites-en une porte double.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def batiment(): def batiment():
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
def porte(): def porte():
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
batiment() batiment()
forward(30) forward(30)
porte() porte()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
À combien de lignes de code la fonction `porte()` est-elle équivalente ? À combien de lignes de code la fonction `porte()` est-elle équivalente ?
``` ```
A) 1 ligne A) 1 ligne
B) 2 lignes B) 2 lignes
C) 8 lignes C) 8 lignes
D) 17 lignes D) 17 lignes
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8"> <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">
C) 8 lignes C) 8 lignes
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Définir une fonction ## Définir une fonction
Le fait de donner un nom à une séquence d'instructions est appelé **définir une fonction**. Une **définition de fonction** comporte : Le fait de donner un nom à une séquence d'instructions est appelé **définir une fonction**. Une **définition de fonction** comporte :
1. le mot-clé `def` (définir), 1. le mot-clé `def` (définir),
1. le nom de la fonction (`batiment/porte`), 1. le nom de la fonction (`batiment/porte`),
1. les parenthèses `()`, 1. les parenthèses `()`,
1. le deux-points `:`, 1. le deux-points `:`,
1. un bloc en indentation. 1. un bloc en indentation.
Qu'est-ce qu'un bloc en indentation ? Qu'est-ce qu'un bloc en indentation ?
C'est un bloc de texte qui comporte des espaces vides à gauche. En Python, ces espaces apparaissent en multiples de 4. C'est un bloc de texte qui comporte des espaces vides à gauche. En Python, ces espaces apparaissent en multiples de 4.
L'indentation est très importante en Python. C'est l'indentation qui indique l'étendue des instructions qui font partie de la fonction. L'indentation est très importante en Python. C'est l'indentation qui indique l'étendue des instructions qui font partie de la fonction.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
``` ```
Parmi les 4 définitions de fonction ci-dessous, laquelle est correcte ? Parmi les 4 définitions de fonction ci-dessous, laquelle est correcte ?
A) def() rectangle: A) def() rectangle:
B) def: rectangle B) def: rectangle
C) def rectangle(): C) def rectangle():
D) def(rectangle): D) def(rectangle):
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8"> <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">
C) def rectangle(): C) def rectangle():
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Indenter avec un raccourci ## Indenter avec un raccourci
Comme l'indentation est tellement importante en Python, il en existe un raccourci. Comme l'indentation est tellement importante en Python, il en existe un raccourci.
Il faut d'abord sélectionner **les lignes** de code dont vous voulez changer l'indentation. Il faut d'abord sélectionner **les lignes** de code dont vous voulez changer l'indentation.
Ensuite, vous appuyez sur : Ensuite, vous appuyez sur :
- la touche **tab** pour augmenter l'indentation - la touche **tab** pour augmenter l'indentation
- la touche **maj+tab** pour diminuer l'indentation - la touche **maj+tab** pour diminuer l'indentation
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 3 </h3>Essayez ces raccourcis dans le code ci-dessous. Transformez le code en deux fonctions `batiment()` et `porte()`, que vous appelez ensuite. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 3 </h3>Essayez ces raccourcis dans le code ci-dessous. Transformez le code en deux fonctions `batiment()` et `porte()`, que vous appelez ensuite.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(200) forward(200)
left(90) left(90)
forward(100) forward(100)
left(90) left(90)
forward(30) forward(30)
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
forward(30) forward(30)
left(90) left(90)
forward(50) forward(50)
left(90) left(90)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Voici encore un raccourci très utile : **maj(ou Shift)+Enter** pour exécuter le code. Voici encore un raccourci très utile : **maj(ou Shift)+Enter** pour exécuter le code.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Maison avec porte ## Maison avec porte
Une fois qu'une fonction est définie, elle peut être utilisée partout, même dans la définition d'une autre fonction. Une fois qu'une fonction est définie, elle peut être utilisée partout, même dans la définition d'une autre fonction.
Ici, nous avons une fonction `porte()`, qui est utilisée à l'intérieur d'une deuxième fonction `maison()`. Pour que ceci soit possible, la définition de porte doit être placée avant la définition de `maison()`. Ici, nous avons une fonction `porte()`, qui est utilisée à l'intérieur d'une deuxième fonction `maison()`. Pour que ceci soit possible, la définition de porte doit être placée avant la définition de `maison()`.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 4 </h3>Déplacez la porte vers le milieu de la maison, et dessinez une deuxième maison à coté. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 4 </h3>Déplacez la porte vers le milieu de la maison, et dessinez une deuxième maison à coté.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def porte(): def porte():
forward(20) forward(20)
left(90) left(90)
forward(40) forward(40)
left(90) left(90)
forward(20) forward(20)
left(90) left(90)
forward(40) forward(40)
left(90) left(90)
def maison(): def maison():
forward(100) forward(100)
left(90) left(90)
forward(60) forward(60)
left(45) left(45)
forward(71) forward(71)
left(90) left(90)
forward(71) forward(71)
left(45) left(45)
forward(60) forward(60)
left(90) left(90)
porte() porte()
maison() maison()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Plus sur "La tortue" ## Plus sur "La tortue"
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Le point `dot()` ### Le point `dot()`
La fonction `dot()` dessine un point à la position actuelle de la tortue. La fonction `dot()` dessine un point à la position actuelle de la tortue.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 5 </h3>Ajoutez un point (`dot`) au sommet du triangle. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 5 </h3>Ajoutez un point (`dot`) au sommet du triangle.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def triangle(): def triangle():
dot() dot()
forward(100) forward(100)
left(120) left(120)
dot() dot()
forward(100) forward(100)
left(120) left(120)
forward(100) forward(100)
triangle() triangle()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Lever le stylo ### Lever le stylo
Les deux commandes `up()` et `down()` permettent de lever et de baisser le stylo. Les deux commandes `up()` et `down()` permettent de lever et de baisser le stylo.
Ceci nous permet de dessiner des formes séparées, comme ici le petit i avec son point. Ceci nous permet de dessiner des formes séparées, comme ici le petit i avec son point.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 6 </h3>Transformez le i vers un i avec trema (deux points). <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 6 </h3>Transformez le i vers un i avec trema (deux points).
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def i(): def i():
dot() dot()
pendown() # poser le stylo pendown() # poser le stylo
left(90) left(90)
forward(50) forward(50)
penup() # lever le stylo penup() # lever le stylo
forward(50) forward(50)
dot() dot()
backward(2*50) backward(2*50)
right(90) right(90)
forward(50/2) # avancer à la prochaine lettre forward(50/2) # avancer à la prochaine lettre
i() i()
i() i()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Exercices d'entraînement ## Exercices d'entraînement
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 7 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 7 </h3>
Compléter le programme ci-dessous en ajoutant des appels à la fonction `forme_mystere()` pour pour créer le dessin suivant: Compléter le programme ci-dessous en ajoutant des appels à la fonction `forme_mystere()` pour pour créer le dessin suivant:
![Image de quatre carres](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/quatre_carres.png) ![Image de quatre carres](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/quatre_carres.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
# permet d'utiliser les fonctions pour dessiner # permet d'utiliser les fonctions pour dessiner
from turtle import * from turtle import *
# Définition de la fonction mystère # Définition de la fonction mystère
def forme_mystere(): def forme_mystere():
for k in range(4): for k in range(4):
forward(100) forward(100)
right(90) right(90)
forme_mystere() forme_mystere()
# à compléter # à compléter
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 8 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 8 </h3>
1. Testez le programme suivant. 1. Testez le programme suivant.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
# permet d'utiliser les fonctions pour dessiner # permet d'utiliser les fonctions pour dessiner
from turtle import * from turtle import *
# Code à factoriser # Code à factoriser
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
for k in range(6): for k in range(6):
forward(200) forward(200)
right(60) right(60)
right(60) right(60)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
2. Définissez une fonction `hexagone()` qui permet de tracer des hexagones et utilisez-là pour réduire le nombre d’instructions du programme précédent. 2. Définissez une fonction `hexagone()` qui permet de tracer des hexagones et utilisez-là pour réduire le nombre d’instructions du programme précédent.
%% Cell type:markdown id: tags: %% Cell type:code id: tags:
``` python
# permet d'utiliser les fonctions pour dessiner
from turtle import *
def #a compléter
#a compléter
#a compléter
done()
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 9 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 9 </h3>
Testez le programme ci-dessous, puis modifiez le en définissant au début une fonction `carre100()` qui dessine un carré de longueur 100 afin d'obtenir un programme structuré sans répétition inutile. Testez le programme ci-dessous, puis modifiez le en définissant au début une fonction `carre100()` qui dessine un carré de longueur 100 afin d'obtenir un programme structuré sans répétition inutile.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
for _ in range(4): for _ in range(4):
forward(100) forward(100)
left(90) left(90)
left(180) left(180)
for _ in range(4): for _ in range(4):
forward(100) forward(100)
left(90) left(90)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 10 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 10 </h3>
Dans le programme ci-dessous: Dans le programme ci-dessous:
1. Définissez une fonction `triangle100()` pour dessiner un triangle équilatéral de côté 100 comme dans l’illustration A. 1. Définissez une fonction `triangle100()` pour dessiner un triangle équilatéral de côté 100 comme dans l’illustration A.
2. Utilisez `triangle100()` pour dessiner une forme comme dans l’illustration B. 2. Utilisez `triangle100()` pour dessiner une forme comme dans l’illustration B.
![Image de triangles](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/triangles.png) ![Image de triangles](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/triangles.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
# à compléter # à compléter
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 11 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 11 </h3>
Utilisez les commandes `carre100()` et `triangle100()` définies dans les exercices 9 et 10 pour dessiner une figure semblable à celle représentée ci-dessous. Utilisez les commandes `carre100()` et `triangle100()` définies dans les exercices 9 et 10 pour dessiner une figure semblable à celle représentée ci-dessous.
![Image de maisons](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/maison.png) ![Image de maisons](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/maison.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
# à compléter # à compléter
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 12 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 12 </h3>
Dans le programme ci-dessous: Dans le programme ci-dessous:
1. Définissez une fonction `carre_ouvert()` qui dessine un carré ouvert comme dans l’illustration A. 1. Définissez une fonction `carre_ouvert()` qui dessine un carré ouvert comme dans l’illustration A.
2. Utilisez `triangle100()` pour dessiner une croix comme dans l’illustration B. 2. Utilisez `triangle100()` pour dessiner une croix comme dans l’illustration B.
![Image de croix](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/croix.png) ![Image de croix](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/croix.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
# à compléter # à compléter
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 9 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 13 </h3>
Créez une fonction `paquebot()` et utilisez pour dessiner deux paquebots. Créez une fonction `paquebot()` et utilisez pour dessiner deux paquebots.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
forward(200) forward(200)
left(80) left(80)
forward(60) forward(60)
left(100) left(100)
forward(220) forward(220)
left(100) left(100)
forward(60) forward(60)
penup() penup()
left(125) left(125)
forward(30) forward(30)
right(45) right(45)
for i in range(6): for i in range(6):
pendown() pendown()
circle(10, 360) circle(10, 360)
penup() penup()
forward(30) forward(30)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 10 </h3>Coloriez la fleur. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 14 </h3>
Utilisez l'instruction `carre100()` définie dans l'exercices 9 pour réaliser le programme qui dessine d’abord 2 carrés décalés d’un angle de 20° (figure A) et ensuite la figure avec 18 carrés (figure B)..
![Image de maisons](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap3/carres_tournant.png)
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 15 </h3>Coloriez la fleur.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def petale(): def petale():
for _ in range(2): for _ in range(2):
circle(100, 120) circle(100, 120)
left(60) left(60)
for _ in range(6): for _ in range(6):
petale() petale()
left(60) left(60)
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 11 </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 16 </h3>
Ajoutez une fonction `m()` pour écrire le mot `nom`. Ajoutez ensuite des fonctions qui dessinent les lettres pour écrire votre prénom. Ajoutez une fonction `m()` pour écrire le mot `nom`. Ajoutez ensuite des fonctions qui dessinent les lettres pour écrire votre prénom.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
width(5) width(5)
r = 30
def n(): def n():
down() down()
left(90) left(90)
forward(2*30) # montée forward(2*30) # montée
backward(30) # retour au milieu backward(30) # retour au milieu
circle(-30, 180) # demi-cercle circle(-30, 180) # demi-cercle
forward(30) # descente forward(30) # descente
left(90) left(90)
up() up()
forward(30) # avance vers la prochaine lettre forward(30) # avance vers la prochaine lettre
def o(): def o():
forward(30) # avance vers milieu forward(30) # avance vers milieu
down() down()
circle(30) circle(30)
up() up()
forward(2*30) # avance vers prochaine lettre forward(2*30) # avance vers prochaine lettre
n() n()
o() o()
n() n()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 12</h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 17</h3>
Avec des rails de chemin de fer, dessinez un circuit en forme d'un rond (deux rails avec les traverses).
![rails](https://raw.githubusercontent.com/edunumsec2/book/master/src/appr/prog1/media/rails2.png)
Utilisez une boucle `for` pour la répétition des traverses.
%% Cell type:code id: tags:
``` python
from turtle import *
# Prénom Nom, classe
def traverse():
...
forward(200)
done()
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 13</h3>
Dessinez et coloriez un jardin. Définissez des fonctions pour des pétales, feuilles et fleurs. Dessinez et coloriez un jardin. Définissez des fonctions pour des pétales, feuilles et fleurs.
*Indication: Inspirez vous de l'exercice 15.*
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
# Prénom Nom, classe # Prénom Nom, classe
dot(1000, 'lightgreen') # background dot(1000, 'lightgreen') # background
def petale(): def petale():
... ...
def feuille(): def feuille():
... ...
def fleur(): def fleur():
dot(50, 'red') dot(50, 'red')
feuille() feuille()
forward(200) forward(200)
fleur() fleur()
done() done()
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 14 (meubles) </h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 18 (meubles) </h3>
Définissez 3 fonctions pour dessiner une chaise, une table et un lit. Définissez 3 fonctions pour dessiner une chaise, une table et un lit.
Ensuite placez plusieurs meubles dans l'espace Ensuite placez plusieurs meubles dans l'espace
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from turtle import * from turtle import *
def chaise(): def chaise():
# à compléter... # à compléter...
def table(): def table():
# à compléter... # à compléter...
def lit(): def lit():
# à compléter... # à compléter...
chaise() chaise()
table() table()
lit() lit()
done() done()
``` ```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 19 </h3>
Utiliser votre identifiant EEL et le mot de passe *Sismondi2024* pour faire les exercices de la **série D** de la plateforme [AlgoPython](https://www.algopython.fr/login). [![A mushroom-head robot](https://www.algopython.fr/css/img/navbar-logo.png 'AlgoPython')](https://www.algopython.fr/login)
%% Cell type:markdown id: tags:
---
#### Remarque générale
Ce document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)
![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
Notebooks/imgs_chap3/carres_tournant.png

79.2 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment