TP 1 : Variables et types

BIU IA - Python

23 Janvier 2025

Télécharger le fichier art.py et exemple.py et placez-les dans un même dossier. Ouvrez exemple.py.

La première ligne importe des nouvelles fonctionnalités (qui sont définies dans le fichier art.py) :

import art

Ensuite, vous avez un aperçu des fonctions que vous pouvez utiliser grâce à art :

En regardant le code, commentez sur les types des valeurs utilisées dans les fonctions.

Correction

On voit que les coordonnées sont des float, les couleurs et le texte à écrire des str. La fonction art.add_plop(n) ne peut accepter que des int (nombres entiers).

  1. Exécutez le code et observez.
  2. Changez la couleur des yeux.

On remarque qu’on doit changer le code à deux endroits pour changer la couleur des deux yeux. Une façon de rendre cela plus lisible est d’introduire une nouvelle variable :

  1. Créer une nouvelle variable col_yeux telle que les yeux se dessineront dans la couleur qui se trouve dans la variable col_yeux.
  2. Ajoutez un rectangle rouge pour faire le nez.
Correction
  1. On change la partie concernant les yeux (lignes 12-14) ainsi :
# les yeux
art.add_circle(150, 150, 10, "blue")
art.add_circle(250, 150, 10, "blue")
  1. Même partie du code :
# les yeux
col_yeux = "blue"
art.add_circle(150, 150, 10, col_yeux)
art.add_circle(250, 150, 10, col_yeux)

Attention à ne pas mettre de guillemets autour de col_yeux quand on appelle la fonction art.add_circle. On veut bien parler du contenu de la variable col_yeux. Avec les guillemets, on parle d’une chaîne de caractères qui contient le texte “col_yeux” et qui n’a aucun lien avec la variable.

  1. On va ajouter un rectangle de largeur 10, à peu près la taille des yeux. On voit que les yeux sont centrés en (150,150) et (250,150). Pour mettre un rectangle entre, il faut que le milieu du côté haut soit à (200,150), donc si on a un rectangle de largeur 10, on va mettre l’angle en haut à gauche à (195,150). On ajoute donc :
art.add_rect(195,150,10,20,"red")
  1. Dessinez le drapeau japonais : un rectangle noir de largeur 200 et de hauteur 100, avec un cercle de rayon 25 au milieu. Essayez de le mettre au milieu de la fenêtre, sachant que la fenêtre mesure 1000 par 1000.

  2. Introduire une variable auteur qui contient votre nom. Faites en sorte d’afficher le texte “Art work by Bob” en haut de la fenêtre où Bob est remplacé par votre nom. On pourra utiliser la concaténation: s1+s2 renvoie la chaîne de caractères s1 suivi de la chaîne de caractères s2. Par exemple "Hello "+"Bob" est la chaîne "Hello Bob". Si s est une variable contenant du texte, "Hello "+s concatène "Hello" avec le contenu de s.

  3. Introduire une variable h (initialisée à 100) et modifiez votre code pour que le drapeau s’affiche au centre de la fenêtre, avec une hauteur h, une largeur 2*h (* désigne la multiplication en Python) et un cercle de rayon h/4 (/ désigne la division en Python).

  4. Introduire deux variables x et y (toutes deux initialisées à 500) de façon à ce que votre drapeau soit centré en (x,y).

Correction
  1. Il faut bien calculer :).
import art

# rectangle : on superpose un rectangle noir et un blanc plus petit
art.add_rect(400,450,200,100,"black")
art.add_rect(405,455,190,90,"white")

# cercle rouge
art.add_circle(500,500,25,"red")

art.draw()
  1. Il suffit d’ajouter au code précédent :
name = "Florent"
art.add_txt(0,0,"Art Work by "+name, "black")
  1. On centre toujours le cercle en (500,500) mais avec un rayon de h/4. On calcule bien les coins des rectangles pour avoir :
import art

name = "Florent"
art.add_txt(0,0,"Art Work by "+name, "black")

h = 100

# rectangle : on superpose un rectangle noir et un blanc plus petit

art.add_rect(500-h,500-h/2,2*h,h,"black")
art.add_rect(500-h+5,500-h/2+5,2*h-10,h-10,"white")

# cercle rouge
art.add_circle(500,500,h/4,"red")

art.draw()
  1. On décale :
import art
name = "Florent"
art.add_txt(0,0,"Art Work by "+name, "black")

x=400
y=400
h = 200
# rectangle : on superpose un rectangle noir et un blanc plus petit

art.add_rect(x-h,y-h/2,2*h,h,"black")
art.add_rect(x-h+5,y-h/2+5,2*h-10,h-10,"white")

# cercle rouge
art.add_circle(x,y,h/4,"red")

art.draw()

Testez le code suivant :

import art

c=10
art.add_rect(c,c,c,c,"black")
c=2*c
art.add_rect(c,c,c,c,"black")
c=2*c
art.add_rect(c,c,c,c,"black")
c=2*c
art.add_rect(c,c,c,c,"black")
c=2*c
art.add_rect(c,c,c,c,"black")

art.draw()
  1. Décrivez précisément ce que ce code affiche.
  2. Adaptez ce code pour tracer des cercles au lieu des rectangles.
Correction
  1. On affiche 5 carrés. Le premier a un côté de taille 10 et son angle en haut à gauche est en (10,10). Pour chaque carré, le carré suivant à son coin gauche sur le coin en bas à droite du carré précédent et a un côté deux fois plus long que le précédent.

  2. On fait pareil : on double le rayon et on décale le centre de la valeur de ce rayon afin que les cercles soit tangents.

import art
r=10
c=10
art.add_circle(c,c,r,"black")
r=2*r
c=c+r
art.add_circle(c,c,r,"black")
r=2*r
c=c+r
art.add_circle(c,c,r,"black")
r=2*r
c=c+r
art.add_circle(c,c,r,"black")
r=2*r
c=c+r
art.add_circle(c,c,r,"black")
r=2*r
c=c+r
art.add_circle(c,c,r,"black")
art.draw()