| @@ -1,70 +0,0 @@ | |||
| \center \huge Lire et écrire des fichiers | |||
| # Rappel: lire | |||
| ```python | |||
| file = open("toto.txt", "r") # 'r' comme 'read' | |||
| contenu = file.read() | |||
| file.close() | |||
| ``` | |||
| Note: le fichier `toto.txt` doit exister! | |||
| # Écrire | |||
| On peut écrire tout le contenu d'un coup: | |||
| ```python | |||
| contenu = "du texte à sauvegarder" | |||
| file = open("article.txt", "w") # 'w' comme 'write' | |||
| file.write(contenu) | |||
| file.close() | |||
| ``` | |||
| * Le fichier `article.txt` sera écrasé s'il existe déjà. | |||
| * N'oubliez surtout pas d'appeler `close()` | |||
| # Que faire en cas d'erreur ? | |||
| ```python | |||
| file = open("article.txt", "w") # 'w' comme 'write' | |||
| # ... beacoup de code ici | |||
| # ... < une erreur | |||
| file.close() | |||
| ``` | |||
| S'il y a une erreur entre `open()` et `close()`, le fichier ne sera pas fermé! | |||
| # Le mot-clé with | |||
| ```python | |||
| with open("toto.txt", "w") as file: | |||
| file.write("du texte") | |||
| ``` | |||
| Quand on sort du bloc `with` on a la garantie que `file.close()` sera appelé, | |||
| *même* si on sort du bloc à cause d'une erreur. | |||
| # Convention | |||
| Il n'y a maintenant plus aucune raison d'appeler `.close()` "à la main", | |||
| donc ne le faites pas ... | |||
| # Lire et écrire des lignes | |||
| Très courant: | |||
| ```python | |||
| with open("toto.txt", "r") as file: | |||
| lignes = file.readlines() | |||
| # faire quelque chose avec la liste de lignes | |||
| with open("toto.txt", "w") as file: | |||
| file.writelines(lignes) | |||
| ``` | |||
| Pensez à fermer le premier fichier avant d'ouvrir le second. | |||
| (ça marche même s'ils ont le même nom) | |||
| @@ -1,103 +0,0 @@ | |||
| % notions: sort, lambdas, sort avec une fonction key() | |||
| # Trier des listes | |||
| # sort() - ordre naturel | |||
| ```python | |||
| >>> nombres = [2, 3, 1, 5] | |||
| >>> nombres.sort() | |||
| >>> nombres | |||
| [1, 2, 3, 5] | |||
| ``` | |||
| Notez que la liste est modifiée *sur place*. | |||
| # sort() - ordre alphabétique | |||
| ```python | |||
| >>> mots = ["abeille", "faucon", "chat"] | |||
| >>> mots.sort() | |||
| >>> mots | |||
| ['abeille', 'chat', 'faucon'] | |||
| ``` | |||
| # sort() - ordre lexicographique | |||
| Pour chaque "liste-élément" on compare le premier élément. | |||
| S'il y a égalité, on regarde le deuxième élément, etc: | |||
| ```python | |||
| >>> composite = [["chat", 1], ["abeille", 2], ["chat", 3]] | |||
| >>> composite.sort() | |||
| >>> composite | |||
| [['abeille', 2], ['chat', 1], ['chat', 3]] | |||
| ``` | |||
| L'ordre alphabétique est l'ordre lexicographique pour les chaînes de caractères :) | |||
| # Attention! | |||
| Tous les éléments de la liste doivent être comparables deux à deux: | |||
| \vfill | |||
| ```python | |||
| >>> mauvaise_liste = ["un", 2] | |||
| >>> mauvaise_liste.sort() | |||
| TypeError | |||
| ``` | |||
| # Comparer autrement | |||
| Exemple: trier les mots par leur taille avec l'argument `key` | |||
| \vfill | |||
| ```python | |||
| def taille(mot): | |||
| return len(mot) | |||
| mots = ["chat", "abeille", "faucon"] | |||
| mots.sort(key=taille) | |||
| >>> mots | |||
| ["chat", "faucon", "abeille"] | |||
| ``` | |||
| # Lambda | |||
| Sert définir une fonction sans utiliser `def` | |||
| ```python | |||
| >>> retourne_42 = lambda: 42 # pas d'argument | |||
| >>> retourne_42() | |||
| 42 | |||
| >>> ajoute_deux = lambda x: x + 2 # un seul argument | |||
| >>> ajoute_deux(3) | |||
| 5 | |||
| >>> multiplie = lambda x, y: x* y # deux arguments | |||
| >>> multiplie(2, 3) | |||
| 6 | |||
| ``` | |||
| Note: le corps de la fonction doit tenir en une seule ligne | |||
| # Utilisation avec sort | |||
| ```python | |||
| >>> mots = ["chat", "abeille", "faucon"] | |||
| >>> mots.sort(key=lambda x: len(x)) | |||
| >>> mots | |||
| ["chat", "faucon", "abeille"] | |||
| ``` | |||
| # sorted() | |||
| ```python | |||
| b = a.copy() | |||
| b.sort() | |||
| # or | |||
| b = sorted(a) | |||
| ``` | |||
| @@ -3,9 +3,8 @@ Ce fichier contient diverses notes utiles à la préparation des futurs cours. | |||
| # Sujets à évoquer | |||
| * short circuit in if: `if a is not None and a.b == 42` | |||
| * [tris, lamdbas](fragments/sort.md) | |||
| * style: trailing white space, editor configuration | |||
| * [formatage de strings](fragments/format.md) | |||
| * [lecture / écriture de fichiers](fragments/sort.md) | |||
| * liste par compréhension et filtres | |||
| * `help()`, doc en ligne (également en français) | |||
| @@ -6,17 +6,32 @@ def parse_scores(): | |||
| res[name] = int(score) | |||
| return res | |||
| scores = { "joe" : 42, "jack" : 43 } | |||
| print (convert(scores)) | |||
| def print_scores(scores): | |||
| print("Tableau des résultats:") | |||
| for name, score in scores.items(): | |||
| print(name, score) | |||
| def register_score(scores, name, new_score): | |||
| pass | |||
| def convert(scores): | |||
| res = "" | |||
| for name, score in scores.items(): | |||
| res += name + " " + str(score) + "\n" | |||
| return res | |||
| def register_score(scores, name, new_score): | |||
| # Mise à jour des tableaux des scores | |||
| # Et écriture dans un fichier | |||
| scores[name] = new_score | |||
| with open("scores.txt", "w") as file: | |||
| file.write(convert(scores)) | |||
| def main(): | |||
| scores = parse_scores() | |||
| name = input("nom: ") | |||
| @@ -25,4 +40,4 @@ def main(): | |||
| print_scores(scores) | |||
| main() | |||
| main() | |||