Dans cette activité, nous allons utiliser les connaissances que vous avez en Scratch pour découvrir le langage Python.
Voici un premier exemple d'utilisation du module turtle.
from turtle import * # permet d'importer le module turtle color('red') down() speed(1) for i in range(4): forward(100) left(90) up() exitonclick()
Ouvrez un IDE Python (EduPython, PyScripter, Spyder, ...) et commentez ce code en prenant exemple sur ce qui a été fait dans la partie droite de la première ligne. On utilisera le symbole # devant les commentaires.
A retenir :Tout code doit être accompagné de commentaires pour en faciliter la lecture ou la relecture.
Voici deux tutoriels qui vous permettront d'approfondir le module turtle de Python :
Voici les principales fonctions du module turtle dont on peut avoir besoin pour commencer.
reset() #On efface tout et on recommence goto(x,y) #aller au point de coordonnées (x,y) forward(d); backward(d) #avancer, reculer d'une distance d up() ; down() #relever, abaisser le crayon left(alpha); right(alpha) #tourner à gauche, tourner à droite d'un angle alpha (en degré) color(couleur); width(l) #couleur et épaisseur du tracé fill(1) #Remplit un contour fermé à l'aide de la couleur sélectionnée speed(1) #Règle la vitesse de la tortue à 1 exitonclick() #permet de fermer la fenètre de dessin lorsque'on clique
En utilisant les fonctions du module turtle que vous avez découvertes jusqu'ici, essayez de dessiner les 4 formes suivantes que vous avez déjà codées en utilisant un langage graphique dans l'activité code.org.
Remarque :On remarquera que pour éviter d'accumuler les lignes d'instructions répétitives la boucle bornée Pour (for) est bien utile. Nous allons voir dans la suite comment on peut encore optimiser ce code.
Avec Scratch, lorsqu’on doit dessiner plusieurs triangles équilatéraux dans une même figure, on a intérêt à utiliser un bloc (Ajouter blocs) pour diminuer le nombre de blocs utilisés.
Il en est de même avec Python. On peut créer une fonction Python comme ci-dessous.
from turtle import* #Fonction qui dessine un triangle équilatéral de côté c def triangle(c): for i in range(3): forward(c) right(120) #Programme principal color('red') speed(1) down() for i in range(6): triangle(100) left(60) up() exitonclick() |
En vous inspirant de ce qui précède, dessinez à l’aide de Python les dessins suivants.
Remarque 1 :Avez-vous pensé à créer une fonction maison pour obtenir les dessins 7 et 8 ?
Remarque 2 :Dans certains langages, on dira que les « fonctions » que vous venez de créer sont des procédures. En informatique, une procédure ne renvoie pas de valeur, par opposition à une fonction informatique qui elle renvoie une valeur. En Python, c’est très simple, procédures et fonctions sont désignées par le mot fonction !
Dans la suite, on va construire une fonction qui renvoie une valeur numérique.
On s’appuiera sur l’exemple de la fonction maSomme ci-dessous qui prend en paramètres deux nombres x et y et qui renvoie la somme de ces deux nombres.
def maSomme(x,y): # maSomme prend 2 paramètres x et y som=x+y # on affecte à la variable som la somme de x et y return som # on retourne le contenu de la variable som x=2 # on affecte à la variable x la valeur 2 y=3 # on affecte à la variable y la valeur 3 print(maSomme(2,3)) # On affiche dans la console, grâce à la fonction print(...), # la valeur renvoyée par la fonction maSomme avec les arguments 2 et 3 # On peut également, rendre plus convivial l'affichage dans la console : print("La somme de",x," et ",y," est égale à :", maSomme(2,3))
A faire :Construire la fonction dist(xA,yA,xB,yB) qui prend en paramètres xA et yA l’abscisse et l’ordonnée d’un point A, xB et yB l’abscisse et l’ordonnée d’un point B et qui renvoie la distance euclidienne entre les points A et B:
Indications 1:On rappelle la propriété suivante.
Propriété : Si \(A(x_A;y_A)\) et \(B(x_B;y_B)\) sont deux points du plan, alors \(AB=\sqrt{(x_B-x_A)^2+(y_B-y_A)^2}\) |
x**2 # renvoie le carré du nombre xIndications 3:En Python, pour obtenir la fonction racine carrée, il faut tout d’abord appeler le module math à l’aide de l’instruction suivante placée en début de code.
from math import*Ce module contient la fonction sqrt(...) qui désigne la fonction racine carrée. Le module math contient d’autres fonctions utiles. En voici une liste non exhaustive.
from math import* sqrt(4) sin(pi/4) cos(pi/3) floor(pi) exp(0),exp(1) log(1,e),log(e,e) log2(2**5) |
# renvoie la racine carrée de 4 # renvoie le sinus de \(\frac{\pi}{4}\) # renvoie le cosinus de \(\frac{\pi}{3}\) # renvoie la partie entière du nombre \(\pi\) # renvoie l'exponentielle de 0 et l'exponentielle de 1 # renvoie le logarithme népérien de 1 et de e # renvoie le logarithme en base 2 de 32 |
Dans tous les dessins précédents, le nombre de carrés ou de triangles (ou maisons) à dessiner était dénombrable. C'est pour cela que nous avons utilisé des boucles bornées Pour (for).
C'est encore le cas dans l'exemple suivant.
from turtle import * # permet d'importer le module turtle up() color('blue') shape('blank') width(2) speed(5) goto(0,100) down() a=5 for i in range(10): forward(a) left(90) a=a+5 exitonclick()Dans ce qui suit, on ne sait pas combien de fois, nous allons devoir répéter les instructions. C'est pour cela que nous allons utiliser la boucle non bornée Tant Que (while).
Rappel :Tant que la condition est vraie, les instructions qui suivent et qui sont indentées vont être exécutées.
Lorsque la condition devient fausse, la première instruction (non indentée) qui suit sera effectuée.
Pour éviter de "tomber dans une boucle infinie", il faut bien s'assurer que la condition peut devenir fausse.
while condition: Instruction1 Instruction2 ...
Vous trouverez ci-dessous, les opérateurs de comparaison et les opérateurs logiques qui vous permettrons de rédiger vos conditions.
Opérateurs de comparaisons | Opérateurs logiques |
< #Strictement inférieur à > #Strictement supérieur à <= #Inférieur ou égal à >= #Supérieur ou égal à == #Égal à != #Différent de |
not #non and #et or #ou |
A faire :Créer le code qui permet de dessiner la spirale du Dessin 9 ci-dessous.
Indications :Avant toutes choses, on commencera par déterminer l'angle qui permet de construire la spirale.
Le centre de la spirale qui est aussi le point de départ aura pour coordonnées (0 ;0).
La distance entre la tortue et le centre de la spirale ne devra pas dépasser 100px.
On aura besoin des fonctions suivantes qui font partie du module turtle.
x=xcor() # on affecte à la variable x l’abscisse de la tortue y=ycor() # on affecte à la variable y l’ordonnée de la tortue
A retenir :
Rappel : Voici comment elle se code en langage Python.
if condition: Instruction1 ... else: Instruction1bis ...
Exemple :
from turtle import * # permet d'importer le module turtle speed(10) width(2) goto(-100,0) down() for a in range(10): if a%2==0: #reste de la division euclidienne de a par 2 (résultat de type entier) color('blue') else: color('red') forward(30) exitonclick()
A faire : Modifiez le code que vous avez développé pour obtenir le dessin 9 de manière à obtenir le dessin suivant.
Opérations de base
a+b #a plus b a-b #a moins b a*b #a multiplié par b a**3 # a puissance 3 a/b #a divisé par b (résultat de type float) a//b #quotient de la division de a par b (résultat de type entier) a%b #modulo ou reste de la division de a par b (résultat de type entier)
Pour ceux qui ont terminé, voici une question dans laquelle vous allez pouvoir réinvestir tout ce que vous avez compris.