De Scratch à Python

Le document source 2017 semble encourager l'appui sur Scratch pour faciliter la transition et introduire les notions de boucles, d'instructions conditionnelles, etc ... en Python

Eduscol

Les élèves de seconde ont suivi au collège un enseignement d'algorithmique et de programmation, dans le cadre des mathématiques et de la technologie. En mathématiques, à l’aide de Scratch, ils ont utilisé des boucles, des instructions conditionnelles. En classe de seconde, le passage de Scratch à Python peut être immédiat ou progressif, suivant les choix pédagogiques de l’enseignant. Les deux langages comportent, au-delà des différences évidentes de forme, des similitudes qui facilitent la transition.

Activité 1

Question 1 :

En utilisant la bibliothèque Turtle, écrire un programme dessinant un segment vertical de longueur donnée.

Motif Voici un bloc et un programme pour tracer un segment vertical en Scratch

Une solution de la question 1 :

from turtle import *
def trait_vertical(longueur):
    speed(2)			# fixer la vitesse du tracé
    width(3)            # fixer la largeur du crayon
    pencolor('red')     # Choix de la couleur rouge du tracé
    left(90)
    forward(longueur)
    exitonclick()       # pour pouvoir fermer la fenêtre d'affichage lorsqu'on clique dessus

On saisit dans la console trait-vertical(70), par exemple après l'exécution, pour tracer un segment de longueur 70 pixels

Question 2 :

En utilisant la bibliothèque Turtle, écrire un programme dessinant le motif présenté ci-dessous.

Motif Voici un bloc et un programme pour tracer ce motif en Scratch

Une solution de la question 2 :

from turtle import *
def aller_sans_tracer(x, y):
    up()        # on lève le crayon pour ne pas tracer
    goto(x, y)  # le crayon se place au point de coordonnées(x ; y)
    down()      # on abaisse le crayon pour tracer

def trait(longueur) :
    pencolor('red') # on fixe la couleur du crayon en rouge
    setheading(90)  # on oriente le crayon à 90 degrés au sens trigonométrique
    forward(longueur)   # Le crayon avance de "longueur" pixels
    left(180)   # # on tourne le crayon à 180 degrés à gauche
    forward(longueur)

def motif2 (longueur = 100, epaisseur=3,vitesse=2) :
    width(epaisseur)
    speed(vitesse)
    for i in range(10):
        avance=-250
        aller_sans_tracer(avance+i*50, -150)
        trait(longueur)
    exitonclick()

Après exécution, on saisit dans la console motif() pour tracer le motif ci-dessus

Question 3 :

En utilisant la bibliothèque Turtle, écrire un programme dessinant le motif présenté ci-dessous.

Motif Voici un bloc et un programme pour tracer ce motif en Scratch

Une solution de la question 3 :

from turtle import *
def aller_sans_tracer(x, y):
    up()        # on lève le crayon pour ne pas tracer
    goto(x, y)  # le crayon se place au point de coordonnées(x ; y)
    down()      # on abaisse le crayon pour tracer

def trait(longueur) :
    pencolor('red') # on fixe la couleur du crayon en rouge
    setheading(90)  # on oriente le crayon à 90 degrés au sens trigonométrique
    forward(longueur)   # Le crayon avance de "longueur" pixels
    left(180)   # # on tourne le crayon à 180 degrés à gauche
    forward(longueur)
def f(a,x):
    return a*x

def motif3 (longueur = 50, epaisseur=3,vitesse=2) :
    width(epaisseur)
    speed(vitesse)
    for i in range(10):
        avance=-250
        aller_sans_tracer(avance+i*50, -150)
        trait(longueur)
        longueur=f(1.25,longueur)
    exitonclick()

Après exécution, on saisit dans la console motif() pour tracer le motif ci-dessus

Activité 2

Question 1

Tester ce script :

from turtle import *
def losange(longueur=70,angle=45,epaisseur=2, couleur='blue') :
    width(epaisseur)
    pencolor(couleur)
    setheading(0)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
    exitonclick()
losange()

Question 1

Ce script permet de tracer un losange en bleu d'angles 45° et 135° de côté 70 pixels.

losange

Question 2 :

En utilisant Turtle tracer le motif suivant :

plusieurs losange

Un script traçant le motif ci-dessus :

from turtle import *
def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()
def losange(longueur=70,angle=45,epaisseur=2, couleur='blue') :
    width(epaisseur)
    pencolor(couleur)
    setheading(0)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
def motif2_losange(longueur=70,depart=-300,epaisseur=2):
    for i in range(6):
        width(epaisseur)
        aller_sans_tracer(depart+i*100, 0)
        losange(longueur)
    exitonclick()

Question 3 :

En utilisant Turtle tracer le motif suivant :

plusieurs losange

Un script traçant le motif ci-dessus :

from turtle import *
def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()
def losange(longueur=70,angle=45,vitesse=2, couleur='blue') :
    speed(vitesse)
    pencolor(couleur)
    setheading(0)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
def motif3_losange(longueur=70,depart=-300,epaisseur=2):
    for i in range(6):
        width(epaisseur+epaisseur*i)
        aller_sans_tracer(depart+i*100, 0)
        losange(longueur)
    exitonclick()

Question 4 :

En utilisant Turtle tracer le motif suivant :

plusieurs losange

Un script traçant le motif ci-dessus :

from turtle import *

def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()

def losange(longueur=70,angle=45,vitesse=2, couleur='blue') :
    speed(vitesse)
    pencolor(couleur)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)
    forward(longueur)
    right(angle)
    forward(longueur)
    right(180-angle)

def motif4_losange(longueur=70,epaisseur=3):
    for i in range(8):
        width(epaisseur)
        losange(longueur)
        left(45)
    exitonclick()

Activité 3

Question 1

Ecrire une fonction, de paramètre longueur, qui dessine un carré de côté longueur :

Question 1

from turtle import *
def carre(longueur=70,vitesse=2, couleur='blue') :
    speed(vitesse)
    pencolor(couleur)
    for i in range(4) :
        forward(longueur)
        right(90)
    exitonclick()

Question 2 :

En utilisant Turtle, écrire une fonction qui trace le motif suivant :

plusieurs carrés

Un script traçant le motif ci-dessus :

from turtle import *

speed(2)			

def carre(longueur) :
    pencolor('red')
    #setheading(0)
    forward(longueur)
    for i in range(4) :
        right(90)
        forward(longueur)

def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()

longueur = 60

for i in range(5):
    avance=-300
    width(3)
    carre(longueur)
    right(72)
    aller_sans_tracer(0, 0)
exitonclick()

Ou bien en couleurs

from turtle import *

speed(2)			# Vitesse la plus rapide

def carre(longueur) :
    #setheading(0)
    forward(longueur)
    for i in range(4) :
        right(90)
        forward(longueur)

def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()

longueur = 60
liste=['red','green','yellow','blue','orange','turquoise','teal']
for i in range(5):
    avance=-300
    pencolor(liste[i])
    width(3)
    carre(longueur)
    right(72)
    aller_sans_tracer(0, 0)
exitonclick()

Question 3 :

En utilisant Turtle tracer le motif suivant :

plusieurs carrés

Un script traçant le motif ci-dessus :

from turtle import *

speed(2)			# Vitesse du dessin

def carre(longueur) :
    setheading(0)  # le crayon est pointé horizontalement vers la gauche
    forward(longueur)
    for i in range(4) :
        right(90)
        forward(longueur)

def aller_sans_tracer(x, y):
    up()
    goto(x, y)
    down()
pencolor('blue')
longueur = 60
width(1)

for i in range(20):
    aller_sans_tracer(i*5, i*5)
    carre(longueur)
exitonclick()