La tortue

La tortue

Le module turtle est écrit sur le principe de la "tortue logo" (la tortue logo date des années 1970).
Vous trouverez sur internet de nombreux logiciels reprenant cette idée de la tortue logo dans le but souvent d'enseigner l'algorithmique et/ou la géométrie élémentaire à de jeunes enfants.
L'intérêt d'utiliser ici ce module : pouvoir profiter d'instructions simples de tracés de figures. On peut ainsi concevoir et tester quelques algorithmes de représentations de figures, qui ne sont pas nécessairement simples.

Prise en main.

Découvrez les instructions du module à l'aide de la documentation python , et des exemples ici (interactif) .

Un premier exemple

Une fonction pour représenter un rectangle de côtés parallèles aux bords de l'écran.


from turtle import *

def rectangle(cbg, chd, couleur) :
	""" cbg=(x,y) (coin bas gauche) 
	et chd=(x',y') (coin haut droit) 
	sont deux couples de nombres,
	coordonnées de sommets opposés
	du rectangle."""
	pencolor(couleur) # crayon de couleur 
	penup() # on lève le crayon
			# permet de ne pas tracer lors des déplacements
	setposition(cbg[0],cbg[1]) # la tortue va au point de coordonnées (cbg[0],cbg[1])
	                           # c'est à dire au coin inférieur gauche
	pendown() # baisse crayon pour tracer
	setposition(chd[0],cbg[1]) # la tortue va au coin inférieur droit
	setposition(chd[0],chd[1]) # la tortue va au coin supérieur droit
	setposition(cbg[0],chd[1]) # la tortue va au coin supérieur gauche
	setposition(cbg[0],cbg[1]) # la tortue va au coin inférieur gauche
	
	
setworldcoordinates(-1,-1,12,12) # pour ouvrir une fenêtre 
								# coin inférieur droit (-1,-1)
								# coin supérieur gauche (12,12)
rectangle((0,0),(10,10),'red')	
rectangle((1,1),(9,8),'blue')	
rectangle((2,3),(7,5),'green')	
mainloop() # pour maintenir fenêtre ouverte

Le résultat est le suivant :
 des rectangles

Nous avons utilisé des "déplacements absolus" dans la version précédente en indiquant à chaque fois les coordonnées du point "à rejoindre".

Les déplacements peuvent être relatifs : on demande à la tortue de commencer par s'orienter dans la direction du prochain segment à tracer puis on lui demande de parcourir une certaine longueur.

Exemple pour tracer à nouveau des rectangles de côtés parallèles aux bords :


from turtle import *
 
    
    
def rectangle(cbg, largeur, hauteur, couleur) :
    """ cbg=(x,y) (coin bas gauche) 
    largeur : longueur du côté horizontal,
    hauteur : longueur du côté vertical,
    couleur : couleur du tracé."""
    pencolor(couleur) # crayon de couleur 
    penup() # on lève le crayon
            # permet de ne pas tracer lors des déplacements
    setposition(cbg[0],cbg[1]) # la tortue va en (cbg[0],cbg[1])
    setheading(0) # la tortue regarde vers la droite
    pendown() # baisse crayon pour tracer
    forward(largeur) # la tortue trace le côté horizontal bas
    left(90) # la tortue regarde maintenant vers le haut (elle fait un quart de tour, sens trigo)
    forward(hauteur) #  la tortue trace le côté vertical droit
    left(90) # la tortue regarde maintenant vers la gauche
    forward(largeur) # la tortue trace le côté horizontal haut
    left(90) # la tortue regarde maintenant vers le bas
    forward(hauteur) #  la tortue trace le côté vertical gauche
    
    
setworldcoordinates(-2,-2,9,6) # pour ouvrir une fenêtre 
                                # coin inférieur droit (-1,-1)
                                # coin supérieur gauche (9,6)
rectangle((-1,-1), 8, 5, 'orange') 
rectangle((1,2), 3, 3.5, 'blue') 
 
mainloop() # pour maintenir fenêtre ouverte

Le résultat est le suivant :
 des rectangles

Un échiquier

On cherche à dessiner un échiquier (une grille) de l lignes sur c colonnes.


from turtle import *

def echiquier(l,c, cbg , u ) :
	""" l (type int) : nombre de lignes de l'échiquier.
	c (type int) : nombre de colonnes de l'échiquier.
	cbg=(x,y) couple des coordonnées du coin inférieur gauche.
	u (type int ou float) : longueur de côté d'une case de l'échiquier.
	"""
	
	# dessin des bords des lignes de l'échiquier :
	setheading(0)
	for i in range(l+1) :
		penup()  
		setposition(cbg[0],cbg[1]+i*u)
		pendown()
		setposition(cbg[0]+c*u,cbg[1]+i*u)
		
	# dessin des bords des colonnes de l'échiquier :
	setheading(90)
	for i in range(c+1) :
		penup()  
		setposition(cbg[0]+i*u,cbg[1])
		pendown()
		setposition(cbg[0]+i*u,cbg[1]+l*u)
	
############ main ################################	  
l=5
c=7	
u=2
setworldcoordinates(-1,-1,c*u+1, l*u+1) # fenêtre du graphique  
shape("turtle") # une tortue qui ressemble à une tortue
echiquier(l,c, (0,0), u)
hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte