Dans le chapitre précédent sur la programmation modulaire, nous avons vu l'exemple de code suivant

from oxosnake import * 

def square():
    repeat 4:
        forward(3)
        right(90)

makeSnake()
setSpeed(90)
setPos(0, 7)
square()
setPos(4, 7)
square()

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e06b5b6a-78d3-42f5-93c9-71d285daef06/Untitled.png

Vous pouvez remarquer qu'avant de dessiner un carré à un autre endroit, il faut explicitement repositionner le serpent avec la commande setPos(x, y). Cette commande n'est pas la première que nous rencontrons pour laquelle on peut spécifier des valeurs entre parenthèses lors de son appel. Ce genre de valeurs qui influencent le comportement des commandes s'appellent des paramètres de la commande.

Il serait pratique d'étendre un peu notre commande square pour qu'elle puisse elle aussi accepter de tels paramètres. Cela nous permettrait d'indiquer directement où l'on veut placer le carré (par exemple son coin supérieur gauche) au lieu d'avoir à appeler chaque fois setPos(x, y).

C'est en fait très simple à faire. Il suffit de définir la commande square en spécifiant le nom des paramètres désirés entre parenthèses, séparés par des virgules.

def square(x, y):
	# code pour dessiner le carré ici

Une fois que la commande a été définie avec des paramètres, il est ensuite possible d'utiliser ces derniers dans le corps de la commande comme s'il s'agissait de nombres :

def square(x, y):
    setPos(x, y)
    repeat 4:
        forward(3)
        right(90)

On peut donc en profiter pour utiliser la commande setPos(x, y) une seule fois dans la fonction au lieu d'avoir à la répéter à chaque fois avant de dessiner un nouveau carré. On suit ainsi un principe important de la programmation : le principe DRY (Don't Repeat Yourself).

On peut ensuite appeler cette commande en lui passant des paramètres, ce qui permet de la rendre beaucoup plus puissante et réutilisable :

from oxosnake import * 

def square(x, y):
    setPos(x, y)
    repeat 4:
        forward(3)
        right(90)

makeSnake()
setSpeed(90)

square(0, 7)
square(4, 7)

Lors de l'appel de la commande avec square(0, 7), les valeurs x, y que Python rencontre à l'intérieur de la commande square sont remplacées par les valeurs concrètes 0 et 7 fournies lorsque la commande a été appelée.

Exercices

Exercice 1

Refaites les exercices du chapitre précédent en utilisant la fonction square(x, y) au lieu de développer plusieurs fonctions square pour chaque cas particulier.

Exercice 2a

Définissez une fonction square(x, y, size) dont le troisième paramètre size permet de spécifier la longueur des côtés du carré à dessiner.

Utilisez ensuite cette nouvelle fonction pour dessiner le motif ci-contre.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/95240c71-40df-481b-8757-015dedb44017/Untitled.png

Exercice 2b

Utilisez la fonction square(x, y, size) de l'exercice précédent pour dessiner le motif représenté ci-contre.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f7f93ec0-995b-4265-93ad-eb798da1f848/Untitled.png