La tortue

La petite maison.

On rappelle :

  • Qu'au départ la tortue est orientée de l'ouest vers l'est (elle regarde vers la droite de l'écran).
  • Que forward(x) fait avancer la tortue de x pixels (x est de type int ou float).
  • Que left(a) fait tourner la tortue de a degrés vers sa gauche (a est de type int ou float).
  • Que right(a) fait tourner la tortue de a degrés vers sa droite.

Donner une série d'instructions possibles pour représenter le schéma de maison ci-dessous :
 petite maison

Tous les segments de cette figure sont de même longueur.

Une solution possible.


from turtle import *
 

lg = 100 # longueur d'un côté
forward(lg)  # segment horizontal du bas
left(90)
forward(lg) # segment vertical droit
left(30)
forward(lg) # segment toit, partie droite
left(120)
forward(lg) # segment toit, partie gauche
left(30)
forward(lg) # segment vertical gauche

hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte

Figure codée.

On fixe une longueur lg et un angle a.

On cherche à coder certaines figures avec seulement deux symboles :

  • le symbole F qui signifiera "avancer de la longueur lg",
  • le symbole + signifiant "tourner à gauche de a degrés".

Par exemple, si l'on prend a = 90, un carré de côté lg sera codé par : F+F+F+F.
On notera fig(100, 90, F+F+F+F) le carré de côté lg=100.

  1. Écrire une fonction python traceFig( lg, a, chaine) traçant la figure (à l'aide de la tortue bien entendu) fig(lg, a, chaine).
  2. Tracer la petite maison de l'exercice précédent à l'aide d'une instruction traceFig( lg, a, chaine).

Une solution possible.


from turtle import *
 

def traceFig(lg, a, chaine) :
    for c in chaine :
        if c == 'F' : forward(lg)
        elif c == '+' : left(a)
        
        
traceFig( 100, 30, 'F+++F+F++++F+F')
hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte 

Code d'un triangle et d'une étoile.

A l'aide de la fonction traceFig(lg, a, chaine) de l'exercice précédent, tracer les deux figures ci-dessous.

  1. Un triangle équilatéral :
    le triangle
  2. L'étoile suivante (tous les segments ont même longueur) :
    l'étoile

Une solution possible.

Pour le triangle :


from turtle import *
 

def traceFig(lg, a, chaine) :
    for c in chaine :
        if c == 'F' : forward(lg)
        elif c == '+' : left(a)
        
        
traceFig( 100, 120, 'F+F+F') # triangle équilatéral
 
hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte 

Pour l'étoile :


from turtle import *
 

def traceFig(lg, a, chaine) :
    for c in chaine :
        if c == 'F' : forward(lg)
        elif c == '+' : left(a)
        
        
mot = 'F+++++F++F+++++F'
traceFig( 100, 60, mot + '++' + mot + '++' + mot)



hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte 

Code d'un triangle et d'une étoile, bis.

lg et a étant fixés, le 'vocabulaire' permettant le codage des figures est pour le moment constitué des symboles F et +.

On décide d'ajouter le symbole - avec la signification suivante : "tourner vers la droite de a degrés".

Modifier la fonction traceFig(lg, a, chaine) pour ajouter ce symbole puis donner un nouveau code de l'étoile de l'exercice précédent en choisissant a=60, ce nouveau code fera intervenir les trois symboles.

Une solution possible.


from turtle import *
 

def traceFig(lg, a, chaine) :
    for c in chaine :
        if c == 'F' : forward(lg)
        elif c == '+' : left(a)
        elif c == '-' : right(a)
        
mot = 'F+F--F+F'       
traceFig( 100, 60, mot + '--' + mot + '--' + mot)
 


hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte 

Ou la suivante (obtenu en remplaçant la série de cinq + du code du corrigé de l'exercice précédent par un seul symbole -) :


from turtle import *
 

def traceFig(lg, a, chaine) :
    for c in chaine :
        if c == 'F' : forward(lg)
        elif c == '+' : left(a)
        elif c == '-' : right(a)
        
mot = 'F-F++F-F'
traceFig( 100, 60, mot + '++' + mot + '++' + mot)


hideturtle() # on cache la tortue
mainloop() # pour maintenir fenêtre ouverte 

Les exercices de cette page se poursuivent dans la fiche 2.