<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:  Dans les séquences de travail, vous rencontrerez certains logos 
Step2:  On peut aussi mêler texte et variables, de la façon suivante 
Step3:  On peut aussi specifier le caractère de fin de ligne. Ce sera utile pour écrire sur la même ligne avec plusieurs print différents 
Step4:  <div class="alert alert-block alert-danger travail">
**Ex1 - Restez zen**  
Initialisez 3 variables `x`, `y` et `z` avec des valeurs quelconques et affichez quelque chose comme `coordonnées du point A(12, 17, -5)` en utilisant les valeurs des trois variables comme coordonnées.</div>
Après cet exercice, vous devez avoir compris que cette notation qui mélange texte et variables est extrêmement pénible et met parfois des espaces là où on n'en voudrait pas.
Il nous faut un autre moyen de réaliser ce genre d'affichages...  
Formatage des chaînes de caractères
Pour se simplifier la vie lors de l'affichage, on va utiliser le formatage des chaînes de caractères, qui permet de mêler facilement texte et variables, et de modifier le format des variables. 
<div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step5:  Le préfixe f en amont d'une chaîne indique qu'on va formater la chaîne.
On peut ajouter des instructions de formatage dans les accolades et à côté de l'identifiant de la variable utilisée 
Step6:  <div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step7:  <div class="alert alert-block alert-danger travail">
**Ex2.1 - Mon très beau tableau**  
Améliorez encore le formatage afin d'aligner les noms à droite (à vous de chercher dans la doc comment procéder) 
Step8:  <div class="alert alert-block alert-info bilan">
**TRES IMPORTANT** 
Step9:  <div class="alert alert-block alert-danger travail">
**Ex2.3 - Quel est son type?**  
Pouvez-vous afficher le type de la variable `a`, et vérifier ce qu'il advient quand on saisit des données entières, décimales, texte... ?</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step10:  <div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step11:  Structures conditionnelles
Jusqu'ici, nous avons écrit des petits programmes qui se déroulent systématiquement de la même manière. L'introduction d'un mécanisme conditionnel est indispensable en programmation, afin de pouvoir faire bifurquer son programme en fonction des situations rencontrées.
En python, la structure conditionnelle utilise les mots-clés if, elif et else.
Condition unique
On peut utiliser if seul afin de n'exécuter un morceau de programme que si la condition exigée est respectée.
Step12:  <div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step13:  <div class="alert alert-block alert-danger travail">
**Ex3.0** Ecrivez un programme qui demande deux entiers `a` et `b`, et affiche `youpi` si la somme des deux variables est positive.  
**Ex3.1** Modifiez votre programme afin qu'il affiche `youpi` si `a` est pair et si `b` vaut 5 ou 12.</div>
Conditions multiples et alternatives
Lorsqu'on souhaite tester plusieurs alternatives dans une structure conditionnelle, on utilise elif qui est un raccourci de else if et qui signifie sinon si. Ce sinon signifie bien que la condition concernée ne sera testée que si la précédente s'est avérée fausse.
On peut utiliser autant de elif qu'on le souhaite.
Step14:  Dans une structure conditionnelle, on peut aussi prévoir un cas si toutes les conditions précédentes ont échouées
Step15:  <div class="alert alert-block alert-info bilan">
**IMPORTANT** 
<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://cdn.pixabay.com/photo/2020/06/12/20/33/decision-5291766_960_720.jpg" align=center width="400">  
SAÉ 03 - TP1 - Entrées/sorties, structures conditionnelles, boucles
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.
Dans ce TP, nous allons aborder:
 * les entrées-sorties en python: jouer avec le chaînes de caractères et découvrir input
 * les structures conditionnelles: if, else, elif 
 * un certain type de boucles: while
End of explanation
print("du texte")
a, b = "variables", "des"  # saviez-vous qu'on peut affecter simultanément plusieurs variables ?
print(b, a)
Explanation: Dans les séquences de travail, vous rencontrerez certains logos :
<div class="travail alert alert-block alert-danger"> indique un exercice à réaliser  </div>
<div class="bilan alert alert-block alert-info"> indique un point important qui nécessite une réponse de votre part et sera ensuite demandé lors du bilan de la séquence</div>
Entrées/sorties
On appelle entrées/sorties l'ensemble des flux qui transitent vers l'écran (sorties) ou depuis le clavier (entrées). Ces entrées/sorties (input/output ou io en anglais) vous permettent de communiquer avec votre machine.  
Dans la séquence précédente, nous avons manipulé print sans en expliquer le fonctionnement en détail.
print, la base
Dans sa version de base, print permet d'afficher du texte, des valeurs de variables.
End of explanation
h = 12
m = 8
print("il est exactement", h, "heures et", m, "minutes")
Explanation: On peut aussi mêler texte et variables, de la façon suivante :
End of explanation
print("Cette ligne ", end="")
print("est écrite dans ", end="")
print("plusieurs prints")
Explanation: On peut aussi specifier le caractère de fin de ligne. Ce sera utile pour écrire sur la même ligne avec plusieurs print différents :
End of explanation
b = 2
s = f"il a mangé {b} beignets"
print(s)
easy = "simple"
read = "lire"
write = "écrire"
print(f"{easy} à {read}, {easy} à {write}")
Explanation: <div class="alert alert-block alert-danger travail">
**Ex1 - Restez zen**  
Initialisez 3 variables `x`, `y` et `z` avec des valeurs quelconques et affichez quelque chose comme `coordonnées du point A(12, 17, -5)` en utilisant les valeurs des trois variables comme coordonnées.</div>
Après cet exercice, vous devez avoir compris que cette notation qui mélange texte et variables est extrêmement pénible et met parfois des espaces là où on n'en voudrait pas.
Il nous faut un autre moyen de réaliser ce genre d'affichages...  
Formatage des chaînes de caractères
Pour se simplifier la vie lors de l'affichage, on va utiliser le formatage des chaînes de caractères, qui permet de mêler facilement texte et variables, et de modifier le format des variables. 
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : Le **format**, c'est la façon de représenter une valeur.  
    Par exemple, l'entier `12` peut être affiché sous forme de flottant `12.0` ou d'hexadécimal `0xC`.</div>
Voici la façon de procéder pour mêler texte et variables :
End of explanation
pr = 12
print(f"Ce truc coûte {pr}€ mais on va plutôt afficher {pr:.2f}€.")
print(f"On peut aussi faire des calculs, comme {345 + 54 * 7}")
Explanation: Le préfixe f en amont d'une chaîne indique qu'on va formater la chaîne.
On peut ajouter des instructions de formatage dans les accolades et à côté de l'identifiant de la variable utilisée :
End of explanation
nom1, score1 = "jack", 5
nom2, score2 = "jo", 17
nom3, score3 = "averell", 0
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT** : on peut **formater** (modifier le format) d'une chaîne de caractères en utilisant `f` en amont de la chaîne, associé à des `{}`.  
Dans ces accolades, on précise la variable dont on souhaite afficher la valeur, et éventuellement le format qu'on souhaite lui appliquer.  
Exemples: pour une variable `a`
 * `{a:f}` la convertit en **flottant**
 * `{a:s}` la convertit en **string**
 * `{a:x}` convertit en **hexadécimal**
 * `{a:3f}` indique, pour une variable numérique, qu'on souhaite afficher sa valeur sur au moins 3 caractères
 * `{a:.2f}` indique, pour une variable décimale, qu'on souhaite une précision de 2 chiffres après la virgule
Pour davantage de détails voir [le mini-langage de spécification de format](https://docs.python.org/fr/3/library/string.html#format-specification-mini-language).</div>
<div class="alert alert-block alert-danger travail">
**Ex2.0 - Mon beau tableau**  
Dans le code suivant, réalisez un bel affichage de chaque nom et score sous forme de tableau, comme suit :
```.
jack         5
jo        17
averell   0```</div>
End of explanation
a = "doubi"
b = "douwaaaa \n"
Explanation: <div class="alert alert-block alert-danger travail">
**Ex2.1 - Mon très beau tableau**  
Améliorez encore le formatage afin d'aligner les noms à droite (à vous de chercher dans la doc comment procéder) :```  .    
    jack      5
      jo     17
 averell      0```</div>
<div class="alert alert-block alert-danger travail">
**Ex2.2 - Dou-bi-dou-bi-dou-waaa**  
Êtes-vous capable d'afficher 5 lignes contenant chacune :
 * la valeur de la variable `a` affichée 10 fois de suite
 * suivie de la valeur de la variable `b` ?  
**ATTENTION** : vous n'avez le droit d'écrire que __deux instructions__ au plus !</div>
End of explanation
a = input("tape un truc: ")
print(f"tu as tapé '{a}' !")
Explanation: <div class="alert alert-block alert-info bilan">
**TRES IMPORTANT** : ce procédé de formatage des *strings* se nomme *f-strings*. Il a été introduit à partir de python 3.7. Si vous disposez d'une version antérieure, vous devez utiliser le procédé qui prévalait alors et qui différe sensiblement, voir [ici](https://docs.python.org/fr/3.5/tutorial/inputoutput.html#).</div>
input
Lors de vos interactions avec votre programme, vous pouvez avoir besoin de demander à l'utilisateur de saisir une donnée ou une réponse. La fonction qui permet cela s'appelle input et s'utilise ainsi :
End of explanation
n = int(input("Un nombre ?"))
print(f"votre nombre est {n} et le suivant est {n+1}") # si n est converti en entier, l'addition doit fonctionner
Explanation: <div class="alert alert-block alert-danger travail">
**Ex2.3 - Quel est son type?**  
Pouvez-vous afficher le type de la variable `a`, et vérifier ce qu'il advient quand on saisit des données entières, décimales, texte... ?</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : Depuis la version 3 de python, `input` renvoie toujours la valeur qui a été saisie en la convertissant sous forme de ...
</div>
Par conséquent, lorsqu'on souhaite récupérer une valeur numérique, il est nécessaire de la convertir. Dans le TP précédent, nous avons vu le mécanisme de conversion implicite, lorsque qu'on additionne deux valeurs ayant des types différents, par exemple. Nous avons également vu quelque cas de conversion explicite avec les changements de base.
Voici comment procéder pour déclencher une conversion explicite, déclenchée délibérément :
End of explanation
a = int(input(""))
b = int(input(""))
c = int(input(""))
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT** : Pour déclencher une **conversion explicite**, il suffit d'appeler le **constructeur** de la classe concernée: `int`, `float`, `str`...  
Exemple : pour convertir l'entier 12 en flottant, on écrit ...
</div>
<div class="alert alert-block alert-danger travail">
**Ex2.4 - Moyenne**  
Ecrivez un programme qui demande trois nombres et affiche leur moyenne.  
La saisie de `1`, `1` et `2` produit bien `1.33333` ?</div>
End of explanation
n = int(input("Tapez un positif:"))
if n < 0:
    print("C'est malin...")  # cette instruction est dans le if
    print("J'avais dit un positif!")  # celle-ci également
print(f"Votre nombre est {n}.")  # mais pas celle-ci
Explanation: Structures conditionnelles
Jusqu'ici, nous avons écrit des petits programmes qui se déroulent systématiquement de la même manière. L'introduction d'un mécanisme conditionnel est indispensable en programmation, afin de pouvoir faire bifurquer son programme en fonction des situations rencontrées.
En python, la structure conditionnelle utilise les mots-clés if, elif et else.
Condition unique
On peut utiliser if seul afin de n'exécuter un morceau de programme que si la condition exigée est respectée.
End of explanation
n = int(input("Tapez un chiffre, cette fois:"))
if not(0 <= n <= 9):  # si n n'est pas un chiffre
    print("C'est malin...")
    print("J'avais dit un chiffre !")
print(f"Vous avez tapé {n}.")
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT** : L'instruction `if` permet d'exprimer une condition.  
Elle doit être suivie d'une expression et de `:`.  
Les instructions qui seront exécutées si la condition est vraie doivent **absolument** être **indentées**.</div>
On peut utiliser les expressions et les opérateurs logiques vus dans la séquence précédente:
End of explanation
rep = input("On fait une petite pause? (o/n)")
if rep == "o":
    print("Ca me semble raisonnable.")
elif rep == "n":  # ne sera exécuté que si la condition précédente était fausse
    print("J'en vois qui tournent de l'oeil.")
print("Allez, pause !")
Explanation: <div class="alert alert-block alert-danger travail">
**Ex3.0** Ecrivez un programme qui demande deux entiers `a` et `b`, et affiche `youpi` si la somme des deux variables est positive.  
**Ex3.1** Modifiez votre programme afin qu'il affiche `youpi` si `a` est pair et si `b` vaut 5 ou 12.</div>
Conditions multiples et alternatives
Lorsqu'on souhaite tester plusieurs alternatives dans une structure conditionnelle, on utilise elif qui est un raccourci de else if et qui signifie sinon si. Ce sinon signifie bien que la condition concernée ne sera testée que si la précédente s'est avérée fausse.
On peut utiliser autant de elif qu'on le souhaite.
End of explanation
rep = input("On fait une petite pause? (o/n)")
if rep == "o":
    print("Ca me semble raisonnable.")
elif rep == "n": 
    print("J'en vois qui tournent de l'oeil.")
else:  # sera exécuté si toutes les conditions précédentes sont fausses
    print("Réponse inintelligible, la fatigue certainement.")
print("Allez, pause. Un café sans sucre pour moi.")
Explanation: Dans une structure conditionnelle, on peut aussi prévoir un cas si toutes les conditions précédentes ont échouées: else (sinon).
On ne peut utiliser qu'un seul else, obligatoirement en dernière position de la structure conditionnelle.
End of explanation
rep = input("Besoin de faire une pause? (o/n)")
while rep != "n":
    rep = input("Sérieusement, vraiment besoin d'une pause? (o/n)")
print("Allez on bosse.")
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT** : L'instruction `if` est éventuellement suivie :
 * d'un ou plusieurs `elif`
 * d'un unique `else`, en dernière position  
qui permettent d'exprimer plusieurs alternatives.</div>
<div class="alert alert-block alert-danger travail">
**Ex3.2** Ecrivez un programme qui demande 2 entiers `a` et `b`, et affiche le plus grand d'entre eux.  
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.3** Modifiez votre programme afin qu'il demande 3 entiers `a`, `b`, et `c`, et affiche le plus grand d'entre eux.  
Vous allez écrire ce programme de deux façons différentes, qui ont chacune leur avantage:
 * avec des conditions utilisant les opérateurs logiques et exprimant directement *a est le plus grand des trois*, *b est le plus grand des trois*...
 * en n'utilisant que des inégalités simples (`a>b`) et en imbriquant plusieurs `if` les uns dans les autres
</div>
<div class="alert alert-block alert-danger travail">
**Ex3.4** Ecrivez un programme qui demande 3 entiers et affiche `positifs ou nuls` s'ils sont tous positifs ou nuls, `négatifs` s'ils sont tous négatifs, et `signes différents` sinon.  
Vous allez écrire ce programme de deux façons différentes:
 * comme vous le souhaitez
 * en utilisant deux compteurs `posnul` et `neg` que vous augmenterez à chaque fois que vous détectez une variable positive ou nulle, ou une variable négative. Ensuite, vous n'aurez plus qu'à lire ces compteurs pour savoir quoi afficher.</div>
Boucles while
Dans un programme, on a souvent besoin d'effectuer des actions de façon répétée. On a alors intérêt à utiliser des boucles.  
Si par exemple on vous demande d'afficher tous les entiers de 1 à 1000, vous êtes bien embêtés sans les boucles.  
Python propose deux types de boucles, while et for, qui sont très différentes. Nous expliquons ici le while...
While signifie tant que. Concrètement, while va être associé à une condition (comme if) et se répéter tant que cette condition est vraie.
End of explanation
<END_TASK>