<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 <img src="https
Step1:  Étude d'une boucle
Très souvent, on désire faire une action pour chaque élément d'une liste.  Par exemple, afficher les carrés des nombres de 1 à 10. Ceci peut être fait grâce  une boucle for 
Step2:  Cette boucle peut se lire "pour chaque élément x dans la liste l 
Step3:  On utilise ici le formatage de chaîne de caractère dans le print (avec un f devant la str), que nous avons vu au TP 2.
La syntaxe générale de la boucle forest 
Step4:  <div class="alert alert-block alert-info bilan">
* le bloc d'instruction est **répété** autant de fois que ...
* la variable de boucle ...
* si on oublie les deux points, à la fin de la ligne du `for`, le python ... 
* le bloc d'instruction doit être ...
</div>
Exercices d'application
<div class="alert alert-block alert-danger travail">
**Ex1.0 - Triple opposition** 
Pour les entiers pairs de 2 à 10 inclus, affichez à l'aide d'une boucle le triple du nombre puis son opposé. Pour les premiers entiers cela doit ressembler à 
Step5:  <div class="alert alert-block alert-danger travail">
**Ex1.2 attention au BUG
Step6:  <div class="alert alert-block alert-danger travail">
**Ex1.3 - Maximum for ever**  
Reprendre le calcul du maximum d'une liste, mais cette fois-ci à l'aide d'une boucle `for` et il doit marcher quelle que soit la liste d'entiers non vide !!</div>
Step7:  <div class="alert alert-block alert-danger travail">
**Ex1.4 - Donnez-nous un indice**   
Même chose avec l'indice du maximum d'une liste (prendre le premier indice possible)
Step8:  Enchaîner les boucles for
Les instructions sont effectuées à la suite, c'est aussi le cas pour les boucles for.
Il faut qu'une boucle soit terminée pour passer à la suite du code.  
<div class="alert alert-block alert-danger travail">
**Ex1.5 - for puis for**  
Essayez de prévoir ce qui va s'écrire avant d'exécuter le code.
Step9:  Boucles imbriquées
Si on met une boucle dans le bloc d'instruction d'une autre boucle, c'est ce qu'on appelle des boucles imbriquées.
Dans ce cas la boucle "extérieure" va répéter la boucle "intérieure" en commençant à chaque fois depuis son début.
Step10:  <div class="alert alert-block alert-danger travail">
**Ex1.6 - En son for intérieur**  
Essayez de prévoir la différence avec la boucle suivante avant de l'exécuter
Step11:  <div class="alert alert-block alert-danger travail">
**Ex1.7 - Le b-a ba**   
Utilisez des boucles imbriquées pour écrire  
aa  
ab  
ba  
bb  
ca  
cb  
## Dans le bloc ou pas dans le bloc ?
Le fait de mettre une instruction dans le bloc d'instruction du for ou de la mettre en dehors, ça change tout ! Comparez les deux codes suivants
Step12:  Dans la première version, il faut attendre 20 minutes en tout !...
Boucles à la suite, imbriquées, quelles instructions dedans et dehors de la boucle ? Suivez les instructions pour chaque code. 
<div class="alert alert-block alert-danger travail">
**Ex2.0 - Desserts à la suite**  
1. créez une liste de vos desserts préférés
2. affichez pour chacun de ces desserts une phrase qui dit que vous les adorez (avec une boucle !!)
3. puis pour chacun de ces desserts une phrase qui dit que vous en voulez encore.
</div>
Step13:  <div class="alert alert-block alert-danger travail">
**Ex2.1 - Desserts immédiats**  
Cette fois-ci, écrivez les deux phrases pour chaque dessert, avant de passer au dessert suivant.
</div>
<div class="alert alert-block alert-danger travail">
**Ex2.2 - Salutations imbriquées**  
Écrivez un code utilisant les listes l et m ci-dessous et qui affiche
Step14:  La fonction range
La fonction native range est un peu particulière mais très utile. Elle permet de renvoyer une sorte de liste des entiers de 0 à n-1, ce qui fait n entiers consécutifs en commençant à 0.
Step15:  Tout se passe comme si on avait écrit "à la main" 
Step16:  Toutefois il faut se méfier car range(10) n'est pas exactement une liste c'est un itérateur ; cela dépasse le cadre du TP pour l'instant, mais il faut savoir qu'il peut être converti en liste.
Step17:  Comme vous voyez le type de range(10) n'est pas list mais range. Ceci dit on a pas exactement besoin de savoir ce que c'est pour s'en servir. On peut le convertir en liste 
Step18:  <div class="alert alert-block alert-info bilan">
`range(n)` où n est un entier est "une sorte" de liste des entiers qui vont de ...
On peut 
<ASSISTANT_TASK:>
Python Code:
# Exécutez cette cellule !
from IPython.core.display import HTML
styles = "<style>\n.travail {\n    background-size: 30px;\n    background-image: url('https://cdn.pixabay.com/photo/2018/01/04/16/53/building-3061124_960_720.png');\n    background-position: left top;\n    background-repeat: no-repeat;\n    padding-left: 40px;\n}\n\n.bilan {\n    background-size: 30px;\n    background-image: url('https://cdn.pixabay.com/photo/2016/10/18/19/40/anatomy-1751201_960_720.png');\n    background-position: left top;\n    background-repeat: no-repeat;\n    padding-left: 40px;\n}\n</style>"
HTML(styles)
Explanation: <img src="https://live.staticflickr.com/7726/17042914871_af2828b43c_c_d.jpg" align=center width="400">  
SAÉ 03 - TP4 - La boucle for
Bienvenue sur le Jupyter pour préparer la SAÉ Traitement numérique du signal du département RT de Vélizy. Les notebooks sont une adaptation de ceux proposés par le département info et de leur profs d'info géniaux.
Ce TP est consacré au boucle for en python, qu'on applique sur les list ou pour répéter des instructions lorsqu'on connait à l'avance le nombre de répétitions nécessaires.
End of explanation
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for x in l:
    print(x**2)
Explanation: Étude d'une boucle
Très souvent, on désire faire une action pour chaque élément d'une liste.  Par exemple, afficher les carrés des nombres de 1 à 10. Ceci peut être fait grâce  une boucle for :
End of explanation
animaux = ["chat", "chien", "pingouin", "lézard"]
for animal in animaux:
    print(f"le {animal} donne la papate")
Explanation: Cette boucle peut se lire "pour chaque élément x dans la liste l : il faut afficher x au carré".  
Autre exemple :
End of explanation
for nom_variable in nom_liste:
    bloc_d_instructions
Explanation: On utilise ici le formatage de chaîne de caractère dans le print (avec un f devant la str), que nous avons vu au TP 2.
La syntaxe générale de la boucle forest :
End of explanation
somme = 0
for x in ...
print(somme)  # en principe ça fait 55 !
Explanation: <div class="alert alert-block alert-info bilan">
* le bloc d'instruction est **répété** autant de fois que ...
* la variable de boucle ...
* si on oublie les deux points, à la fin de la ligne du `for`, le python ... 
* le bloc d'instruction doit être ...
</div>
Exercices d'application
<div class="alert alert-block alert-danger travail">
**Ex1.0 - Triple opposition** 
Pour les entiers pairs de 2 à 10 inclus, affichez à l'aide d'une boucle le triple du nombre puis son opposé. Pour les premiers entiers cela doit ressembler à :
6 -2
12 -4
etc
</div>
<div class="alert alert-block alert-danger travail">
**Ex1.1 - Sommer sans se fatiguer**  
Complétez le code ci-dessous dont le but est de calculer la somme des entiers de 1 à 10  
S = 1 + 2 + 3 + .. + 10
</div>
End of explanation
l = [0]
for x in l:
    l.append(x+1)
    print(l)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1.2 attention au BUG:**  
**SAUVEGARDEZ** avant d'exécuter le code suivant car il va jamais s'arrêter... ça va bugger ! Vous risquez de perdre votre travail. Pour éviter de perdre votre travail, vous pouvez cliquer dans le menu sur "Noyau" > "Interrompre" pour arrêter une code qui ne se termine pas.
Essayez de comprendre pourquoi il ne s'arrête jamais.. et pourquoi il faut **éviter** faire ce genre de choses.</div>
End of explanation
l = [3, 5, 2, 8, 6]
maxi = l[0]  # initialisation du maximum avec la première valeur de la liste
# À completer
print("le maximum vaut", maxi)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1.3 - Maximum for ever**  
Reprendre le calcul du maximum d'une liste, mais cette fois-ci à l'aide d'une boucle `for` et il doit marcher quelle que soit la liste d'entiers non vide !!</div>
End of explanation
l = [3, 5, 2, 8, 6, 4, 8, 3, 4]
imaxi = 0  # initialisation du maximum avec le premier indice de la liste
# À completer
print("l'indice du maximum vaut", imaxi)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1.4 - Donnez-nous un indice**   
Même chose avec l'indice du maximum d'une liste (prendre le premier indice possible)
End of explanation
for x in ['a', 'b', 'c']:
    print("boucle 1")
    print(x)
print("entre les deux boucles")
for y in ['x', 'y', 'z']:
    print("boucle 2")
    print(y)
Explanation: Enchaîner les boucles for
Les instructions sont effectuées à la suite, c'est aussi le cas pour les boucles for.
Il faut qu'une boucle soit terminée pour passer à la suite du code.  
<div class="alert alert-block alert-danger travail">
**Ex1.5 - for puis for**  
Essayez de prévoir ce qui va s'écrire avant d'exécuter le code.
End of explanation
for animal in ['koala', 'paresseux', 'maki', 'ouistiti']:
    for adjectif in ['mignon', 'malin', 'malicieux']:
        print(animal + " " + adjectif)
Explanation: Boucles imbriquées
Si on met une boucle dans le bloc d'instruction d'une autre boucle, c'est ce qu'on appelle des boucles imbriquées.
Dans ce cas la boucle "extérieure" va répéter la boucle "intérieure" en commençant à chaque fois depuis son début.
End of explanation
for adjectif in ['mignon', 'malin', 'malicieux']:
    for animal in ['koala', 'paresseux', 'maki', 'ouistiti']:
        print(animal + " " + adjectif)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1.6 - En son for intérieur**  
Essayez de prévoir la différence avec la boucle suivante avant de l'exécuter:</div>
End of explanation
for animal in ['koala', 'paresseux', 'maki', 'ouistiti']:
    print("le " + animal +" fait la sieste")
    print("attendez cinq minutes !")
for animal in ['koala', 'paresseux', 'maki', 'ouistiti']:
    print("le " + animal +" fait la sieste")
print("attendez cinq minutes !")
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1.7 - Le b-a ba**   
Utilisez des boucles imbriquées pour écrire  
aa  
ab  
ba  
bb  
ca  
cb  
## Dans le bloc ou pas dans le bloc ?
Le fait de mettre une instruction dans le bloc d'instruction du for ou de la mettre en dehors, ça change tout ! Comparez les deux codes suivants:
End of explanation
desserts = ["sorbet fraise", "oréo", "pomme"]  # à compléter
Explanation: Dans la première version, il faut attendre 20 minutes en tout !...
Boucles à la suite, imbriquées, quelles instructions dedans et dehors de la boucle ? Suivez les instructions pour chaque code. 
<div class="alert alert-block alert-danger travail">
**Ex2.0 - Desserts à la suite**  
1. créez une liste de vos desserts préférés
2. affichez pour chacun de ces desserts une phrase qui dit que vous les adorez (avec une boucle !!)
3. puis pour chacun de ces desserts une phrase qui dit que vous en voulez encore.
</div>
End of explanation
l = ["a", "b", "c"]
m = [1, 2, 3]
Explanation: <div class="alert alert-block alert-danger travail">
**Ex2.1 - Desserts immédiats**  
Cette fois-ci, écrivez les deux phrases pour chaque dessert, avant de passer au dessert suivant.
</div>
<div class="alert alert-block alert-danger travail">
**Ex2.2 - Salutations imbriquées**  
Écrivez un code utilisant les listes l et m ci-dessous et qui affiche:
`coucou a1 ciao`
`coucou a2 ciao`
`coucou a3 ciao`
`coucou b1 ciao`
`coucou b2 ciao`
...
`coucou c3 ciao`
</div>
End of explanation
for i in range(10):
    print(i)
Explanation: La fonction range
La fonction native range est un peu particulière mais très utile. Elle permet de renvoyer une sorte de liste des entiers de 0 à n-1, ce qui fait n entiers consécutifs en commençant à 0.
End of explanation
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
    print(i)
Explanation: Tout se passe comme si on avait écrit "à la main" :
End of explanation
print(range(10))
print(type(range(10)))
Explanation: Toutefois il faut se méfier car range(10) n'est pas exactement une liste c'est un itérateur ; cela dépasse le cadre du TP pour l'instant, mais il faut savoir qu'il peut être converti en liste.
End of explanation
l = list(range(10))
print(l)
print(type(l))
Explanation: Comme vous voyez le type de range(10) n'est pas list mais range. Ceci dit on a pas exactement besoin de savoir ce que c'est pour s'en servir. On peut le convertir en liste :
End of explanation
list(range(12))
list(range(2, 12))
list(range(12, 2))
list(range(2, 12, 1))
list(range(2, 12, 2))
list(range(1, 12, 5))
list(range(2, 12, 5))
list(range(1, 12, -1))
list(range(10, 2, -1))
Explanation: <div class="alert alert-block alert-info bilan">
`range(n)` où n est un entier est "une sorte" de liste des entiers qui vont de ...
On peut :
* l'utiliser dans une boucle pour compter de ...
* le convertir en ...
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.0 - Range un peu !**   
Créez une liste des entiers de 0 à 12 (12 exclu)
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.1 - Range encore !**   
créez une liste des entiers de 0 à 20 (20 inclus)
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.2 - Salut tout le monde !**   
Affichez, à l'aide d'une boucle for, les phrases "hello0", "hello1", ... pour les entiers de 0 à 5 (exclus)
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.3 - Des paramètres à géométrie variable**   
On peut appeler `range` avec 1 ou 2  ou 3 paramètres. Essayez vous-même de comprendre à quoi ils servent :
End of explanation
<END_TASK>