GitLab now enforces expiry dates on tokens that originally had no set expiration date. Those tokens were given an expiration date of one year later. Please review your personal access tokens, project access tokens, and group access tokens to ensure you are aware of upcoming expirations. Administrators of GitLab can find more information on how to identify and mitigate interruption in our documentation.
"1. [✏️ Exercice noté : saisie de mots ](#ex_saisie_mots)\n",
"\n",
"## Qu'est-ce qu'une liste ? <a name=\"definition\"></a>\n",
"Les listes permettent de stocker des séquences, c'est-à-dire des collections finies d'éléments ordonnés selon un ordre précis. Les éléments sont stockés dans des \"cellules\" ordonnées et indicées. L'indice est le numéro d'emplacement d'un élément dans la séquence. Il s'agit d'un entier positif ou négatif. Lorsque l'on déclare une liste, les éléments sont séparés par des virgules et l'ensemble est entouré par des crochets."
...
...
%% Cell type:markdown id: tags:
# Listes
## Sommaire
1.[Qu'est-ce qu'une liste ?](#definition)
1.[Ajout d'éléments à une liste](#ajout)
1.[Suppression d'éléments](#suppression)
1.[Longueur d'une liste](#longueur)
1.[Concaténation de listes](#concatenation)
1.[Tri de listes](#tri)
1.[Assemblage de liste avec `join`](#join)
1.[✏️ Exercice : liste de livres](#ex_livres)
1.[✏️ Exercice : affichage du mois](#ex_aff_mois)
1.[✏️ Exercice : traduction des jours de la semaine](#ex_jours_semaine)
1.[Notion de pile](#pile)
1.[Notion de file](#file)
1.[Parcours de liste](#parcours)
1.[Notion de parcours](#notion_parcours)
1.[L'instruction for...in](#for_in)
1.[Utilisation de `range` dans une boucle for](#range)
1.[✏️ Exercice : traduction des jours de la semaine](#ex_traduction)
1.[✏️ Exercice : conjugaison des verbes du deuxième groupe](#ex_conjugaison2)
1.[✏️ Exercice : poids sur la Lune](#ex_poids_lune)
1.[✏️ Exercice noté : saisie de mots ](#ex_saisie_mots)
## Qu'est-ce qu'une liste ? <a name="definition"></a>
Les listes permettent de stocker des séquences, c'est-à-dire des collections finies d'éléments ordonnés selon un ordre précis. Les éléments sont stockés dans des "cellules" ordonnées et indicées. L'indice est le numéro d'emplacement d'un élément dans la séquence. Il s'agit d'un entier positif ou négatif. Lorsque l'on déclare une liste, les éléments sont séparés par des virgules et l'ensemble est entouré par des crochets.
On peut également récupérer des sous-séquences d'une liste, appelées tranches (*slices*). Par exemple, pour récupérer les 5 premiers éléments (à noter que l'élément d'indice 5 est exclu) :
# ATTENTION : tous les éléments de la liste doivent être des chaînes de caractères
s="\n".join([1,2,3,4,5])
print(s)
```
%% Cell type:markdown id: tags:
## ✏️ Exercice : liste de livres <a name="ex_livres"></a>
Créer une variable appelée `bons_livres` sous forme de liste vide. Ajouter vos livres préférés à la liste (au moins 3) puis afficher les deux derniers livres ajoutés à la liste.
%% Cell type:code id: tags:
``` python
# Exercice : liste de livres
bons_livres=[]
```
%% Cell type:markdown id: tags:
## ✏️ Exercice : affichage du mois <a name="ex_aff_mois"></a>
Écrire un programme qui demande à l'utilisateur un numéro de mois (de 1 à 12), puis affiche : « Vous avez sélectionné le mois de : xxxxxx » (avec xxxxxx janvier si l'utilisateur a choisi 1, août si l'utilisateur a choisi 8...). Les mois seront stockés sous forme de liste.
%% Cell type:code id: tags:
``` python
# Exercice : affichage du mois
```
%% Cell type:markdown id: tags:
## ✏️ Exercice : traduction des jours de la semaine <a name="ex_jours_semaine"></a>
Écrire un programme qui affiche les traductions des jours de la semaine en anglais et français.
Les affichages du programme devraient être les suivants :
```
Il y a 7 jours dans la semaine
Le dernier jour de la semaine est dimanche
Affichage des traductions des jours de la semaine en anglais et en allemand
Le mot "lundi" se traduit par "monday" en anglais et par "Montag" en allemand
Le mot "mardi" se traduit par "tuesday" en anglais et par "Dienstag" en allemand
Le mot "mercredi" se traduit par "wednesday" en anglais et par "Mittwoch" en allemand
Le mot "jeudi" se traduit par "thursday" en anglais et par "Donnerstag" en allemand
Le mot "vendredi" se traduit par "friday" en anglais et par "Freitag" en allemand
Le mot "samedi" se traduit par "saturday" en anglais et par "Samstag" en allemand
Le mot "dimanche" se traduit par "sunday" en anglais et par "Sonntag" en allemand
print("Affichage des traductions des jours de la semaine en anglais et en allemand")
# à compléter
```
%% Cell type:markdown id: tags:
## Notion de pile <a name="pile"></a>
Une pile (*stack* en anglais) est une structure de données ayant pour particularité que le dernier élément à y être entré sera le premier à en sortir (LIFO : *last in-first out*) comme pour une pile d'assiettes sur une étagère de placard. On peut récupérer l'élément qui se situe en haut de la pile (dépiler) mais pas les éléments qui se trouvent au milieu.
<imgsrc="attachment:pile.png"width="400">
Il est possible d'utiliser une liste comme une pile. Pour empiler, on utilise la méthode `append()` :
%% Cell type:code id: tags:
``` python
fruits=["pomme","poire","banane","kiwi"]
fruits.append("framboise")
```
%% Cell type:markdown id: tags:
Pour dépiler, on utilise la méthode `pop()` :
%% Cell type:code id: tags:
``` python
dernier_fruit=fruits.pop()
```
%% Cell type:markdown id: tags:
## Notion de file <a name="file"></a>
Une file (*queue* en anglais) est une structure de données ayant pour particularité que le premier élément à y être entré sera le premier à en sortir (FIFO : *first in-first out*) comme pour une file d'attente à la caisse d'un magasin.
<imgsrc="attachment:file.png"width="400">
Il est possible d'utiliser une liste comme une file. Pour "enfiler", on utilise la méthode `append()` :
%% Cell type:code id: tags:
``` python
fruits=["pomme","poire","banane","kiwi"]
fruits.append("framboise")
```
%% Cell type:markdown id: tags:
Pour "défiler", on utilise la méthode `pop()` :
%% Cell type:code id: tags:
``` python
fruits.pop(0)
```
%% Cell type:markdown id: tags:
## Parcours de liste <a name="parcours"></a>
### Notion de parcours <a name="notion_parcours"></a>
Le parcours permet d'appliquer le même traitement sur chaque élément d'une séquence, sans avoir à écrire plusieurs fois le même code. Par exemple, le parcours peut permettre d'afficher chaque élément d'une liste.
### L'instruction for...in <a name="for_in"></a>
L'instruction `for` permet d'itérer sur l'ensemble des éléments d'une séquence :
%% Cell type:code id: tags:
``` python
fruits=["pomme","poire","banane","kiwi"]
forfinfruits:
print(f)
```
%% Cell type:markdown id: tags:
A chaque tour de boucle, la variable `f` prendra la valeur d'un élément de la liste. La liste est parcourue dans l'ordre. Toutes les lignes d'instruction qui se situent à l'intérieur de la boucle doivent commencer par une indentation (touche tabulation).
%% Cell type:markdown id: tags:
### Utilisation de `range` dans une boucle for <a name="range"></a>
Il est également possible de parcourir un tableau en itérant sur les indices :
%% Cell type:code id: tags:
``` python
fruits=["pomme","poire","banane","kiwi"]
foriinrange(len(fruits)):
print(fruits[i])
```
%% Cell type:markdown id: tags:
`range` renvoie ici un itérateur, c'est-à-dire un objet particulier qui à chaque itération va renvoyer l'élément suivant dans la séquence (ici la séquence sera constituée par la suite d'entiers qui varie de 0 au dernier indice dans la liste `fruits`). L'avantage de cette méthode est que l'on connaît la position (l'indice) de l'élément dans la liste.
On peut aussi utiliser range pour faire un nombre donné d'itérations, comme suit :
%% Cell type:code id: tags:
``` python
forxinrange(0,5):
print(f'Bonjour {x}')
```
%% Cell type:markdown id: tags:
`range(0,5)` indique que le comptage doit démarrer à 0 et se terminer avant d'atteindre 5.
%% Cell type:markdown id: tags:
## ✏️ Exercice : traduction des jours de la semaine <a name="ex_traduction"></a>
Reprendre l'exercice sur la traduction des jours de la semaine en utilisant une boucle `for`
%% Cell type:code id: tags:
``` python
# Exercice : traduction des jours de la semaine avec boucle for
```
%% Cell type:markdown id: tags:
## ✏️Exercice : conjugaison des verbes du deuxième groupe <a name="ex_conjugaison2"></a>
Écrire un programme Python pour la conjugaison des verbes du deuxième groupe. Les affichages et entrées de l'utilisateur sont détaillés ci-dessous, l'infinitif du verbe est entré par l'utilisateur :
```
Entrez l'infinitif d'un verbe du deuxième groupe :
bondir
La conjugaison de "bondir" au présent de l'indicatif :
je bondis
tu bondis
il/elle/on bondit
nous bondissons
vous bondissez
ils/elles bondissent
```
Pour cela, vous aurez besoin d'une liste qui contient les pronoms personnels du français ("je", "tu", "il/elle/on", "nous", "vous", "ils/elles"), et d'une liste qui contient les terminaisons des verbes du deuxième groupe ("is", "is, "it", "issons", "issez", "issent").
%% Cell type:code id: tags:
``` python
# Exercice : conjugaison des verbes du deuxième groupe
verbe=input("Entrez l'infinitif d'un verbe du deuxième groupe : ")
# Compléter ci-dessous
print('La conjugaison de "'+verbe+'" au présent de l\'indicatif :')
# Compléter ci-dessous
```
%% Cell type:markdown id: tags:
## ✏️ Exercice : poids sur la Lune <a name="ex_poids_lune"></a>
Le poids (exprimé en Newton N) se calcule en multipliant la masse (exprimée en kg) par l'accélération de la pesanteur (cf. http://phys.free.fr/maspoids.htm). L'accélération de la pesanteur de la Lune est six fois moins importante que celle de la Terre. Par conséquent, une personne "pèse" six fois moins lourd sur la Lune que sur la Terre : une personne qui a une masse de 70kg a un poids de 687 N sur la Terre et de 112 N sur la Lune.
Supposons maintenant que cette personne prend un kilo par an pendant les 15 prochaines années. Écrire un programme qui utilise une boucle `for` pour afficher la masse, le poids sur la Terre et le poids sur la Lune pour chacune de ces années.
L'affichage obtenu devrait être le suivant :
```
La masse initiale est de 70 kg
Le poids initial sur la Terre est de 687.00 N
Le poids initial sur la Lune est de 112.00 N
****
An 1
Masse : 71 kg
Poids sur la Terre : 696.81 N
Poids sur la Lune : 113.60 N
****
An 2
Masse : 72 kg
Poids sur la Terre : 706.63 N
Poids sur la Lune : 115.20 N
....
```
%% Cell type:code id: tags:
``` python
# Exercice : poids sur la Lune
```
%% Cell type:markdown id: tags:
## Division entière et modulo <a name="div"></a>
L'opération modulo (notée `%`) correspond au reste de la division de nombres entiers. Par exemple, `11 % 3` donne `2`, car `11 = 3 x 3 + 2`.
Il est également possible de faire une division entière, afin de trouver le quotient :
%% Cell type:code id: tags:
``` python
20//3# donne 6 car 20 = 6 * 3 + 2
```
%% Cell type:markdown id: tags:
Notez la différence avec la division décimale (le résultat est un nombre décimal) :
%% Cell type:code id: tags:
``` python
20/3# donne 6.666666666666667
```
%% Cell type:markdown id: tags:
Il est également possible d'obtenir directement à la fois le quotient et le reste d'une division entière à l'aide de la fonction prédéfinie `divmod()` :
%% Cell type:code id: tags:
``` python
x=divmod(20,3)
print(x[0])
print(x[1])
(q,r)=divmod(20,3)
print(q)
```
%% Cell type:markdown id: tags:
`divmod` renvoie la paire (`q`, `r`) où q est le quotient et r le reste.
## ✏️ Exercice : décomposition d'un montant <a name="ex_decomposition_montant"></a>
Écrire un programme afin d'aider les caissiers et caissières d'un magasin à minimiser le nombre de pièces et de billets lorsqu'ils et elles rendent la monnaie. Par exemple, 58 € se décompose en 1 billet de 50 €, 1 billet de 5 €, 1 pièce de 2 € et 1 pièce de 1 €. Pour simplifier, on ne va considérer que les montants sans centimes. Les caissiers et caissières disposent des billets et des pièces suivants : 50, 20, 10, 5, 2 et 1 €.
Écrire un programme qui convertit un entier compris entre 1 et 3 999 sous forme de nombre romain.
La numérotation romaine dispose des 7 symboles suivants :
| Symbole | Valeur |
| ------- | ------ |
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
Un nombre romain est composé suivant les règles suivantes :
* Les symboles sont écrits du plus grand au plus petit et leur valeur s'ajoute. Par exemple, 123 s'écrit C XX III
* Il n'est pas possible d'utiliser plus de trois symboles identiques à la suite : on utilise alors la notation soustractive. Dans ce cas, un symbole placé directement avant un symbole plus grand lui est retranché. Par exemple, 400 s'écrit CD au lieu de CCCC
Vous pouvez vérifier les conversions sur le site suivant : https://www.periodni.com/fr/convertisseur_chiffres_romains.html
**Indice 1 :**
Utilisez deux listes, l'une pour les symboles et l'autre pour les valeurs correspondantes :