diff --git a/fragments/files.md b/fragments/files.md deleted file mode 100644 index 491ebf8..0000000 --- a/fragments/files.md +++ /dev/null @@ -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) diff --git a/fragments/sort.md b/fragments/sort.md deleted file mode 100644 index f34adad..0000000 --- a/fragments/sort.md +++ /dev/null @@ -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) -``` diff --git a/notes.md b/notes.md index 4164f80..40dc52c 100644 --- a/notes.md +++ b/notes.md @@ -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) diff --git a/sources/hangman/scores.py b/sources/hangman/scores.py index 006215e..c3a8a9e 100644 --- a/sources/hangman/scores.py +++ b/sources/hangman/scores.py @@ -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()