<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:  Vérifiez quelle est votre version de Python 
Step2:  Exécutez cette cellule pour appliquer le style CSS utilisé dans ce notebook 
Step3:  Dans les séquences de travail, vous rencontrerez certains logos 
Step4:  Types/classes
Chaque valeur/objet possède un type/classe, qui indique ses capacités.
Les principaux types/classes natives sont 
Step5:  <div class="alert alert-block alert-danger travail">
**Ex2.1** Faites de même afin d'obtenir un type `str` contenant `réseaux`.
</div>
<div class="alert alert-block alert-danger travail">
**Ex2.2** Faites de même afin d'obtenir un type `bool`.
</div>
Pour les autres types, nous verrons ultérieurement comment procéder.
Specificité des entiers
Pour faciliter la lisibilité des grands nombres entiers, il est possible d'utiliser le underscore _ pour faire des séparations.
Par exemple 123_456_789 = 123456789.
Valeur maximale représentable
En Python 2, la taille des int était limité à 32 bits, il était donc possible possible de stocker des nombres entiers de –2 147 483 648 to 2 147 483 647.
Avec les entiers longs, il est possible d'étendre la taille à 63 bits, soit de –9 223 372 036 854 775 808 to 9 223 372 036 854 775 807. En Python 3, toutes ces limitations sont finies et les entiers peuvent être plus grands que 64 bits. Il est ainsi possible de représenter des nombres arbitrairement grands, par exemple un googol (un suivi de 100 zeros), qui était le nom prévu initialement de Google, avant de trouver un nom plus simple à épeler 
Step6:  Base et numération
Les entiers peuvent être rentrés directement dans différentes bases usuelles en utilisant un préfixe 
Step7:  <div class="alert alert-block alert-danger travail">
**Ex3.0** Combien vaut le nombre `"BAD"` de base 16 en décimal ?
</div>
Il est aussi possible de convertir des octets (de type bytes) en entiers, en spécifiant l'ordre de lecture (big ou little indian) et si les entiers sont signés ou non. C'est particulièrement utile pour lire des trames réseaux ou des fichiers binaires. Par exemple
Step8:  <div class="alert alert-block alert-danger travail">
**Ex3.1** Combien vaut l'octet `'9E'` encodé en big indian et signé en décimal ?
</div>
Les conversions depuis les entiers
Il est possible de faire l'inverse et de convertir un nombre décimal en binaire avec bin() en octal avec oct() et en hexadécimal avec hex(). Par exemple 
Step9:  Opérateurs numériques
Les opérateurs permettent de réaliser des opérations sur les valeurs/objets.
Les opérateurs numériques usuels sont 
Step10:  <div class="alert alert-block alert-danger travail">
**Ex4.3 - `+` entre `int` et`str`**  
Utilisez l'opérateur `+` entre un `int`et un `str` et affichez le résultat obtenu, et son type.
</div>
Step11:  <div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step12:  <div class="alert alert-block alert-danger travail">
**Ex4.5 - Que font `/` et `//` ?**  
Essayez de distinguer les comportements de `/` et `//` 
Step13:  <div class="alert alert-block alert-danger travail">
**Ex5.1 - Multiple de ?**  
8751212 est-il un multiple de 3 ?</div>
<div class="alert alert-block alert-danger travail">
**Ex5.2 - Modulogâteau** 🍰🍰🍰🍰🍰  
20 parts de gâteaux, 7 convives, combien de parts de gâteau par personne et combien de parts restantes ?</div>
Opérateurs d'affectation
Les opérateurs d'affectation sont 
Step14:  <div class="alert alert-block alert-danger travail">
**Ex6.1 - La sucre syntaxique**   
Effectuez les mêmes opérations en utilisant les opérateurs `-=` et `/=`.</div>
Step15:  <div class="alert alert-block alert-info bilan">
**IMPORTANT 
Step16:  Les opérateurs logiques usuels sont and, or, not.
Ils permettent d'associer une ou plusieurs valeurs de vérité et d'obtenir une valeur de vérité.
Par exemple
Step17:  Exercice 6 - Quête de vérité
<div class="alert alert-block alert-danger travail">
**Ex7.0 - Minority report**  
Ecrivez une expression utilisant opérateurs de comparaison et/ou opérateurs logiques, et permettant d'afficher si `bob` est mineur (`True`) ou majeur (`False`). **Attention, votre programme doit renvoyer `False` en cas de valeur négative**.  
**MERCI DE BIEN LIRE CET ENONCE!**  
Exemple
Step18:  <div class="alert alert-block alert-danger travail">
**Ex7.1 - Minority report 2**  
Même exercice, mais vous n'avez le droit d'utiliser que des opérateurs de comparaison (pas d'opérateurs logiques).</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** 
Step19:  <div class="alert alert-block alert-danger travail">
**Ex7.3 - Même signe**  
Ecrivez une expression permettant d'afficher si `n` et `m` sont bien de même signe.</div>
Step20:  <div class="alert alert-block alert-danger travail">
**Ex7.4 - Table de vérité du OU**  
Complétez l'affichage de la table de vérité (toutes les possibilités d'association de booléens) de l'opérateur OU.</div>
Step21:  <img src="https
<ASSISTANT_TASK:>
Python Code:
print("C'est parti")  # affiche le texte en dessous
# essayez de modifier le texte et ré-exécuter
Explanation: <img src="https://live.staticflickr.com/3089/3086874879_5eeb26eda6_w_d.jpg" align=center>
SAÉ 03 - TP1 - Tour d'horizon de Python
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 cette fiche, nous allons passer rapidement en revue certains concepts de python que nous développerons de façon plus approfondie dans la SAÉ. Cela vous permettra de bien maîtriser les notions dont vous aurez besoin ce semestre.
En route !
Ce print permet d'afficher du texte, il est dans une cellule que vous pouvez exécuter et modifier :
End of explanation
# Exécutez cette cellule !
import platform
print("Vous travaillez actuellement sur la version", platform.python_version())
Explanation: Vérifiez quelle est votre version de Python :
End of explanation
# 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: Exécutez cette cellule pour appliquer le style CSS utilisé dans ce notebook :
End of explanation
l'avion = "rafale"
tire-bouchon = True
7ici = "Vélizy"
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>
Valeurs, objets, identifiants
Un identifiant est un lien vers un espace de stockage de données. 
Lorsqu'on écrit a = 2 python crée automatiquement un espace de stockage pour la valeur 2, qu'on peut atteindre avec l'identifiant a. Dans les langages de programmation plus anciens, on parlait de variable...et comme nous avons pris de mauvaises habitudes on risque de continuer à utiliser ce terme. ;)
Un objet est une valeur qui possède des super-pouvoirs, et dont nous expliquerons le fonctionnement plus tard. 
Retenez juste que depuis la version 3 de python, tout est objet.
Règles pour les identifiants
Un identifiant permet donc d'accéder à une variable/objet. Cet identifiant doit respecter:
 * des contraintes grammaticales (obligatoires)
 * des conventions d'écriture (facultatives)
Les règles de bon usage de python sont décrites dans des documents officiels nommés PEP. Vous trouverez les contraintes et conventions d'écriture dans la PEP8.
Les principales contraintes grammaticales pour les identifiants sont :
 * pas de chiffre en début d'identifiant
 * pas de symboles de ponctuation, d'espace, d'apostrophe, de guillements, de slash; seul underscore _ est autorisé
Et les principales conventions d'écriture sont :
 * variables/objets en minuscules : truc, et pas Truc ni TRUC
 * constantes (qui n'existent pas formellement en python) en majuscules : TRUC
 * des séparations de mots par majuscules (Camel case) : nbBilles, distVilleDepart
 * des espaces de séparation afin d'alléger la lecture: a = 2
Exercice 1 - identifiants
<div class="travail alert alert-block alert-danger">Corrigez les problèmes ci-dessous</div>
End of explanation
a = 12
print(type(a))
Explanation: Types/classes
Chaque valeur/objet possède un type/classe, qui indique ses capacités.
Les principaux types/classes natives sont :
 * int : type entier relatif, pas de valeur maximale depuis python3
 * float : nombres décimaux
 * str : chaînes de caractères (lettres, mots, phrases, délimités par des \' ou des \" )
 * bool : booléens (True ou False)
 * list : listes, ou tableaux (symbolisés par des [ ] )
 * dict : dictionnaires (symbolisés par des { } )
 * set : ensembles au sens mathématique
 * tuples : couples, triplets, n-uplets (ex: (5, 2) ou (3, 9, 2) )
<div class="alert alert-block alert-info bilan">
**TRES IMPORTANT** : [la documentation officielle de python](https://docs.python.org/fr/3/) en français vous aidera énormément, prenez l'habitude de la consulter afin d'avoir les informations exactes !  
**ATTENTION**, veillez bien à ce que la version de la doc python (en haut à gauche) corresponde à celle que vous utilisez.
</div>
Exercice 2 - Types
<div class="alert alert-block alert-danger travail">
**Ex2.0** Dans l'exemple ci-dessous, modifiez la valeur de `a` afin d'obtenir un type `float`.
</div>
End of explanation
googol = 10_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000
print(googol)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex2.1** Faites de même afin d'obtenir un type `str` contenant `réseaux`.
</div>
<div class="alert alert-block alert-danger travail">
**Ex2.2** Faites de même afin d'obtenir un type `bool`.
</div>
Pour les autres types, nous verrons ultérieurement comment procéder.
Specificité des entiers
Pour faciliter la lisibilité des grands nombres entiers, il est possible d'utiliser le underscore _ pour faire des séparations.
Par exemple 123_456_789 = 123456789.
Valeur maximale représentable
En Python 2, la taille des int était limité à 32 bits, il était donc possible possible de stocker des nombres entiers de –2 147 483 648 to 2 147 483 647.
Avec les entiers longs, il est possible d'étendre la taille à 63 bits, soit de –9 223 372 036 854 775 808 to 9 223 372 036 854 775 807. En Python 3, toutes ces limitations sont finies et les entiers peuvent être plus grands que 64 bits. Il est ainsi possible de représenter des nombres arbitrairement grands, par exemple un googol (un suivi de 100 zeros), qui était le nom prévu initialement de Google, avant de trouver un nom plus simple à épeler :
End of explanation
# depuis du binaire
a = int("0101_1111_0101", 2)
print(a)
# depuis la base 7
a = int("263", 7)
print(a)
Explanation: Base et numération
Les entiers peuvent être rentrés directement dans différentes bases usuelles en utilisant un préfixe :
- 0b : système binaire, par exemple 0b0110 en base 2 vaut 6 en base 10
- 0o : système octal, par exemple 0o42 en base 8 vaut 34 en base 10
- rien : système décimal, c'est celui utilisé habituellement. 42 vaut 42 en base 10
- 0x : système hexadécimal, par exemple 0x1313C en base 16 vaut 78140
On peut mentionner qu'il est possible d'utiliser la notation scientifique ($a \times 10^n$), par exemple 1.5e3 = 1500.0 et 5e-2 = 0.005, mais attention ce sont des float et pas des int.
Les conversions vers les entiers
On peut convertir un nombre en int (entier décimal) à partir de n'importe quelle base avec int("nombre", base) où le nombre est à indiquer sous forme de str. Par exemple :
End of explanation
octet = bytes.fromhex('20')
a = int.from_bytes(octet, byteorder='little', signed=False)
print(a)
Explanation: <div class="alert alert-block alert-danger travail">
**Ex3.0** Combien vaut le nombre `"BAD"` de base 16 en décimal ?
</div>
Il est aussi possible de convertir des octets (de type bytes) en entiers, en spécifiant l'ordre de lecture (big ou little indian) et si les entiers sont signés ou non. C'est particulièrement utile pour lire des trames réseaux ou des fichiers binaires. Par exemple
End of explanation
a = 42
print("En binaire, 42 = ", bin(a))
print("En octal, 42 = ", oct(a))
print("En hexadécimal, 42 = ", hex(a))
Explanation: <div class="alert alert-block alert-danger travail">
**Ex3.1** Combien vaut l'octet `'9E'` encodé en big indian et signé en décimal ?
</div>
Les conversions depuis les entiers
Il est possible de faire l'inverse et de convertir un nombre décimal en binaire avec bin() en octal avec oct() et en hexadécimal avec hex(). Par exemple :
End of explanation
a = 'réseaux' + 'télécom'
Explanation: Opérateurs numériques
Les opérateurs permettent de réaliser des opérations sur les valeurs/objets.
Les opérateurs numériques usuels sont : + - * / // % **
Leur comportement dépend des types concernés.
Exercices 4 - Opérateurs standards
<div class="alert alert-block alert-danger travail">
**Ex4.0 - `+` entre `int`**  
Utilisez l'opérateur `+` entre deux `int` et affichez le type du résultat obtenu.
</div>
<div class="alert alert-block alert-danger travail">
**Ex4.1 - `+` entre `float` et `int`**  
Utilisez l'opérateur `+` entre un `float`et un `int` et affichez le résultat obtenu, et son type.
</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : lorsqu'on utilise des opérateurs, il existe un mécanisme de conversion implicite qui...
</div>
<div class="alert alert-block alert-danger travail">
**Ex4.2 - `+` entre `str`**  
Utilisez l'opérateur `+` entre deux `str` et affichez le résultat obtenu, et son type.
</div>
End of explanation
a = 1 + "fini"
Explanation: <div class="alert alert-block alert-danger travail">
**Ex4.3 - `+` entre `int` et`str`**  
Utilisez l'opérateur `+` entre un `int`et un `str` et affichez le résultat obtenu, et son type.
</div>
End of explanation
a = 8 * "simple,basique,"
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT** : Pour l'opérateur `+`, nous pouvons en conclure que...</div>
<div class="alert alert-block alert-danger travail">
**Ex4.4 - `*` entre`str` et `int`**  
Utilisez maintenant l'opérateur `*` entre un `str`et un `int` et affichez le résultat obtenu, et son type.
</div>
End of explanation
n = 35
Explanation: <div class="alert alert-block alert-danger travail">
**Ex4.5 - Que font `/` et `//` ?**  
Essayez de distinguer les comportements de `/` et `//` :
 * quelles opérations réalisent-ils ?
 * à quel(s) type(s) peuvent-ils être associés?
 </div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : les opérateurs `/` et `//` réalisent respectivement des opérations de...  
Ils s'appliquent aux valeurs de type...</div>
<div class="alert alert-block alert-danger travail">
**Ex4.6 - Que fait l'opérateur** `**` **?**
</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : l'opérateur `**` permet de...</div>
Exercice 5 - modulo
L'opérateur modulo % permet d'obtenir le reste de la division entière.  
<div class="alert alert-block alert-danger travail">
**Ex5.0 - Pair ?**  
Quel calcul effectuer afin de savoir si `n` est pair ?</div>
End of explanation
a = 18
Explanation: <div class="alert alert-block alert-danger travail">
**Ex5.1 - Multiple de ?**  
8751212 est-il un multiple de 3 ?</div>
<div class="alert alert-block alert-danger travail">
**Ex5.2 - Modulogâteau** 🍰🍰🍰🍰🍰  
20 parts de gâteaux, 7 convives, combien de parts de gâteau par personne et combien de parts restantes ?</div>
Opérateurs d'affectation
Les opérateurs d'affectation sont : = += -+ *+ /= //* %=.  
Le = permet évidemment d'associer une valeur/objet à un identificateur.
Les autres opérateurs d'affectation sont en fait du sucre syntaxique: ils ne sont pas indispensables mais simplifient les écritures.
Exercice 5 - Modifier une valeur
<div class="alert alert-block alert-danger travail">
**Ex6.0 - La classique**  
Dans le code suivant, en utilisant les opérateurs standards `-` et `/`, effectuez des opérations diminuant `a` de 4 puis réduisant de moitié sa valeur.  </div>
End of explanation
a = 18
Explanation: <div class="alert alert-block alert-danger travail">
**Ex6.1 - La sucre syntaxique**   
Effectuez les mêmes opérations en utilisant les opérateurs `-=` et `/=`.</div>
End of explanation
a = 18
print(a == 12)
Explanation: <div class="alert alert-block alert-info bilan">
**IMPORTANT :**  l'opérateur `+=` permet de remplacer...</div>
Opérateurs de comparaison et opérateurs logiques
Les opérateurs de comparaison sont : ==, &lt;, &lt;=, &gt;=, &gt;, !=.  
Associés à des expressions (comme 2 * a + 1 ou 5.2), ils permettent d'obtenir une valeur de vérité (True ou False). Par exemple:
End of explanation
a = 18
b = 12
print(a >= 18 and b != 5)
Explanation: Les opérateurs logiques usuels sont and, or, not.
Ils permettent d'associer une ou plusieurs valeurs de vérité et d'obtenir une valeur de vérité.
Par exemple:
End of explanation
bob = 17
Explanation: Exercice 6 - Quête de vérité
<div class="alert alert-block alert-danger travail">
**Ex7.0 - Minority report**  
Ecrivez une expression utilisant opérateurs de comparaison et/ou opérateurs logiques, et permettant d'afficher si `bob` est mineur (`True`) ou majeur (`False`). **Attention, votre programme doit renvoyer `False` en cas de valeur négative**.  
**MERCI DE BIEN LIRE CET ENONCE!**  
Exemple:  
    12 : `True`  
    -2 : `False` </div>
End of explanation
n = 12
Explanation: <div class="alert alert-block alert-danger travail">
**Ex7.1 - Minority report 2**  
Même exercice, mais vous n'avez le droit d'utiliser que des opérateurs de comparaison (pas d'opérateurs logiques).</div>
<div class="alert alert-block alert-info bilan">
**IMPORTANT** : en python, on peut écrire des égalités, des inégalités, mais également des...</div>
<div class="alert alert-block alert-danger travail">
**Ex7.2 - Chiffre pair**  
Ecrivez une expression permettant d'afficher si `n` est bien un __chiffre__ pair.  
Exemple: 12 est pair mais n'est pas un chiffre donc `False` , 3 est un chiffre impair donc `False` </div>
End of explanation
n = 12
m = -2
Explanation: <div class="alert alert-block alert-danger travail">
**Ex7.3 - Même signe**  
Ecrivez une expression permettant d'afficher si `n` et `m` sont bien de même signe.</div>
End of explanation
print(True, "or", True, "=", True or True)
# etc...
Explanation: <div class="alert alert-block alert-danger travail">
**Ex7.4 - Table de vérité du OU**  
Complétez l'affichage de la table de vérité (toutes les possibilités d'association de booléens) de l'opérateur OU.</div>
End of explanation
# 6 - 2
# 6 - 3.2
# 6 * 4.3
# 5 // 2
# 5 / 2
# 6 / 2
# 6 % 2
# "hello" + "ça va ?"
# "hello" * 3
# 2 < 4
# (2 < 4) or (x == 2)  # donnez une valeur à x
# not (2 < 4 and False)
# 2 <= x < 34  # donnez une valeur à x
Explanation: <img src="https://cdn.pixabay.com/photo/2021/04/13/09/50/road-6175186_960_720.jpg" width=350>
Bilan
<div class="alert alert-block alert-danger travail">
**Petit bilan sur les types et opérateurs vus**  
Vous devez maintenant être capables d'évaluer la valeur obtenue et de reconnaître son type une fois que les expressions suivantes sont évaluées. Essayez de deviner, puis vérifiez.</div>
End of explanation
<END_TASK>