Skip to content

Commit

Permalink
add draw chapter
Browse files Browse the repository at this point in the history
  • Loading branch information
rasql committed Mar 25, 2020
1 parent 930b074 commit 1a08270
Show file tree
Hide file tree
Showing 31 changed files with 480 additions and 11 deletions.
7 changes: 6 additions & 1 deletion README.md
@@ -1 +1,6 @@
# turtle-tutorial
# Programmer en Python

Ce cours enseigne la programmation en Python à l'aide de la célèbre tortue Logo.

Vous pouvez trouver le tutoriel online :
https://turtle-tutorial.readthedocs.io/
Binary file added docs/1_intro/arrowkeys.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/1_intro/arrows.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
74 changes: 68 additions & 6 deletions docs/1_intro/intro.rst
Expand Up @@ -90,6 +90,21 @@ Pour faire tourner la tortue 45 degrès à droite::

>>> turtle.right(45)

La console est un outil très pratique.
A n'importe quel moment tu peux facilment tester quelque chose.

Remonter dans l'historique
--------------------------

Toutes les commandes que tu as entrez dans la consoles pendant une session,
tu les peux facilment retrouver, modifier et réutiliser.

.. image:: arrows.png

Il suffit d'utiliser les flèches **haut** et **bas** pour te balader dans le historique.

Essaye, c'est très pratique.


Ecrire un programme
-------------------
Expand Down Expand Up @@ -131,14 +146,61 @@ Tu peux ajouter une porte en dessinant encore un rectangle.
:download:`house2.py <house2.py>`


Dessiner un cercle
Erreurs fréquentes
------------------

La fonction ``turtle.circle(40)`` permet de dessiner un cercle avec un rayon de 40 pixels.
Dans le programme ci-dessous la tortue dessine deux cercles.
Si tu fais une erreur avec le nom module, par exemple *turtel* au lieu de *turtle*,
tu obtient un erreur de type ``ModuleNotFoundError``::

>>> import turtel
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
ModuleNotFoundError: No module named 'turtel'

Si tu oublie de donner un argument à une fonction,
par exemple tu as oublié de mettre und distance pour la fonction *forward()*,
tu obtient une erreur de type ``TypeError``::

>>> turtle.forward()
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: forward() missing 1 required positional argument: 'distance'

Si tu fais une erreur dans le nom d'une fonction, par exemple *foreward* au lieu de *forward*,
tu obtient une erreur ``AttributeError``::

>>> turtle.foreward(100)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
AttributeError: module 'turtle' has no attribute 'foreward'

Raccourcie ton code
-------------------

Si tu veux raccourcir ton code,
tu peut importer toutes les commandes dans l'espace de ta session avec le symbole ``*``::

>>> from turtle import *

Ensuite tu dois créer un objet ``Screen()`` qui ouvre une fenêtre::

>>> Screen()
<turtle._Screen object at 0x1063f68d0>

Maintenant tu peux directement utiliser les fonctions, sans les précéder de ``turtle.``::

.. image:: circle.png
>>> forward(100)
>>> left(45)
>>> forward(100)

.. literalinclude:: circle.py
Si tu veux écrire tes commandes encore plus courtes,
tu peux utiliser les raccourcis à deux lettres:
``fd`` (forward), ``bk`` (back), ``lt`` (left) et ``rt`` (right)::

:download:`circle.py <circle.py>`
>>> fd(100)
>>> lt(45)
>>> fd(100)
>>> rt(90)
>>> fd(100)
>>> bk(200)
File renamed without changes
2 changes: 1 addition & 1 deletion docs/1_intro/circle.py → docs/2_draw/circle.py
@@ -1,4 +1,4 @@
# draw a house
# draw two circles
import turtle

turtle.forward(100)
Expand Down
121 changes: 121 additions & 0 deletions docs/2_draw/draw.rst
@@ -0,0 +1,121 @@
Dessiner
========

Nous avons déjà vu les 4 commandes de base pour déplacer la tortue:
*forward, backward, left* et *right*.

Mais tu peux contrôler tous les aspcets du dessin:

- épaisseur du trait
- couleur du trait
- couleur de remplissage

En plus tu peux:

- monter et descendre le stylo
- dessiner des cercles
- ajouter du text

Monter/descendre le stylo
-------------------------

La tortue peut monter et descendre son style.
Ceci lui permet de dessiner des lignes séparés.

.. image:: draw1.png

.. literalinclude:: draw1.py

:download:`draw1.py <draw1.py>`


Téléporter la tortue
--------------------

La tortue peux aller à n'importer quel position indiqué par des coordonnés (x, y).
La commande ``turtle.goto(0, 20)`` va téléporter la tortue à la position (x=0, y=20).

.. image:: draw2.png

.. literalinclude:: draw2.py

:download:`draw2.py <draw2.py>`


L'épaisseur de ligne
--------------------

Tu peux modifier l'épaisser du stylo avec la commande ``turtle.width(2)``.

.. image:: draw3.png

.. literalinclude:: draw3.py

:download:`draw3.py <draw3.py>`


La couleur de ligne
-------------------

Tu peux modifier la couldur du stylo avec la commande ``turtle.pencolor('blue')``.

Voici les couleurs que tu peux choisirs:

*yellow, gold, orange, red, maroon, violet, pink, magenta, purple, navy,
blue, sky blue, cyan, turquoise, lightgreen, green, darkgreen, chocolate,
brown, black, gray, white*

N'oublies pas de mettre le nom de couleur entre apostrophes.

.. image:: draw4.png

.. literalinclude:: draw4.py

:download:`draw4.py <draw4.py>`


Remplir une forme
-----------------

Il est possible de remplir une forme d'une couleur.

Avec la commande ``turtle.fillcolor('green')`` tu peux choisir une couleur de remplissage.

Ensuite il faut entourer la forme à remplir, par exemple le triangle, avec les deux commandes::

turtle.begin_fill()
turtle.end_fill()

.. image:: draw5.png

.. literalinclude:: draw5.py

:download:`draw5.py <draw5.py>`


Ajouter un texte
----------------

Il est possible d'écrire un texte à la position de la tortue.

La police par défaut est très petit. Il est préférable que tu augmente la taille.

.. image:: draw6.png

.. literalinclude:: draw6.py

:download:`draw6.py <draw6.py>`


Dessiner un cercle
------------------

La fonction ``turtle.circle(40)`` permet de dessiner un cercle avec un rayon de 40 pixels.
Dans le programme ci-dessous la tortue dessine deux cercles.

.. image:: circle.png

.. literalinclude:: circle.py

:download:`circle.py <circle.py>`

Binary file added docs/2_draw/draw1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions docs/2_draw/draw1.py
@@ -0,0 +1,10 @@
# pen up/down
import turtle

turtle.forward(100)
turtle.up()
turtle.forward(50)
turtle.down()
turtle.forward(50)

turtle.done()
Binary file added docs/2_draw/draw2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions docs/2_draw/draw2.py
@@ -0,0 +1,17 @@
# goto (x, y) position
import turtle

turtle.forward(200)

turtle.up()
turtle.goto(0, 20)
turtle.down()
turtle.forward(200)

turtle.up()
turtle.goto(0, 40)
turtle.down()
turtle.forward(200)


turtle.done()
Binary file added docs/2_draw/draw3.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions docs/2_draw/draw3.py
@@ -0,0 +1,18 @@
# change pen widht
import turtle

turtle.forward(200)

turtle.up()
turtle.goto(0, 20)
turtle.down()
turtle.width(2)
turtle.forward(200)

turtle.up()
turtle.goto(0, 40)
turtle.down()
turtle.width(5)
turtle.forward(200)

turtle.done()
Binary file added docs/2_draw/draw4.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions docs/2_draw/draw4.py
@@ -0,0 +1,16 @@
# change pen color
import turtle

turtle.width(5)
turtle.forward(200)
turtle.left(90)

turtle.pencolor('blue')
turtle.forward(100)
turtle.left(90)

turtle.pencolor('green')
turtle.forward(300)
turtle.left(90)

turtle.done()
Binary file added docs/2_draw/draw5.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions docs/2_draw/draw5.py
@@ -0,0 +1,16 @@
# fill a shape
import turtle

turtle.width(5)
turtle.fillcolor('green')

turtle.begin_fill()
turtle.forward(200)
turtle.left(120)
turtle.forward(200)
turtle.left(120)
turtle.forward(200)
turtle.left(120)
turtle.end_fill()

turtle.done()
Binary file added docs/2_draw/draw6.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions docs/2_draw/draw6.py
@@ -0,0 +1,13 @@
# add text
import turtle

turtle.left(90)
turtle.write('default text size')

turtle.forward(30)
turtle.write('Courier 24', font=('Courier', 24))

turtle.forward(30)
turtle.write('Arial 36', font=('Arial', 36))

turtle.done()
18 changes: 18 additions & 0 deletions docs/3_loop/loop.rst
Expand Up @@ -165,3 +165,21 @@ Il suffit d'appeler ces deux fonctions avant et après::
:download:`polygon4.py <polygon4.py>`


Dessiner un arc en ciel
-----------------------

Pour dessiner un arc en ciel nous definissons d'abord une liste avec les couleurs::

colors = ('red', 'orange', 'yellow', 'lightgreen', 'lightblue', 'violet')

Ceci nous permet de répéter une boucle pour chaque élément de cette liste::

for color in colors:
turtle.pencolor(color)

.. image:: rainbow.png

.. literalinclude:: rainbow.py

:download:`rainbow.py <rainbow.py>`

Binary file added docs/3_loop/rainbow.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions docs/3_loop/rainbow.py
@@ -0,0 +1,22 @@
# draw a rainbow
import turtle

d = 10
r = 60
colors = ('red', 'orange', 'yellow', 'lightgreen', 'lightblue', 'violet')

turtle.pensize(d)
turtle.left(90)

for color in colors:
turtle.pencolor(color)
turtle.circle(r, 180)
turtle.left(90)
turtle.up()
turtle.forward(2*r + d)
turtle.down()
turtle.left(90)
r += d

turtle.write('rain bow', font=(None, 36))
turtle.done()

0 comments on commit 1a08270

Please sign in to comment.