Kaynağa Gözat

Update notes

master
Dimitri Merejkowsky 5 yıl önce
ebeveyn
işleme
1e1d67f999
4 değiştirilmiş dosya ile 20 ekleme ve 179 silme
  1. +0
    -70
      fragments/files.md
  2. +0
    -103
      fragments/sort.md
  3. +1
    -2
      notes.md
  4. +19
    -4
      sources/hangman/scores.py

+ 0
- 70
fragments/files.md Dosyayı Görüntüle

@@ -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)

+ 0
- 103
fragments/sort.md Dosyayı Görüntüle

@@ -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)
```

+ 1
- 2
notes.md Dosyayı Görüntüle

@@ -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)



+ 19
- 4
sources/hangman/scores.py Dosyayı Görüntüle

@@ -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()