SNT Python 1

Identification

Infoforall

1 - Les types de données


Voici comment les gens pensent que l'informatique fonctionne :

Python classe ce qu'il doit évaluer dans plusieurs catégories.

Nous allons voir une bizarrerie qu'on peut obtenir si on ne fait pas attention :

calcul bizarre
Un calcul très bizarre...

Vous imaginez s'il fallait payer 55 euros en achetant deux objets à 5 euros !

Documents de cours : pdf ou odt.

Document-élève : pdf ou odt.

  • 03 - 05 - 08 - 09 - 14 - 15
  • 15

1 - Thonny

Thonny
Ecran de Thonny

Nous allons utiliser Thonny, un environnement de développement gratuit, léger, efficace et multiplateforme créé par l'université d'Estonie.

Vous pouvez le télécharger sur la page d'accueil du projet : https://thonny.org/

✔ 01-A (action)° Si vous êtes chez vous, installer Thonny sur votre ordinateur. Sinon, ouvrir Thonny à l'aide de son icône qui doit apparaître sur le bureau.

Tester sa console (la partie basse de l'écran) avec quelques expressions simples. Par exemple :

>>> 3 + 8 11

Lorsqu'on est sur ordinateur, on doit souvent taper une lettre majuscule ou minuscule. Sur une clavier d'ordinateur, certains d'entre vous avez tendance à activer la touche VERROUILLAGE MAJUSCULE (avec un verrou, à gauche du clavier ci-dessous) dès qu'il faut taper UNE majuscule. En réalité, on appuie sur cette touche uniquement lorsqu'on veut taper une série de plusieurs lettres en majuscules.

clavier azerty
Michka_B, CC BY-SA 4.0, via Wikimedia Commons

Lorsqu'on veut taper une majuscule uniquement alors que le reste est en minuscules, on doit utiliser la touche juste sous la touche VERROUILLAGE MAJUSCULE : elle est notée SHIFT ou . Notez que cette touche est également présente à droite du clavier.

Son utilisation est simple : on maintient cette touche appuyée et on appuie sur la lettre voulue.

✔ 01-B (action)° Taper ceci dans Thonny en utilisant la touche SHIFT .

>>> "Maintenant Je Sais Alterner Entre Majuscules et mINISCULES"

Reste encore le délicat problème des caractères situés en bas à droite des touches de la premières lignes (1234567890°+), à savoir ~#{[|`\^@]}.

clavier azerty
Michka_B, CC BY-SA 4.0, via Wikimedia Commons

Pour écrire l'un de ces caractères, elle faut maintenir ALG GR appuyée et appuyer sur la touche voulue : ALG GR+5 provoque l'apparition du caractère [.

✔ 01-C (action)° Taper ceci dans Thonny en utilisant la touche ALT GR.

>>> ["&", "#"]

Maintenant que vous avez trouvé Thonny, vous allez pouvoir travailler.

Nous nous limiterons aujourd'hui à trois types de données possibles, c'est déjà bien :

  1. Les entiers (int pour integer en langage Python)
  2. Les chaînes de caractères (str pour string en langage Python)
  3. Les booléens (bool en langage Python)

2 - Type int et ses opérateurs

✔ 02 (action)° Tester dans la console les différentes expressions proposées dans l'encadré de cours ci-dessous.

2 - Les integers

On retrouve tous les opérateurs classiques avec ces valeurs entières.

  • addition avec +
  • >>> 4 + 5 9
  • soustraction avec -
  • >>> 4 - 5 -1
  • multiplication avec *
  • >>> 4 * 5 20
  • division avec /
  • >>> 23 / 5 4.6

    Notez bien qu'en Python, la virgule (notation française) est représentée par un point (notation anglosaxonne).

  • quotient d'une division euclidienne avec //
  • >>> 23 // 5 4

    Tout simplement car 23 contient 4 fois 5.

  • reste d'une division euclidienne avec %
  • >>> 23 % 5 3

    Si on retire 4 fois 5 de 23, il reste 3 : 23 = 4*5 + 3.

  • puissance avec **
  • >>> 5 ** 2 25 >>> 5 ** 3 125

✎ 03 (rédaction)° Tester les expressions ci-dessous puis expliquer les valeurs obtenues.

>>> 4 ** 3 ? >>> 57 // 10 ? >>> 57 % 10 ?

3 - Type str et ses opérateurs

✔ 04 (action)° Tester dans la console les différentes expressions proposées dans l'encadré de cours ci-dessous pour en comprendre la signification.

3.1 - Les strings

Une chaîne de caractères est délimitée par un guillemet d'ouverture et un guillemet de fermeture.

>>> "Hello World !" 'Hello World !'

Python répond toujours avec des guillemets simples.

Il existe deux opérateurs applicables aux strings.

  • Concaténation avec +
  • >>> "Bon" + "jour" 'Bonjour'
  • "Répétition" avec *
  • >>> "Bon" * 2 'BonBon' >>> "Pom !" * 4 'Pom !Pom !Pom !Pom !'

✔ 05-A (action)° Tester les expressions ci-dessous pour en comprendre réellement le principe.

>>> "ab" + "cd" ? >>> "un" * 3 ? >>> "un " * 3 ? >>> "un " + "deux " * 3 ? >>> ("bo" + "um ! ") * 3 ?

✎ 05-B (rédaction)° Expliquer l'évaluation obtenue pour l'expression suivante :

>>> ("a" + " " + "b" + " ") * 10 ?

Mais il existe également un certain nombre de fonctions Python natives permettant de gérer les strings.

3.2 - Fonction native ord()

Notez la présence de parenthèses : c'est une fonction.

Fonction native

Une fonction native est une sorte de code contenu dans une boîte :

  • On lui donne une ou des données sur lesquelles travailler (les ENTREES)
  • Elle répond en fournissant sa réponse (la SORTIE)
Obtenir la valeur d'encodage d'un caractère

La fonction ord() permet de récupérer la valeur d'encodage ASCII des caractères basiques.

>>> ord("A") 65

TRADUCTION : Donne l'encodage du caractère A.

La syntaxe Python est simple 

  • On note le nom de la fonction : ord
  • On ouvre une parenthèse : ord(
  • On note les paramètres d'entrée, séparés par des virgules éventuellement : ord("A"
  • On ferme la parenthèse ord("A")

⚙ 06 (exercice)° Utiliser Python pour trouver, une à une, les valeurs qui encodent le texte "Hello !".

Pour la première :

>>> ord("H") 72
3.3 - Fonction native len()

Notez la présence de parenthèses : c'est une fonction.

Obtenir le nombre de caractères d'un string

La fonction native len() permet d'obtenir le nombre de caractères présents dans un string.

Pourquoi len() ? C'est la version raccourcie de lenght.

>>> len("ABCD") 4

TRADUCTION : Donne le nombre de caractères dans le string "ABCD".

Même chose mais avec un espace dans la chaîne de caractères :

>>> len("ABC D") 5

TRADUCTION : Donne le nombre de caractère dans le string "ABC D".

On notera que l'espace est donc un caractère comme un autre puisqu'il compte parmi les 5 caractères de "ABC D". Le caractère espace n'est pas "le vide".

Le caractère "vide"

Il existe un moyen de signaler le caractère vide : ouvrir un string et le refermer immédiatement : "".

>>> "a" + "" + "b" 'ab'

⚙ 07 (exercice)° Demander poliment à Python le nombre de caractères dans le texte fourni ci-dessous (à vous de le transformer en string) 

anticonstitutionnellement

⚙ 08 (exercice)° Demander poliment à python le nombre de caractères dans la séquence ADN fournie ci-dessous. Notez ce que vous avez noté dans la console et le résultat sur votre feuille. Par contre, ne notez pas toute la séquence ci-dessous, notez juste ADN.

>>> ? ?

ADN="TACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGC"

3.4 - Fonction native chr()

Notez la présence de parenthèses : c'est une fonction.

Obtenir le caractère correspondant à un encodage
>>> chr(65) 'A'

Donne moi le caractère qui correspond à l'encodage 65.


>>> chr(66) 'B'

Donne moi le caractère qui correspond à l'encodage 66.

✎ 09 (rédaction)° Demander poliment à Python quels sont les caractères qui correspondent aux valeurs encodées par la suite de nombres 66 puis 111 puis 98. Notez sur votre feuille les évaluations que vous avez effectué.

>>> ? ?

✔ 10 (action)° En plus des caractères dits "imprimables", il existe des caractères de "contrôle" : ils n'affichent rien mais provoquent un effet d'une façon ou d'une autre.

Ces caractères sont également encodés par une valeur d'encodage.

Visualiser les réponses de la fonction chr() lorsqu'on lui demande à quoi correspondent 7 ou 10.

>>> chr(9) '\t' >>> chr(10) '\n'

Nous allons voir le sens de ces deux valeurs de caractères en utilisant la fonction native print() lors de la question juste en dessous.

✔ 11 (action)° Copier-coller au fur et à mesure les évaluations proposées dans l'encadré ci-dessous et comprendre les résultats obtenus ou demander de l'aide.

Pour taper \ sur un clavier, c'est ALT-GR maintenue appuyée et la touche 8.

3.5 Fonction native print()

Notez la présence de parenthèses : c'est une fonction.

Interpréter une donnée et l'afficher dans la console

Cette fonction permet de forcer l'affichage dans la console à destination d'un humain.

Ainsi, si on affiche un string, Python ne va pas placer les guillemets qui sont juste une indication pour l'interpréteur Python, pas pour l'humain qui veut lire le contenu.

>>> print("Bonjour à toi") Bonjour à toi

TRADUCTION : Affiche le string "Bonjour à toi" dans la console pour un lecteur humain.

Nouvelle ligne avec \n
>>> print("Bonjour\nà\ntoi") Bonjour à toi

TRADUCTION : Affiche le string "Bonjour\nà\ntoi" dans la console pour un lecteur humain.

On peut donc voir que \n veut dire "passe à la ligne". Le n vient du n de new line.

>>> ord("\n") 10

Et le code ASCII du passage à la ligne est 10.

Tabulation avec \t
>>> print("Bonjour\tà\ttoi") Bonjour à toi

TRADUCTION : Affiche le string "Bonjour\tà\ttoi" dans la console pour un lecteur humain.

On peut donc voir que \t veut dire "utilise la tabulation à droite". Le t vient du t de tabulation.

>>> ord("\t") 9

Et le code ASCII de la tabulation est 9.

⚙ 12 (exercice)° Remplacer les 3 points dans le print() pour obtenir l'affichage proposé.

>>> print(...) Salut les gens

4 - Type bool et ses opérateurs

Nous allons voir que certains opérateurs ne renvoient ni un string, ni un entier mais True ou False.

✔ 13 (action)° Copier-coller au fur et à mesure les évaluations proposées dans les deux encadrés 4.1 et 4.2 ci-dessous.

4.1 - Les opérateurs booléens de comparaison

Voici comment comprendre ce qu'on demande à l'interpréteur Python lorsqu'on tape ceci :

>>> 40 > 30 True

TRADUCTION de "40 est-il strictement supérieur à 30 ?".

>>> 40 < 30 False

TRADUCTION de "40 est-il strictement inférieur à 30 ?".

>>> 40 <= 30 False

TRADUCTION : "40 est-il inférieur ou égal à 30 ?".

Si on résume, voici les 4 opérateurs de comparaison répondant par un booléen :

  • Strictement supérieur >
  • Supérieur ou égal >=
  • Strictement inférieur <
  • Inférieur ou égal <=
4.2 Opérateurs d'égalité et de différence

  • L'opérateur d'égalité se note ==. Par exemple, a == b revient à se poser la question suivante à l'interpréteur Python : "a est-il identique à b ?"
  • >>> 40 == 30 False >>> 40 == 40 True >>> 40 == 30 + 10 True
  • L'opérateur de différence se note != . Par exemple, a != b revient à se poser la question suivante à l'interpréteur Python : "a est-il différent de b ?"
  • >>> 40 != 30 True >>> 40 != 40 False >>> 40 != 30 + 10 False

✎ 14 (rédaction)° L'opérateur multiplication * est plus prioritaire que l'opérateur addition +. Voici comment Python comprend l'expression suivante :

>>> 5 + 2 * 10 25 >>> 5 + (2 * 10) # Python réagit comme si vous aviez placé ces parenthèses 25

Sur le même principe, l'opérateur addition + est plus prioritaire que l'opérateur d'égalité ==.

Question : Justifier comment l'interpréteur Python comprend cette expression : comme dans le cas A ou le cas B ?

>>> 40 != 30 + 10 False
  • Proposition d'interprétation A ?
  • >>> 40 != (30 + 10)
  • Proposition d'interprétation B ?
  • >>> (40 != 30) + 10
4.3 Opérateur d'appartenance in

On peut demander très facilement à Python si un string se trouve à l'intérieur d'un autre string.

Imaginons que vous soyez allergique au soja. Vous voulez savoir si vous pouvez manger sans risque tel ou tel aliment. Il vous faut donc savoir si le mot soja apparaît dans la composition du produit.

L'opérateur d'appartenance se note in. Par exemple, a in b revient à poser la question suivante à l'interpréteur Python : "Le string a est-il présent dans le string b ?"

>>> "ab" in "azertyabazerty" True >>> "bonjour" in "bon, ça va bien ?" False >>> "soja" in "blé; oeuf; soja; huile de tournesol" True >>> "soda" in "blé; oeuf; soja; huile de tournesol" False

✌✎ 15 (appel et rédaction)° Demander poliment à python si la séquence CTCCA est présente dans le bout d'ADN suivant :

ADN="TACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGCTACAGTGTGCCACATCCGGTTGTTAGAGATTCCCGATCAGTAGAAACCCATGGCCCACGGTGTACTTGCCATATATTCTACACTATGGACGCATAGGATAGCCTATGTAACCAAGGTTACGCCTGACATACGAACCAGGTTTAGTTCGTCACCAGATTTGGGGCCCAGTGCTATGGTAACTTTACGCACATTTCGCGAGC"

Notez bien ce que vous avez écrit dans la console ainsi que la réponse. Notez juste ADN pour la longue séquence ci-dessus.

5 - Pour quoi faire ?

Cette partie est destinée à être réalisée ensemble en classe. Elle doit être uniquement être comprise, rien n'est à connaître par coeur : il s'agit de notions qui ne sont pas au programme de SNT explicitement mais qui vous permettront de mieux comprendre l'intérêt des parties précédentes.

✎ 16 (rédaction)° Connaître les trois types basiques (int, str et bool) est fondamental car des données mal utilisées peuvent mener à des désastres... Voici deux opérations où on utilise presque la même chose :

>>> 5*4 20 >>> "5"*4 '5555'

Question

Expliquer l'affichage obtenu.

5.1 Fonction native str()

Notez la présence de parenthèses : c'est une fonction.

On peut demander très facilement à Python de tenter de comprendre une donnée comme un string.

>>> str(5) '5' >>> str(5)*4 '5555'
5.2 Fonction native int()

Notez la présence de parenthèses : c'est une fonction.

On peut demander très facilement à Python de tenter de comprendre une donnée comme un entier.

>>> int("5") 5 >>> int("5")*4 20

Notez néanmoins que Python va déclencher une exception et s'arrêter si on lui demande de faire n'importe quoi :

>>> int("Bonjour") ValueError: invalid literal for int() with base 10: 'Bonjour'

✎ 17 (rédaction)° Expliquer séquentiellement (c'est à dire en suivant une à une les étapes suivies par Python) l'affichage obtenu dans la console :

>>> 5*4 20 >>> "5"*4 '5555'

✎ 18 (rédaction)° Expliquer séquentiellement (c'est à dire en suivant une à une les étapes suivies par Python) l'affichage obtenu dans la console :

>>> 5*str(4) '4444' >>> int("5")*4 20
5.3 Découper un string avec split()

Aucune question en DS sur cette partie. Elle est hors programme mais permet de donner du sens à ce que vous avez découvert aujourd'hui.

Notez la présence de parenthèses.

On peut demander très facilement à Python de découper un string en différentes parties. Il les stocke alors dans un conteneur qu'on nomme un tableau. Ce tableau contient des cases qui sont numérotées 0, 1, 2...Notez bien que la première case est la case 0, pas la case 1 !

La syntaxe est particulière : on note le string, un point et split() à qui on doit fournir le caractère qui servira de séparateur dans le string.

>>> "Bonjour à tous".split(" ") ['Bonjour', 'à', 'tous']

En Python, le conteneur-tableau est caractérisé par la présence des crochets en début et en fin de déclaration.

On voit que j'ai utilisé ici l'espace " " comme caractère de séparation car il est le caractère qui sépare les mots dans une phrase.

La syntaxe pour atteindre une case en particulier est simple : on finit par des crochets qui contiennent le numéro de la case voulue.

>>> "Bonjour à tous".split(" ")[0] 'Bonjour'

Bonjour est bien le mot contenu dans la case 0 du tableau.

⚙ 19 (exercice)° Vous allez voir cette année qu'un moyen d'identifier les ordinateurs est d'utiliser une adresse IPv4 caractérisée par 4 nombres séparés par des points :

Exemples :
80.100.15.3
80.120.30.250

Questions

  1. Si on utilise un string pour caractériser cette adresse (exemple "80.100.15.3"), quel est le caractère qui sépare les différents éléments de cette adresse ?
  2. Que faut-il taper pour récupérer uniquement le premier nombre (80 sur l'exemple) sous forme d'un string ?
  3. Que faut-il taper pour récupérer uniquement le premier nombre (80 sur l'exemple) sous forme d'un entier ?

⚙ 20 (exercice)° Vous allez voir cette année qu'une adresse de site se décompose en plusieurs noms séparés par des points :

Exemples :
www.infoforall.fr
www.nuitducode.net

Questions

  1. Si on utilise un string pour caractériser cette adresse (exemple "www.infoforall.fr"), quel est le caractère qui sépare les différents éléments de cette adresse ?
  2. Que faut-il taper pour récupérer uniquement le sous-domaine (www sur l'exemple) ?
  3. Que faut-il taper pour récupérer uniquement le nom principal (infoforall sur l'exemple) ?
  4. Que faut-il taper pour récupérer uniquement l'extension (fr sur l'exemple) ?
5.4 - Séquentialité sur une ligne

Séquentialité

A avoir en tête dès qu'on programme :

  • L'interpréteur Python exécute une ligne en y suivant un ordre précis imposé par les priorités des opérateurs.
  • Tant qu'il n'a pas fini une ligne, il ne passera pas à la suivante.

Une fois qu'une ligne est exécutée, on ne peut pas revenir en arrière : elle est réalisée.

Pour comprendre un programme Python, il est donc vital de ne pas "sauter" d'instructions mais de comprendre TOUTES les lignes DANS L’ORDRE d’exécution.

Console interactive
  • L'invite de commande est notée >>>
  • On valide une ligne avec ENTREE, encodé par le string "\n" en Python, et parfois représenté dans ce cours par la flèche .
  • Impossible de modifier une ligne déjà exécutée.

Le truc pratique :

En plaçant votre souris sur la console, on peut récupérer les dernières instructions avec la flèche UP.

6 - FAQ

Rien pour le moment

Activité publiée le 01 12 2023
Dernière modification : 01 12 2023
Auteur : ows. h.