====== Faire répéter des actions à la machine ====== \\ Nous allons maintenant voir un outil supplémentaire qui va nous permettre de créer nos dessins encore plus **facilement** et **rapidement.** Pour l'instant si nous voulons faire dessiner 9 cercles à l'ordinateur, nous devons faire 9 appels à la fonction ''ellipse'' comme ceci :\\ \\ {{url>https://trinket.io/embed/python/be47797258 100%,420px noscroll noborder}}\\ Cela fonctionne très bien mais imaginez que nous voulions 100 ou 1000 cercles, cela deviendrait vite laborieux. Pour répondre à ce problème il existe un outil permettant de faire répéter des actions à l'ordinateur sans nous fatiguer : **les répétitions**. Il existe 2 types de boucles mais pour ce stage nous ne verrons que la boucle **for**.\\ Tout d'abord observez le code ci-dessus et principalement les colonnes de nombres des instructions ''ellipse''.\\ Ne remarquez-vous rien de particulier ?\\ \\ | {{:wiki:infofem:lda:cours2021:codeannote.png?nolink500%}} | En effet les **nombres rouges** sont identiques. Cela s'explique par le fait que :\\ -> le deuxième nombre correspond à la coordonnée **y** du centre des cercles. Puisque les cercles sont en ligne, cette information est la même pour les 9 cercles → y = **100** \\ -> les troisième et quatrième nombres correspondent aux diamètres verticaux et horizontaux du cercle. Les nôtres étant tous identiques, ces informations sont communes aux 9 cercles → **30** et **30**. \\ La seule donnée qui change à chaque **itération** est l'information de la valeur de coordonnée x du centre des cercles (**les nombres bleus**). \\ Examinons de plus près les valeurs prises pour cette coordonnée : ''40, 70, 100, 130, 160, 190, 220, 250''. Nous avons donc une suite d'instructions qui sont **presque** identiques : ''ellipse(x,100,30,30)'' avec **x** qui prend les valeurs successives dans ''[40, 70, 100, 130, 160, 190, 220, 250]''. \\ \\ On va donc utiliser une boucle **for** pour faciliter l'écriture de ce traitement qui se répète plusieurs fois presque à l'identique. | \\ Par exemple, pour exprimer le fait que x prend les valeurs successives de ''40, 70, 100, 130, 160, 190, 220, 250'', on écrit : for x in [40, 70, 100, 130, 160, 190, 220, 250]: ellipse(x, 100, 30, 30) \\ En effet, ici l'instruction ''ellipse(x,100,30,30)'' va s'exécuter 9 fois, et à chaque **itération** x va prendre une valeur différente (//40 puis 70 puis 100 … //). On peut aller encore plus loin en remarquant que les valeurs successives de x augmentent de 30 en 30. x évolue donc de 30 en 30 (on dit aussi par **pas** de 30), en commençant à 40 et en s'arrêtant à 250. On peut donc écrire : # x commence à 40, s'arrête avant 251, et effectue des pas de 30 for x in range(40,251,30): ellipse(x, 100, 30, 30) Ici on utilise la fonction ''range(début, fin, pas)'' : x prend d'abord la valeur de **début** (ici 40). Puis au deuxième tour de boucle on ajoute à x le **pas** (ici 30), x prend donc,ici, la valeur 70. La machine procède ainsi à chaque tour de boucle tant que x n'atteint pas ou ne dépasse pas la valeur de **fin**. La dernière valeur de x sera 250 car au prochain tour x vaudra 280, qui est au dessus de 250 donc la boucle s'arrête. {{url>https://trinket.io/embed/python/9f6b952855 100%,420px noscroll noborder}} \\ \\ | **__[[:wiki:infofem:lda:cours2021:home|Retour liste des cours]]__** | **__[[:wiki:infofem:lda:cours2021:lda2021-exercice-montagne|Exercice 1 : Des montagnes]]__** |