| @@ -0,0 +1,108 @@ | |||||
| Principes fondamentaux | |||||
| ====================== | |||||
| Définition | |||||
| ---------- | |||||
| Une liste est une *suite ordonnée* d'éléments. | |||||
| Créer une liste | |||||
| --------------- | |||||
| Avec des crochets: ``[``, ``]``, et les éléments séparés par des virgules:: | |||||
| liste_vide = [] | |||||
| trois_entiers = [1, 2, 3] | |||||
| Listes hétérogènes | |||||
| ------------------ | |||||
| On peut mettre des types différents dans la même liste:: | |||||
| ma_liste = [True, 2, "trois"] | |||||
| On peut aussi mettre des listes dans des listes:: | |||||
| liste_de_listes = [[1, 2], ["Germaine", "Gertrude"]] | |||||
| Connaître la taille d'une liste | |||||
| ------------------------------- | |||||
| Avec ``len()`` - encore une fonction native:: | |||||
| liste_vide = [] | |||||
| taille = len(liste_vide) | |||||
| print(taille) | |||||
| # affiche: 0 | |||||
| trois_entiers = [1, 2, 3] | |||||
| taille = len(trois_entiers) | |||||
| print(taille) | |||||
| # affiche: 3 | |||||
| Concaténation de listes | |||||
| ----------------------- | |||||
| Avec ``+``:: | |||||
| prénoms = ["Alice", "Bob"] | |||||
| prénoms += ["Charlie", "Eve"] | |||||
| print(prénoms) | |||||
| # affiche: ['Alice', 'Bob', "Charlie", 'Eve'] | |||||
| On ne peut concaténer des listes que avec d'autres listes:: | |||||
| scores = [1, 2, 3] | |||||
| scores += 4 | |||||
| # erreur | |||||
| scores += [4] | |||||
| print(scores) | |||||
| # affiche: [1,2,3,4] | |||||
| Test d'appartenance | |||||
| ------------------- | |||||
| Avec ``in``:: | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Alice" in prénoms) | |||||
| # affiche: True | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Charlie" in prénoms) | |||||
| # affiche: False | |||||
| Modifier une liste | |||||
| ------------------- | |||||
| Encore une assignation:: | |||||
| fruits = ["pomme", "orange", "poire"] | |||||
| fruits[0] = "abricot" | |||||
| print(fruits) | |||||
| # affiche: ["abricot", "orange", "poire"] | |||||
| Indéxer une liste | |||||
| ------------------ | |||||
| * Avec ``[]`` et un entier | |||||
| * Les index valides vont de 0 à ``n-1`` où ``n`` est la | |||||
| taille de la liste:: | |||||
| fruits = ["pomme", "orange", "poire"] | |||||
| print(fruits[0]) | |||||
| # affiche: "pomme" | |||||
| print(fruits[1]) | |||||
| # affiche: "orange" | |||||
| print(list[2]) | |||||
| # affiche: "poire" | |||||
| fruits[3] | |||||
| # erreur: IndexError | |||||
| @@ -0,0 +1,76 @@ | |||||
| Itération | |||||
| ========= | |||||
| Itérer sur les éléments d'une liste | |||||
| ------------------------------------ | |||||
| Avec les mots-clés ``for`` et `` in``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| # Chaque élément de la liste est assigné tour à tour | |||||
| # à la variable 'prénom" | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Bob | |||||
| Bonjour Charlie | |||||
| break | |||||
| ----- | |||||
| Comme pour les boucles `while`, on peut interrompre la boucle `for` avec `break`:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| if prénom == "Bob": | |||||
| break | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Charlie | |||||
| continue | |||||
| -------- | |||||
| On peut interrompre l'exécution *du bloc courant* (et uniqument le | |||||
| bloc courant) avec le mot-clé ``continue``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| if prénom == "Bob": | |||||
| continue | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Charlie | |||||
| Indéxer une liste | |||||
| ------------------ | |||||
| * Avec ``[]`` et un entier | |||||
| * Les index valides vont de 0 à ``n-1`` où ``n`` est la | |||||
| taille de la liste:: | |||||
| fruits = ["pomme", "orange", "poire"] | |||||
| print(fruits[0]) | |||||
| # affiche: "pomme" | |||||
| print(fruits[1]) | |||||
| # affiche: "orange" | |||||
| print(list[2]) | |||||
| # affiche: "poire" | |||||
| fruits[3] | |||||
| # erreur: IndexError | |||||
| @@ -0,0 +1,40 @@ | |||||
| Relation avec les strings | |||||
| ========================= | |||||
| Les strings sont aussi des listes (presque). | |||||
| On peut itérer sur les caractères d'une string:: | |||||
| for c in "vache": | |||||
| print(c) | |||||
| .. code-block: console | |||||
| v | |||||
| a | |||||
| c | |||||
| h | |||||
| e | |||||
| On peut tester si un caractère est présent:: | |||||
| print("e" in "vache") | |||||
| # affiche: True | |||||
| print(x" in "vache") | |||||
| # affiche: False | |||||
| Mais on ne peut pas modifier une string:: | |||||
| prénom = "Charlotte" | |||||
| l = prénom[0] | |||||
| print(l) | |||||
| # affiche: "C" | |||||
| l = prénom[3] | |||||
| print(l) | |||||
| # affiche: "r" | |||||
| prénom[0] = "X" | |||||
| # erreur: TypeError | |||||
| @@ -0,0 +1,48 @@ | |||||
| Listes et booléens | |||||
| ================== | |||||
| Falsy et truthy | |||||
| ---------------- | |||||
| Si on met une liste vide, ``if`` se comportera comme si on avait mis une valeur fausse, et si | |||||
| la liste n'est pas vide , ``if`` se comportera comme si on avait mis une valeur vraie.:: | |||||
| ma_liste = [1, 2, 3] | |||||
| if ma_liste: | |||||
| print("ma_liste n'est pas vide") | |||||
| # affiche: ma_liste n'est pas vide | |||||
| mon_autre_liste = [] | |||||
| if not mon_autre_liste: | |||||
| print("mon_autre_liste est vide") | |||||
| # affiche: mon_autre_liste est vide | |||||
| On dit que les listes vides sont *Falsy* et les listes non-vides *Truthy* | |||||
| Test d'appartenance | |||||
| ------------------- | |||||
| On peut tester si un élément est dans une liste avec le mot-clé ``in``:: | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Alice" in prénoms) | |||||
| # affiche: True | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Charlie" in prénoms) | |||||
| # affiche: False | |||||
| Comparaisons de listes | |||||
| ----------------------- | |||||
| On peut utiliser l'opérateur ``==`` avec deux listes de part et | |||||
| d'autres. Les listes seront considérées comme égales si | |||||
| * Elles ont la même taille | |||||
| * Tous leurs éléments sont égaux un à un en respectant l'ordre:: | |||||
| [1] == [2] # False | |||||
| [1, 2] == [2, 1] # False | |||||
| [1, 2] == [1, 2] # True | |||||
| @@ -0,0 +1,50 @@ | |||||
| Exercice | |||||
| ======== | |||||
| Le but de l'exercice est d'implémenter le jeu du pendu. | |||||
| Voila à quoi une session de jeu doit ressembler: | |||||
| .. code-block:: text | |||||
| ______ | |||||
| entrer une lettre | |||||
| e | |||||
| _____e | |||||
| entrer une lettre | |||||
| a | |||||
| _a___e | |||||
| entrer une lettre | |||||
| u | |||||
| _au__e | |||||
| entrer une lettre | |||||
| q | |||||
| _au__e | |||||
| entrer une lettre | |||||
| c | |||||
| _auc_e | |||||
| entrer une lettre | |||||
| h | |||||
| _auche | |||||
| entrer une lettre | |||||
| g | |||||
| gauche | |||||
| Gagné | |||||
| Consignes | |||||
| --------- | |||||
| * Télécharger les fichiers ``pendu.py`` et ``mots.txt`` | |||||
| * S'assurer que le code fonctionne en lançant ``python3 pendu.py`` | |||||
| * À ce stade, vous devriez constater plusieurs problèmes: | |||||
| * Au lieu d'avoir un mot au hasard, le mot à deviner est toujours "accord" | |||||
| * Au lieu d'afficher un indice, le code affiche une liste de tentatives | |||||
| * Le jeu est impossible à gagner parce que la fonction `a_gagné` renvoie toujours False | |||||
| Le but de l'exercice est de corriger ces 3 problèmes. | |||||
| @@ -1,232 +1,14 @@ | |||||
| Chapitre 6 - Listes | Chapitre 6 - Listes | ||||
| =================== | =================== | ||||
| Définition | |||||
| ---------- | |||||
| .. toctree:: | |||||
| :maxdepth: 1 | |||||
| Une liste est une *suite ordonnée* d'éléments. | |||||
| ./01-bases.rst | |||||
| ./02-iteration.rst | |||||
| ./03-strings.rst | |||||
| ./04-booléens.rst | |||||
| ./05-exercice.rst | |||||
| Créer une liste | |||||
| --------------- | |||||
| Avec des crochets: ``[``, ``]``, et les éléments séparés par des virgules:: | |||||
| liste_vide = [] | |||||
| trois_entiers = [1, 2, 3] | |||||
| Listes hétérogènes | |||||
| ------------------ | |||||
| On peut mettre des types différents dans la même liste:: | |||||
| ma_liste = [True, 2, "trois"] | |||||
| On peut aussi mettre des listes dans des listes:: | |||||
| liste_de_listes = [[1, 2], ["Germaine", "Gertrude"]] | |||||
| Connaître la taille d'une liste | |||||
| ------------------------------- | |||||
| Avec ``len()`` - encore une fonction native:: | |||||
| liste_vide = [] | |||||
| taille = len(liste_vide) | |||||
| print(taille) | |||||
| # affiche: 0 | |||||
| trois_entiers = [1, 2, 3] | |||||
| taille = len(trois_entiers) | |||||
| print(taille) | |||||
| # affiche: 3 | |||||
| Concaténation de listes | |||||
| ----------------------- | |||||
| Avec ``+``:: | |||||
| prénoms = ["Alice", "Bob"] | |||||
| prénoms += ["Charlie", "Eve"] | |||||
| print(prénoms) | |||||
| # affiche: ['Alice', 'Bob', "Charlie", 'Eve'] | |||||
| On ne peut concaténer des listes que avec d'autres listes:: | |||||
| scores = [1, 2, 3] | |||||
| scores += 4 | |||||
| # erreur | |||||
| scores += [4] | |||||
| print(scores) | |||||
| # affiche: [1,2,3,4] | |||||
| Test d'appartenance | |||||
| ------------------- | |||||
| Avec ``in``:: | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Alice" in prénoms) | |||||
| # affiche: True | |||||
| prénoms = ["Alice", "Bob"] | |||||
| print("Charlie" in prénoms) | |||||
| # affiche: False | |||||
| Itérer sur les éléments d'une liste | |||||
| ------------------------------------ | |||||
| Avec les mots-clés ``for`` et `` in``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| # Chaque élément de la liste est assigné tour à tour | |||||
| # à la variable 'prénom" | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Bob | |||||
| Bonjour Charlie | |||||
| break | |||||
| ----- | |||||
| Comme pour les boucles `while`, on peut interrompre la boucle `for` avec `break`:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| if prénom == "Bob": | |||||
| break | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Charlie | |||||
| continue | |||||
| -------- | |||||
| On peut interrompre l'exécution *du bloc courant* (et uniqument le | |||||
| bloc courant) avec le mot-clé ``continue``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| if prénom == "Bob": | |||||
| continue | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Charlie | |||||
| Indéxer une liste | |||||
| ------------------ | |||||
| * Avec ``[]`` et un entier | |||||
| * Les index valides vont de 0 à ``n-1`` où ``n`` est la | |||||
| taille de la liste:: | |||||
| fruits = ["pomme", "orange", "poire"] | |||||
| print(fruits[0]) | |||||
| # affiche: "pomme" | |||||
| print(fruits[1]) | |||||
| # affiche: "orange" | |||||
| print(list[2]) | |||||
| # affiche: "poire" | |||||
| fruits[3] | |||||
| # erreur: IndexError | |||||
| Modifier une liste | |||||
| ------------------- | |||||
| Encore une assignation:: | |||||
| fruits = ["pomme", "orange", "poire"] | |||||
| fruits[0] = "abricot" | |||||
| print(fruits) | |||||
| # affiche: ["abricot", "orange", "poire"] | |||||
| Les strings sont aussi des listes (presque) | |||||
| -------------------------------------------- | |||||
| On peut itérer sur les caractères d'une string:: | |||||
| for c in "vache": | |||||
| print(c) | |||||
| .. code-block: console | |||||
| v | |||||
| a | |||||
| c | |||||
| h | |||||
| e | |||||
| On peut tester si un caractère est présent:: | |||||
| print("e" in "vache") | |||||
| # affiche: True | |||||
| print(x" in "vache") | |||||
| # affiche: False | |||||
| Mais on ne peut pas modifier une string:: | |||||
| prénom = "Charlotte" | |||||
| l = prénom[0] | |||||
| print(l) | |||||
| # affiche: "C" | |||||
| l = prénom[3] | |||||
| print(l) | |||||
| # affiche: "r" | |||||
| prénom[0] = "X" | |||||
| # erreur: TypeError | |||||
| Falsy et truthy | |||||
| ---------------- | |||||
| En réalité on peut mettre autre chose qu'une comparaison ou une variable booléenne après le if. | |||||
| Si on met une liste vide, ``if`` se comportera comme si on avait mis une valeur fausse, et si | |||||
| la liste n'est pas vide , ``if`` se comportera comme si on avait mis une valeur vraie.:: | |||||
| ma_liste = [1, 2, 3] | |||||
| if ma_liste: | |||||
| print("ma_liste n'est pas vide") | |||||
| # affiche: ma_liste n'est pas vide | |||||
| mon_autre_liste = [] | |||||
| if not mon_autre_liste: | |||||
| print("mon_autre_liste est vide") | |||||
| # affiche: mon_autre_liste est vide | |||||
| On dit que les listes vides sont *Falsy* et les listes non-vides *Truthy* | |||||
| Comparaisons de listes | |||||
| ----------------------- | |||||
| On peut utiliser l'opérateur ``==`` avec deux listes de part et | |||||
| d'autres. Les listes seront considérées comme égales si | |||||
| * Elles ont la même taille | |||||
| * Tous leurs éléments sont égaux un à un en respectant l'ordre:: | |||||
| [1] == [2] # False | |||||
| [1, 2] == [2, 1] # False | |||||
| [1, 2] == [1, 2] # True | |||||
| @@ -0,0 +1,241 @@ | |||||
| accord | |||||
| affaire | |||||
| agent | |||||
| aide | |||||
| amour | |||||
| appel | |||||
| arbre | |||||
| argent | |||||
| arme | |||||
| attention | |||||
| avenir | |||||
| avion | |||||
| avis | |||||
| balle | |||||
| bateau | |||||
| besoin | |||||
| bois | |||||
| bonheur | |||||
| bonjour | |||||
| bord | |||||
| bouche | |||||
| boulot | |||||
| bout | |||||
| bras | |||||
| bruit | |||||
| bureau | |||||
| camp | |||||
| capitaine | |||||
| carte | |||||
| cause | |||||
| chambre | |||||
| chance | |||||
| chat | |||||
| chef | |||||
| chemin | |||||
| cheval | |||||
| cheveu | |||||
| chien | |||||
| choix | |||||
| chose | |||||
| ciel | |||||
| classe | |||||
| client | |||||
| coin | |||||
| colonel | |||||
| compte | |||||
| confiance | |||||
| copain | |||||
| corps | |||||
| couleur | |||||
| coup | |||||
| cour | |||||
| courant | |||||
| cours | |||||
| cuisine | |||||
| dame | |||||
| dent | |||||
| dieu | |||||
| docteur | |||||
| doigt | |||||
| dollar | |||||
| doute | |||||
| droit | |||||
| droite | |||||
| effet | |||||
| endroit | |||||
| enfant | |||||
| ennemi | |||||
| envie | |||||
| erreur | |||||
| escalier | |||||
| esprit | |||||
| exemple | |||||
| face | |||||
| faim | |||||
| fait | |||||
| famille | |||||
| faute | |||||
| femme | |||||
| fille | |||||
| film | |||||
| fils | |||||
| fleur | |||||
| flic | |||||
| fois | |||||
| fond | |||||
| force | |||||
| forme | |||||
| front | |||||
| garde | |||||
| gars | |||||
| gauche | |||||
| genre | |||||
| gens | |||||
| geste | |||||
| gosse | |||||
| gouvernement | |||||
| grand | |||||
| groupe | |||||
| guerre | |||||
| gueule | |||||
| habitude | |||||
| haut | |||||
| heure | |||||
| histoire | |||||
| homme | |||||
| honneur | |||||
| image | |||||
| impression | |||||
| instant | |||||
| jambe | |||||
| jardin | |||||
| joie | |||||
| jour | |||||
| journal | |||||
| langue | |||||
| lettre | |||||
| lieu | |||||
| ligne | |||||
| livre | |||||
| long | |||||
| madame | |||||
| main | |||||
| maison | |||||
| maman | |||||
| marche | |||||
| mari | |||||
| mariage | |||||
| matin | |||||
| merci | |||||
| merde | |||||
| milieu | |||||
| million | |||||
| minute | |||||
| mois | |||||
| moment | |||||
| monde | |||||
| monsieur | |||||
| mort | |||||
| mouvement | |||||
| moyen | |||||
| musique | |||||
| noir | |||||
| nouveau | |||||
| nuit | |||||
| odeur | |||||
| oeil | |||||
| oiseau | |||||
| ombre | |||||
| oncle | |||||
| ordre | |||||
| oreille | |||||
| paix | |||||
| papa | |||||
| papier | |||||
| parent | |||||
| parole | |||||
| part | |||||
| partie | |||||
| passage | |||||
| patron | |||||
| pays | |||||
| peau | |||||
| peine | |||||
| personne | |||||
| petit | |||||
| peuple | |||||
| peur | |||||
| photo | |||||
| pied | |||||
| pierre | |||||
| place | |||||
| plaisir | |||||
| plan | |||||
| poche | |||||
| point | |||||
| police | |||||
| porte | |||||
| pouvoir | |||||
| premier | |||||
| prince | |||||
| prison | |||||
| prix | |||||
| professeur | |||||
| propos | |||||
| putain | |||||
| quartier | |||||
| question | |||||
| raison | |||||
| rapport | |||||
| regard | |||||
| reste | |||||
| retard | |||||
| retour | |||||
| revoir | |||||
| robe | |||||
| route | |||||
| salle | |||||
| salut | |||||
| sang | |||||
| seconde | |||||
| secret | |||||
| seigneur | |||||
| semaine | |||||
| sens | |||||
| sentiment | |||||
| service | |||||
| seul | |||||
| signe | |||||
| silence | |||||
| situation | |||||
| soeur | |||||
| soir | |||||
| soldat | |||||
| soleil | |||||
| sorte | |||||
| sourire | |||||
| souvenir | |||||
| suite | |||||
| sujet | |||||
| table | |||||
| temps | |||||
| terre | |||||
| tour | |||||
| tout | |||||
| train | |||||
| travail | |||||
| travers | |||||
| trou | |||||
| truc | |||||
| type | |||||
| vent | |||||
| ventre | |||||
| verre | |||||
| vieux | |||||
| village | |||||
| ville | |||||
| visage | |||||
| voiture | |||||
| voix | |||||
| voyage | |||||
| @@ -0,0 +1,50 @@ | |||||
| import random | |||||
| def lire_mots(): | |||||
| fichier = open("mots.txt") | |||||
| contenu = fichier.read() | |||||
| fichier.close() | |||||
| mots = contenu.splitlines() | |||||
| return mots | |||||
| def choisir_mot_au_hasard(mots): | |||||
| taille = len(mots) | |||||
| index = random.randint(0, taille) | |||||
| return mots[0] | |||||
| def jouer(): | |||||
| mots = lire_mots() | |||||
| mot = choisir_mot_au_hasard(mots) | |||||
| # pour débugger, il faudra enlever cet | |||||
| # appel à print une fois le code terminé | |||||
| print("Le mot à deviner est", mot) | |||||
| tentatives = [] | |||||
| while True: | |||||
| afficher_indice(mot, tentatives) | |||||
| lettre = demander_lettre() | |||||
| if lettre not in tentatives: | |||||
| tentatives += [lettre] | |||||
| if a_gagné(mot, tentatives): | |||||
| print(mot) | |||||
| print("Gagné") | |||||
| break | |||||
| def a_gagné(mot, tentatives): | |||||
| return False | |||||
| def demander_lettre(): | |||||
| print("entrer une lettre") | |||||
| lettre = input() | |||||
| return lettre | |||||
| def afficher_indice(mot, tentatives): | |||||
| print("tentatives", tentatives) | |||||
| jouer() | |||||