PYTHON 2 FEUILLE n° 24 sept sur TURTLE

                                                   PYTHON 2.7                 FEUILLE n° 24  sept   sur Turtle

                  Cours:

                         # clear() 

                                 a un défaut c'est d'effacer tout l'écran.

                                  Or, on peut vouloir garder une partie du tracé pour n'animer

                                  qu'un morceau du dessin.

                                 Une solution est de mettre en couleur de fond le morceau de dessin.

                                 Il disparaît donc à nos yeux.

                             # mainloop()

                                        Après le tracé du dessin, pour éviter le blocage de la fenêtre de turtle ,

                                       avec en haut le message << Turtle ne répond plus >>,

                                      il est intéressant de mettre à la fin du script de lancement, mainloop().

---------------------------------------------------------------------------------------------------------

   EXERCICE 0:

           Que donne le script suivant ?

from turtle import*
from random import*
def deplace(x,y):
       penup()
       goto(x,y)
       pendown()
def fabriquerayon():
       deplace(-125,-12)
       forward(33)
       backward(66)
       forward(33)
       right(90)
       forward(33)
       backward(66)
       forward(33)
    
       deplace(75,-12)
       forward(33)
       backward(66)
       forward(33)
       right(90)
       forward(33)
       backward(66)
       forward(33)

def rayon():
       speed(0)
       right(20)
       width(3)
       ht()
       L=["black","white"]       
       for i in range(30):
              right(i*20)
             if i%2==0:
                 color(L[0])
                 fabriquerayon()
                 color(L[1])
                 fabriquerayon()
       color("black")
       fabriquerayon()
def pneu():
       deplace(-160,-12)
       forward(300)
       deplace(-125,-52)
       circle(40)
       deplace(-125,-47)
       circle(35)
       deplace(75,-52)
       circle(40)
       deplace(75,-47)
       circle(35)
     
def rot():
       pneu()
       speed(10)
       rayon()
       mainloop()
    

----------------------------------------------------------------------------------------------------

   REPONSE:

                 Après avoir activé rot() on obtient:

 >>> 
>>> rot() 
>>> 

                                      puis:                                            

                        Chassisturtle 1

                                             Les rayons des roues semblent tourner.

--------------------------------------------------------------------------------------------------------

     EXERCICE 1:

      Donner un script , en Python2.7, qui donne l'impression de faire rouler une voiture

-----------------------------------------------------------------------------------------------------

    REPONSE:

                  On peut proposer :

                   En activant commande() on obtient :

from turtle import*
from random import*
def deplace(x,y):
       penup()
       goto(x,y)
       pendown()
def rect():                             # construction de la caisse  de la voiture

       deplace(-200,0)
       color("blue")
       fillcolor("green")
       begin_fill() 
       for i in range(2):
             forward(350),left(90),forward(100),left(90)
            end_fill()
def triangle():                      # avant de la voiture 
       width(1)
       deplace(150,0)
       left(30)
       color("blue")
       fillcolor("green")
       begin_fill()
       for j in range(2):
            forward(100),left(120),forward(100),left(120)
       end_fill()    
       left(210)
    
def cercle():               # fabrication des roues
       width(12)
       color("black")
       fillcolor("white")           # pour la roue gauche
       begin_fill()
       deplace(-125,-50)

       circle(40)
       end_fill()
       fillcolor("white")                      # pour la roue droite
       begin_fill()
       deplace(75,-50)                  
       circle(40)
       end_fill()
def sol():                      # fabrication du sol
      color("brown")
      width(10)
      deplace(-200,-55)
      forward(400)
def deco():                         
      width(2)
      color("yellow")
      deplace(-150,80)
      forward(250)
def toit():
      color("blue")
      deplace(-100,100)
      fillcolor("yellow")
      begin_fill()
      left(60),forward(50),right(60)
      forward(100),right(30),forward(85)
      end_fill()

def fabriquerayon():
      deplace(-125,-12)          # rayons ortogonaux de la roue gauche
      forward(33)
      backward(66)
      forward(33)
      right(90)
      forward(33)
      backward(66)
      forward(33)
    
      deplace(75,-12)                   # rayons ortogonaux de la roue droite
      forward(33)
      backward(66)
      forward(33)
      right(90)
      forward(33)
      backward(66)
      forward(33)

def rayon():                            # pour alterner en noir puis en blanc les rayons
       speed(0)
       left(20)
       width(3)
       ht()
       L=["black","white"]       
       for i in range(30):
             right(i*20)
             if i%2==0:
                 color(L[0])
                 fabriquerayon()
                 color(L[1])
                 fabriquerayon()
       color("black")                                # pour avoir les rayons à la fin
       fabriquerayon()   

def commande():
       speed(10)
       rect()
       cercle()
       sol()
       triangle()
       deco()
       toit()
       rayon()
       mainloop()               # empêche l'écran de Turle de se bloquer     
       ht()                            # masque la souris

    
    
 

>>> 
>>> commande()
>>> 

                             Puis on a, à l'écran :              

                                   Tututurtle 1

                                            Les rayons  tournent en créant l'illusion du déplacement.

------------------------------------------------------------------------------

         EXERCICE 2:

                         Que donne le script en Python 2.7, suivant ?

from turtle import*
from random import*
def deplace(x,y):
       penup()
       goto(x,y)
       pendown()
def rect(a,b,x,y):                                    # rectangle à partir du pointde coord (x,y)
       width(4)                         #   a est la largeur  b est la longueur du rectangle
       speed(0)
       deplace(x,y)    
       for i in range(2):
            forward(a),left(90),forward(b),left(90)
def cercle(r,x,y):                            #  cercle de rayon r de centree de coord ( x,y)
      width(4)
      speed()
      deplace(x,y-r)
      circle(r)
def hautjambe(x,y):      # rectangle de 10 par 30 à partir du point de coord (x,y)
      speed(0)
      deplace(x,y)
      rect(10,30,x,y)
def rotule(x,y):                          # cercle de rayon 5 de centre le point (x+5,y- 5)
      speed(0)
      cercle(5,x+5,y-5)
def basjambe(x,y):       # rectangle de 10 par 30 à partir du point (x,y-40)
      rect(10,30,x,y-40)
      forward(25)
      deplace(x,y)
def jambetendue(x):
      hautjambe(x,0)
      rotule(x,0)
      basjambe(x,0)
def jambepliee(x):
      left(20)
      hautjambe(x,0)
      rotule(x+3,1)
      right(40)
      basjambe(x-10,3)
      left(20)
def dessin():
      ht()
      color("black")
      jambetendue(0)
      jambepliee(45)
      mainloop()
     

------------------------------------------------------------------------------------------------------

   REPONSE:

             En activant dessin() , on obtient les deux jambes suivantes:

                                  Deux jambes

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     EXERCICE 3:

            Donner un script , en Python 2.7, qui permet de faire bouger les deuxjambes de l'exercice précédent.

------------------------------------------------------------------------------

      REPONSE:

                On peut proposer :

from turtle import*
from
random import*
def deplace(x,y):
      penup()
      goto(x,y)
      pendown()
def rect(a,b,x,y):                                 # rectangle à partir du point de coord (x,y)
      width(4)                                    # a est la largeur  b est la longueur
      speed(0)
      deplace(x,y)    
      for i in range(2):
            forward(a),left(90),forward(b),left(90)
def cercle(r,x,y):                               #  cercle de rayon r de centre de coord ( x,y)
      width(4)
      speed()
      deplace(x,y-r)
      circle(r)
def hautjambe(x,y):                  # rectangle de 10 par 30 à partir du point de coord (x,y)
      speed(0)
      deplace(x,y)
      rect(10,30,x,y)
def rotule(x,y):                             # cercle de rayon 5 de centre le point de coord  (x+5,y- 5)
      speed(0)
      cercle(5,x+5,y-5)
def basjambe(x,y):                   # rectangle de 10 par 30 à partir du point de coord (x,y-40)
      rect(10,30,x,y-40)
      forward(25)
      deplace(x,y)
def jambetendue(x):
      hautjambe(x,0)
      rotule(x,0)
      basjambe(x,0)
def jambepliee(x):
      left(20)
      hautjambe(x,0)
      rotule(x+3,1)
      right(40)
      basjambe(x-10,3)
      left(20)
def trait():
      deplace(-10,35)
      width(8)
      color("blue")
      forward(70)
      deplace(0,0)
      color("black")
      width(3)
def pas():
      speed(0)
      ht()    
      color("black")
      jambetendue(0)
      jambetendue(40)
      clear()
      for i in range(2):
           color("black")
           trait(),jambetendue(0),jambepliee(40)      
           color("white")                                                  # Efface en donnant la couleur du fond
           jambepliee(40)
           color("black")
           jambetendue(40)
           color("white")                                                 #  Efface en donnant la couleur du fond
           jambetendue(0)
           color("black")
           jambepliee(0)
           color("white")                                                      #  Efface en donnant la couleur du fond
           jambetendue(40),jambepliee(0)
           color("black")
           jambepliee(40),jambetendue(0)
           color("white")                                                    #  Efface en donnant la couleur du fond
           jambepliee(40),jambetendue(0)                  
                                       
      color("black")
      trait()
      jambetendue(0)
      jambetendue(40)        
      mainloop()

                           Quand on active  pas() il vient:

>>> 
>>> pas()
>>>

                       Puis on voit les deux jambes tantôt tendues tantôt pliées.

                          Piedsquidansentturtle

                  NB:    En permutant certaines lignes on peut modifier le rythme.

--------------------------------------------------------------------------------------------------------

             EXERCICE 4 

         Donner un script , en Python 2.7 , qui permet de dessiner le personnage ci-dessous 

        qui bouge ses jambes.

                           Marchepetitbonturtle

---------------------------------------------------------------------------------------------------------------------------------

        REPONSE:

                                 On peut proposer :

from turtle import*
from random import*
def deplace(x,y):
      penup()
      goto(x,y)
      pendown()
def rect(a,b,x,y):                   # rectangle à partir du point (x,y)
      width(4)                                   # a est la largeur  b est la longueur
      speed(0)
      deplace(x,y)    
      for i in range(2):
           forward(a),left(90),forward(b),left(90)
def cercle(r,x,y):                                   #  cercle de rayon r de centre ( x,y)
      width(4)
      speed()
      deplace(x,y-r)
      circle(r)
def hautjambe(x,y):                # rectangle de 10 par 30 à partir du point(x,y)
      speed(0)
      deplace(x,y)
      rect(10,30,x,y)
def rotule(x,y):                   # cercle de rayon 5 de centre le point (x+5,y- 5)
      speed(0)
      cercle(5,x+5,y-5)
def basjambe(x,y):                    # rectangle de 10 par 30 à partir du point (x,y-40)
      rect(10,30,x,y-40)
      forward(20)
      deplace(x,y)
def jambetendue(x):
      fillcolor("grey")
      begin_fill()
      hautjambe(x+7,10)
      end_fill()
      rotule(x+7,10)
      basjambe(x+7,10)
def jambepliee(x,y):
      left(60)
      hautjambe(x+27,y+20)
      rotule(x+34,28+y)
      right(60)
      basjambe(x+32,y+23)
      deplace(0,0)
def jamberecul(x,y):
      right(10)
      fillcolor("grey")
      begin_fill()
      hautjambe(x,y)
      end_fill()
      right(20)
    rotule(x-3,y-3)
    basjambe(x-18,y+2)
    left(30)
def jambelevee(x):
      left(20)
      hautjambe(x+15,9)
      rotule(x+18,8)
      basjambe(x+29,6)    
      right(20)
      ht()    
def trait():
      ht()
      width(2)
      color("green")
      fillcolor("red")
      begin_fill()
      rect(10,10,4,155)          # pour le chapeau
      end_fill()
      width(5)
      color("black")
      fillcolor("green")
      begin_fill()
      rect(30,80,-6,41)               # pour le buste
      end_fill()
      deplace(9,123)
      fillcolor("yellow")
      begin_fill()
      circle(15)                            # pour la tête
      end_fill()
      color("black")
      cercle(1,15,141)                       # pour un oeil
      rect(10,40,5,75)
      deplace(-30, -36)
      width(3)
      color("brown")
      forward(150)                              # pour le sol
      deplace(0,0)
      color("black")
      width(3)
    
def test():
      ht()
      reset()
      trait()
      color("black")
      jamberecul(0,13)                # une jambe gauche en arrière
      deplace(0,0)
      jambelevee(0)                   #  unejambe  droite   levée
      deplace(0,0)
      color("white")                 
      jambelevee(0)                      # effacement de la jambe  droite lévée
      deplace(0,0)
      color("black")
      jamberecul(0,13)                             
      deplace(0,0)
      jambepliee(0,0)
      color("white")
      deplace(0,0)
      jambepliee(0,0)
      color("black")   
      jamberecul(0,13) 
      jambetendue(2)
      color("white")
      jamberecul(0,13)
      color("black")
      jambetendue(-3)  
      width(5)
      color("black")
    
      trait()     
      mainloop()

                                En activant test() on obtient:


>>> 
>>>  test()
>>> 

                             Puis on a la figure ci-dessus ou les jambes bougent.

-------------------------------------------------------------------------------------------------------------

    EXERCICE 5:

    Donner un script , en Python 2.7, qui fait planer le personnage  fantôme au dessus

    de jambes qui bougent

-------------------------------------------------------------------------------------------------

.    REPONSE :

                On peut proposer :

from turtle import*
from random import*
def deplace(x,y):
      penup()
      goto(x,y)
      pendown()
def rect(a,b,x,y):                        # rectangle à partir du point (x,y)
      width(4)                                # a est la largeur  b est la longueur
      speed(0)
      deplace(x,y)    
      for i in range(2):
           forward(a),left(90),forward(b),left(90)
def cercle(r,x,y):                      #  cercle de rayon r de centre ( x,y)
      width(4)
      speed()
      deplace(x,y-r)
      circle(r)
def hautjambe(x,y):                  # Un rectangle de 10 par 30 à partir du point(x,y)
      speed(0)
      deplace(x,y)
      rect(10,30,x,y)
def rotule(x,y):                        # Un cercle de rayon 5 de centre le point (x+5,y- 5)
      speed(0)
      cercle(5,x+5,y-5)
def basjambe(x,y):                     # Un rectangle de 10 par 30 à partir du point (x,y-40)
      rect(10,30,x,y-40)
      forward(20)
      deplace(x,y)
def jambeverticale(x,y):                            # La jambe est  totalement verticale
      fillcolor("white")
      begin_fill()
      hautjambe(x+7,y+10)
      end_fill()
      rotule(x+7,y+10)
      basjambe(x+7,y+10)
def jambepeupliee(x,y):               # La jambe est légèrement en avant pliée
      left(20)
      hautjambe(x+12,y+10)
      rotule(x+16,9+y)
      right(40)
      basjambe(x+3,10+y)
      left(20)
def jambepliee(x,y):                       # La jambe est en avant pliée
      left(60)
      hautjambe(x+27,y+20)
      rotule(x+34,28+y)
      right(60)
      basjambe(x+32,y+23)
      deplace(0,0)
def jambepeurecul(x,y):                  # La jambe est un peu en arière
      ht()
      right(5)
      fillcolor("white")
      begin_fill()
      hautjambe(x,y)
      end_fill()
      right(5)
      rotule(x-1,y-3)
      basjambe(x-6,y-5)
      left(10) 
def jamberecul(x,y):              # La jambe est  raide en arrière
      right(10)
      fillcolor("white")
      begin_fill()
      hautjambe(x,y)
      end_fill()
      right(20)
      rotule(x-3,y-3)
      basjambe(x-18,y+2)
      left(30)
def jambelevee(x,y):                  # La jambe est raide levée
      left(20)
      hautjambe(x+15,y+9)
      rotule(x+18,y+8)
      basjambe(x+29,y+6)    
      right(20)
      ht()    
def sol():                                # Pour faire le sol
      ht() 
      deplace(-30, -36)
      width(3)
      color("brown")
      forward(150)
      deplace(0,0)
def fantome(x,y,couleurprincipale,couleur):     #construction du fantôme 
      ht()
      speed(0)
      width(3)
      deplace(x,y+70)
      color(couleurprincipale)
      speed(0)
      penup()
      forward(-15),left(90),forward(20),right(110)
      pendown()
      circle(40,45)
      penup()
      right(110),forward(20),left(85),forward(-25),left(90),forward(50)
      pendown()
      fillcolor(couleur)
      begin_fill()
      circle(6)
      end_fill()
      penup()
      right(90),forward(20),pendown()    
      fillcolor(couleur)
      begin_fill()
      circle(6)
      end_fill()    
      penup()
      forward(-15),right(90),forward(50),left(90)   
      pendown()     
def test():
      ht()
      reset()
      sol()
      fantome(0,0,"orange","green")
      color("red")
      deplace(50,100)
      write( " OH ! oh ! OH !")    
      fantome(0,0,"white","white")                    # pour faire disparaître le fantôme
      color("blue")
      jamberecul(-5,13)
      jambelevee(15,0)   
      fantome(50,90,"orange","green")   
      color("white")
      jambelevee(15,0)
      jamberecul(-5,13)
      sol()                                                    # Le sol est souvent à refaire
      color("black")
      jambepeurecul(-5,13)
      jambepeupliee(15,0)
      fantome(50,90,"white","white")  
      color("white")
      jambepeupliee(15,0)
      jambepeurecul(-5,13)
      sol()
      color("green")
      jambepliee(15,0)
      jambeverticale(-5,0)
      fantome(50,90,"white","white")
      fantome(150,0,"orange","green")
      color("white")
      jambepliee(15,0)
      jambeverticale(-5,0)
      sol()
      color("black")   
      jamberecul(-5,13)
      color("orange")
      jambeverticale(15,0)
      fantome(150,0,"white","white")
      color("white")
      jamberecul(-5,13)
      sol()
      color("orange")
      jambeverticale(-5,0)
      fantome(150,100,"orange","green")
      deplace( 150,90)
      write("Hé Bé ! " )     
      mainloop()

                             En activant test() il vient :

>>> 
>>> test()
>>> 

                                  Puis :

                              Jambesdufantometurtle

            Les jambes bougent sur place en changeant de couleurs et le fantôme se déplace.

-------------------------------------------------------------------------------------------------------------

EXERCICE 6:

    Donner un script en Python 2.7, fait se balader une jambe avec six positions.

------------------------------------------------------

     REPONSE:

from turtle import*
from random import*
def deplace(x,y):
      penup()
      goto(x,y)
      pendown()
def rect(a,b,x,y):                        # rectangle à partir du point (x,y)
      width(4)                                # a est la largeur  b est la longueur
      speed(0)
      deplace(x,y)    
      for i in range(2):
           forward(a),left(90),forward(b),left(90)
def cercle(r,x,y):                      #  cercle de rayon r de centre ( x,y)
      width(4)
      speed()
      deplace(x,y-r)
      circle(r)
def hautjambe(x,y):                  # Un rectangle de 10 par 30 à partir du point(x,y)
      speed(0)
      deplace(x,y)
      rect(10,30,x,y)
def rotule(x,y):                        # Un cercle de rayon 5 de centre le point (x+5,y- 5)
      speed(0)
      cercle(5,x+5,y-5)
def basjambe(x,y):                     # Un rectangle de 10 par 30 à partir du point (x,y-40)
      rect(10,30,x,y-40)
      forward(20)
      deplace(x,y)
def jambeverticale(x,y):                            # La jambe est  totalement verticale
      fillcolor("white")
      begin_fill()
      hautjambe(x+7,y+10)
      end_fill()
      rotule(x+7,y+10)
      basjambe(x+7,y+10)
def jambepeupliee(x,y):               # La jambe est légèrement en avant pliée
      left(20)
      hautjambe(x+12,y+10)
      rotule(x+16,9+y)
      right(40)
      basjambe(x+3,10+y)
      left(20)
def jambepliee(x,y):                       # La jambe est en avant pliée
      left(60)
      hautjambe(x+27,y+20)
      rotule(x+34,28+y)
      right(60)
      basjambe(x+32,y+23)
      deplace(0,0)
def jambepeurecul(x,y):                  # La jambe est un peu en arière
      ht()
      right(5)
      fillcolor("white")
      begin_fill()
      hautjambe(x,y)
      end_fill()
      right(5)
      rotule(x-1,y-3)
      basjambe(x-6,y-5)
      left(10) 
def jamberecul(x,y):              # La jambe est  raide en arrière
      right(10)
      fillcolor("white")
      begin_fill()
      hautjambe(x,y)
      end_fill()
      right(20)
      rotule(x-3,y-3)
      basjambe(x-18,y+2)
      left(30)
def jambelevee(x,y):                  # La jambe est raide levée
      left(20)
      hautjambe(x+15,y+9)
      rotule(x+18,y+8)
      basjambe(x+29,y+6)    
      right(20)
      ht()

def sol():
      ht() 
      deplace(-30, -36)
      width(3)
      color("brown")
      forward(250)
      deplace(0,0)

def geste():
      ht()
      reset()
      sol()   
      color("red")
      jamberecul(-5,13)
      color("white")
      jamberecul(-5,13)  
      color("blue")           
      jambepeurecul(20,13)
      color("white")
      jambepeurecul(20,13)   
      color("green")
      jambeverticale(40,-2)
      color("white")
      jambeverticale(40,-2)    
      color("black")
      jambepeupliee(70,0)
      color("white")
      jambepeupliee(70,0)

      color("violet")
      jambelevee(90,0) 
      color("white")
      jambelevee(90,0)
   
      color("orange")
      jambepliee(115,-5)
      color("white")
      jambepliee(115,-5)
    
      color("blue")
      jambeverticale(-5,-2)              
      sol()       
      mainloop()

                             En activant geste() on a :

>>> 
>>>  geste()
>>> 

                                        Puis on obtientà la fin :                              

                               Defileturtle                

                en ayant avant successivement les positions suivantes puis la jambe verticale bleue

              Jambesturtle

----------------------------------------------------------------------------------------------------------------------------------------------------------