"<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n",
" \n",
"Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\n",
"Veuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n",
"</p> </div> "
]
},
{
"cell_type": "markdown",
"metadata": {},
...
...
@@ -9,7 +22,7 @@
"Dans cette leçon, nous allons approfondir le concept de la fonction. Dans la leçon 3 sur les fonctions simples, nous avons vu la fonction comme une façon de donner un nom à une séquence d'instructions. Ici nous allons voir comment nous pouvons ajouter un ou plusieurs paramètres à une fonction. Nous allons voir que :\n",
"\n",
"- l'expression `def rect(d, e):` permet de définir une fonction avec deux paramètres,\n",
"- les paramètres `d, e` sont des variables locales valides uniquement à l'intérieur de la définition de fonction,\n",
"- les paramètres `d` et `e` sont des variables locales valides uniquement à l'intérieur de la définition de fonction,\n",
"- ces paramètres prennent une valeur au moment de l'appel de la fonction avec `rect(50, 30)`.\n",
"- l'axe horizontal x, s'étend de -300 à +300 (à droite),\n",
"- l'axe vertical y, s'étend de -200 à +200 (en haut).\n",
"!!!\n",
"\n",
"La fonction `goto(x, y)` permet de placer directement la tortue à la position de coordonnées `(x, y)`. On peut utiliser `goto(x, y)` pour positionner notre maison à un endroit précis.\n",
"\n",
"Pour désigner une position, nous utilisons la variable `p` (p pour position) qui représente le couple de coordonnées `[x, y]`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>Aujoutez deux autres maisons de taille différente.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from turtle import *\n",
"\n",
"def maison(p , d):\n",
" goto(p) # aller à la position p\n",
" dot() # ajouter un marquer (dot)\n",
" down()\n",
" forward (1.41*d) # sol\n",
" left(90)\n",
" forward(d) # mur droit\n",
" left(45)\n",
" forward(d) # toit droit\n",
" left(90)\n",
" forward(d) # toit gauche\n",
" left(45)\n",
" forward(d) # mur gauche\n",
" left(90)\n",
" up()\n",
"\n",
"maison([0, 0], 50) # maison à la position (0, 0)\n",
"maison([-150, 50], 70) # maison à la position (-150, 50)\n",
"\n",
"done()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"!!! info Les listes\n",
"En Python les données peuvent être de plusieurs type. Par exemple, nous avons déjà rencontré le type nombre entier (`int`), nombre à virgule **flottante** (`float`) et chaînes de caractères (`str`).\n",
"\n",
"En python, le type `list` permet de définir des données composée d e plusieurs valeurs. Il suffit de mettre les valeurs, séparées par des virgules, entre des crochets.\n",
"1. Testez le programme suivant (voir plus bas pour tester) :\n",
"\n",
"```Python\n",
"from turtle import *\n",
"\n",
"# pour être à gauche du canevas\n",
"backward(250)\n",
"\n",
"# Code à factoriser\n",
"for k in range(3):\n",
" forward(30)\n",
" right(120)\n",
"forward(30)\n",
"for k in range(3):\n",
" forward(60)\n",
" right(120)\n",
"forward(60)\n",
"for k in range(3):\n",
" forward(90)\n",
" right(120)\n",
"forward(90)\n",
"for k in range(3):\n",
" forward(120)\n",
" right(120)\n",
"forward(120)\n",
"for k in range(3):\n",
" forward(150)\n",
" right(120)\n",
"\n",
"done()\n",
"```\n",
"1. Testez le programme suivant ci-dessous.\n",
"2. Définissez une fonction `triangle(l)`, qui permet de tracer des triangles équilatéraux de longueur lg, et utilisez-là pour réduire le nombre d’instructions du programme. \n",
"\n",
"**NB**: Le nombre d'instructions du programme doit être au moins divisé par 2.\n"
...
...
@@ -1056,13 +875,6 @@
"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)\n",
<p> Ce fichier est fait pour être lu sur le site <ahref="https://notebook.basthon.fr/"><imgsrc='https://notebook.basthon.fr/assets/efede5218c9087496f16.png'style="border: 0; display:inline; margin: 0 5px; height:30px"alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <ahref="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" <iclass="fa fa-folder"aria-hidden="true"></i>
</p></div>
%% Cell type:markdown id: tags:
# 4. Les fonctions avec paramètres
Dans cette leçon, nous allons approfondir le concept de la fonction. Dans la leçon 3 sur les fonctions simples, nous avons vu la fonction comme une façon de donner un nom à une séquence d'instructions. Ici nous allons voir comment nous pouvons ajouter un ou plusieurs paramètres à une fonction. Nous allons voir que :
- l'expression `def rect(d, e):` permet de définir une fonction avec deux paramètres,
- les paramètres `d, e` sont des variables locales valides uniquement à l'intérieur de la définition de fonction,
- les paramètres `d` et `e` sont des variables locales valides uniquement à l'intérieur de la définition de fonction,
- ces paramètres prennent une valeur au moment de l'appel de la fonction avec `rect(50, 30)`.
Jusqu'à maintenant, notre rectangle était d'une taille fixe. La fonction `rectangle()` de la leçon 3 sur les fonctions simples
```python
defrectangle():
forward(160)
left(90)
forward(100)
left(90)
forward(160)
left(90)
forward(100)
left(90)
```
dessine toujours un rectangle de 160 x 100 pixels. Il faudrait faire une nouvelle fonction `rectangle2()` si on voulait dessiner une taille différente.
Il serait très utile de disposer d'une fonction de la forme `rectangle(d, e)` qui puisse dessiner des rectangles de largeur et hauteur variable.
C'est possible en spécifiant des **paramètres** pour la fonction.
Un paramètre de fonction est une **variable locale** qui peut être utilisée dans sa définition.
Lors de l'appel de la fonction, nous donnons des valeurs à la fonction.
Ces valeurs sont les **arguments** de la fonction.
- l'axe horizontal x, s'étend de -300 à +300 (à droite),
- l'axe vertical y, s'étend de -200 à +200 (en haut).
!!!
La fonction `goto(x, y)` permet de placer directement la tortue à la position de coordonnées `(x, y)`. On peut utiliser `goto(x, y)` pour positionner notre maison à un endroit précis.
Pour désigner une position, nous utilisons la variable `p` (p pour position) qui représente le couple de coordonnées `[x, y]`.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 3 </h3>Aujoutez deux autres maisons de taille différente.
%% Cell type:code id: tags:
``` python
fromturtleimport*
defmaison(p,d):
goto(p)# aller à la position p
dot()# ajouter un marquer (dot)
down()
forward (1.41*d)# sol
left(90)
forward(d)# mur droit
left(45)
forward(d)# toit droit
left(90)
forward(d)# toit gauche
left(45)
forward(d)# mur gauche
left(90)
up()
maison([0,0],50)# maison à la position (0, 0)
maison([-150,50],70)# maison à la position (-150, 50)
done()
```
%% Cell type:markdown id: tags:
!!! info Les listes
En Python les données peuvent être de plusieurs type. Par exemple, nous avons déjà rencontré le type nombre entier (`int`), nombre à virgule **flottante** (`float`) et chaînes de caractères (`str`).
En python, le type `list` permet de définir des données composée d e plusieurs valeurs. Il suffit de mettre les valeurs, séparées par des virgules, entre des crochets.
!!!
%% Cell type:markdown id: tags:
## Colorier la maison
Maintenant nous modifions la fonction pour inclure non seulement la position, la taille, mais également la couleur de la maison comme paramètres. Les arguments de la fonction sont :
-`p` -- position de la maison
-`d` -- dimension de la maison
-`c` -- couleur de la maison
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 4 </h3>Aujoutez deux autres maisons de taille et couleur différente.
1. Modifiez les couleurs pour afficher le drapeau de l'irlande (ou d'un autre pays de votre choix).
2. Créez une deuxième fonction `drapeau2(d, c, c2, c3)` qui crée un drapeau avec des barres horizontales et utilisez là pour dessiner le drapeau des pays bas (ou d'un autre pays de votre choix).
%% Cell type:code id: tags:
``` python
fromturtleimport*
defrectangle(d,e,c):
fillcolor(c)
begin_fill()
foriinrange(2):
forward(d)
left(90)
forward(e)
left(90)
end_fill()
defdrapeau(d,c1,c2,c3):
rectangle(d,2*d,c1)
forward(d)
rectangle(d,2*d,c2)
forward(d)
rectangle(d,2*d,c3)
drapeau(50,'blue','white','red')
done()
```
%% Cell type:markdown id: tags:
## Arbre
Pour dessiner un arbre simple, nous utilisons un segment droit pour le tronc et un disque (dot) pour le feuillage.
1. Testez le programme suivant (voir plus bas pour tester) :
```Python
from turtle import *
# pour être à gauche du canevas
backward(250)
# Code à factoriser
for k in range(3):
forward(30)
right(120)
forward(30)
for k in range(3):
forward(60)
right(120)
forward(60)
for k in range(3):
forward(90)
right(120)
forward(90)
for k in range(3):
forward(120)
right(120)
forward(120)
for k in range(3):
forward(150)
right(120)
done()
```
1. Testez le programme suivant ci-dessous.
2. Définissez une fonction `triangle(l)`, qui permet de tracer des triangles équilatéraux de longueur lg, et utilisez-là pour réduire le nombre d’instructions du programme.
**NB**: Le nombre d'instructions du programme doit être au moins divisé par 2.
Définissez une commande `rangee_triangles(nombre, cote)` qui dessine une rangée de pyramides selon l’illustration. Chaque triangle a des côtés de longueur `cote`.
Le paramètre `nombre` indique le nombre de triangles dans la rangée. Utilisez ensuite
cette commande pour dessiner une rangée de 13 triangles de côtés 31, centrée au
milieu de la fenêtre.

Définissez une fonction `maison(h, c)` qui dessine une maison avec une porte de hauteur `h` et de vouleur `c`.
Les autres dimensions de la maison sont représentées sur l'image ci-dessous.

Écrire un programme qui utilise la fonction `maison(h, c)` pour reproduire la figure suivante:

%% Cell type:code id: tags:
``` python
fromturtleimport*
defmaison(h,c):
# a compléter
speed(9)# pour dessiner vite
# dessiner le village (a compléter)
# a compléter
done()
```
%% Cell type:markdown id: tags:
# Complément sur les valeurs par défaut *
Quand une fonction possède beaucoup d'arguments, nous pouvons spécifier des valeurs par défaut. Pour ceci nous ajoutons la valeur par défaut dans la liste de paramètres avec le symbole `=`.
La fonction `rectangle(p, d, e, w=1, pen='black', fill='white')` dessine un rectangle aux dimensions `d` x `e` à la position `p`.
Cette fonction possède 3 paramètres optionnels (valeur par défaut en parenthèse):
-`w` -- épaisseur de ligne (`1`)
-`pen` -- couleur de ligne (`'black'`)
-`fill` -- couleur de remplissage (`'white'`)
Il a maintenant différentes façons à appeler la fonction. Tous les paramètres qui ont une valeur par défaut sont optionnels. Au minimum nous devons spécifier les paramètres sans valeur par défaut.
```
rectangle((40, 0), 80, 40)
```
Le rectangle est dessiné dans la direction actuelle de la tortue. Cette orientation peut être changée avec `seth()`. La tortue se positionne de l'autre côté du point de départ. Ceci permet d'enchainer à dessiner des rectangles.
%% Cell type:code id: tags:
``` python
fromturtleimport*
penup()
defrectangle(p,d,e,w=1,pen='black',fill='white'):
goto(p)
pendown()
width(w)
pencolor(pen)
fillcolor(fill)
begin_fill()
foriinrange(2):
forward(d)
left(90)
forward(e)
left(90)
end_fill()
penup()
rectangle([-200,30],40,30)
rectangle([-100,-20],40,30,1,'orange','orange')
rectangle([100,-40],30,80,fill='yellow')
rectangle([200,100],80,40,1,'red','pink')
done()
```
%% Cell type:markdown id: tags:
## Polygone régulier
La fonction `polygone()` dessine un polygone régulier avec n sommets. Les arguments de la fonction sont :
-`d` -- distance du segment
-`n` -- nombre de segments
%% Cell type:code id: tags:
``` python
fromturtleimport*
defpolygon(d,n,w=1,pen='black',fill='white'):
down()
pencolor(pen)
width(w)
fillcolor(fill)
begin_fill()
foriinrange(n):
forward(d)
left(360/n)
end_fill()
up()
up()
backward(280)
forninrange(3,9):
polygon(40,n,fill='lime')
color('black')
forward(100)
done()
```
%% Cell type:markdown id: tags:
## Polygone étoilé
En ajoutant un paramètre supplémentaire `m`, la fonction `polygone()` permet également de dessiner un polygone étoilé. Ce paramètre signifie le nombre de pics sauté pour aller au prochain des `n` points répartis dans un cercle. Pour `m=1` un polygone régulier est dessiné.
es arguments de la fonction sont :
-`d` -- distance du segment
-`n` -- nombre de segments
-`m` -- paramètre pour polygone étoilé (nombre de pics sautés)
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)