Skip to content
Commits on Source (4)
%% Cell type:markdown id: tags:
## Types de données
Nombre entier (int): `150`
Nombre à virgule flottante (float): `1.123`
Chaîne de caractères (str): `"Il fait beau et chaud"`
Liste (list): `[102, 301, 302]`
Dictionnaire (dict): `{"name": "Patrick"}`
%% Cell type:markdown id: tags:
## Variables
Créer une variable:
`index = 1`
`name = "Patrice"`
`mylist = ["a", "b", "c"]`
%% Cell type:markdown id: tags:
## Conversions
%% Cell type:code id: tags:
``` python
int(40.1)
float("40.25")
str(42)
```
%% Output
'42'
%% Cell type:markdown id: tags:
## Listes
On utilise les parenthèses carrées (brackets): `[...]`
`students = ["Pierre", "Maud", "Julie"]`
Ajouter un élément: `students.append("René")`
Accéder au 1er élément: `students[0]`
Accéder au dernier élément: `students[-1]`
%% Cell type:markdown id: tags:
## If-else
%% Cell type:code id: tags:
``` python
price = 50
sale = 60
if price <= 20:
sale = 20
elif price <= 50:
sale = 40
else:
sale = 60
new_price = price - (price * sale / 100)
print(
"Pour un produit à " + str(50) + " CHF, la réduction est de " + str(sale) + "%, ce qui donne: " + str(new_price) + " CHF"
)
```
%% Output
Pour un produit à 50 CHF, la réduction est de 40%, ce qui donne: 30.0 CHF
%% Cell type:markdown id: tags:
## print() et f-strings
%% Cell type:code id: tags:
``` python
nombre = 13.5
texte = f"Le produit coûte {nombre} CHF."
print(texte)
```
%% Output
Le produit coûte 13.5 CHF.
%% Cell type:code id: tags:
``` python
print("Le produit coûte", nombre, "CHF")
```
%% Output
Le produit coûte 13.5 CHF
%% Cell type:code id: tags:
``` python
print("Ce texte n’est pas suivi d’un saut de ligne", end="... ")
print("Ce texte n’est pas suivi d’un saut de ligne", end="... ")
```
%% Output
Ce texte n’est pas suivi d’un saut de ligne... Ce texte n’est pas suivi d’un saut de ligne...
%% Cell type:code id: tags:
``` python
print("Chargement des fichiers:")
for i in range(0, 10):
print(".", end="")
print("OK!")
```
%% Output
Chargement des fichiers:
..........OK!
%% Cell type:markdown id: tags:
# Listes: la suite
%% Cell type:markdown id: tags:
On a déjà vu des listes: elles permettent d’enregistrer plusieurs valeurs en une fois. Par exemple, nous enregistrons ici une liste de quatre étudiants:
%% Cell type:code id: tags:
``` python
students = ["Georges", "Monique", "Eric", "Françoise"]
last_student = students.pop()
print(last_student)
print(students)
```
%% Cell type:markdown id: tags:
On peut sélectionner un élément de la liste depuis le début, en partant de zéro:
%% Cell type:code id: tags:
``` python
print("Le premier étudiant de la liste est", students[0])
```
%% Cell type:code id: tags:
``` python
print("La deuxième est", students[1])
```
%% Cell type:markdown id: tags:
## Compter depuis la fin
%% Cell type:code id: tags:
``` python
# dernier élément
print(students[-1])
# 2e élément depuis la fin
print(students[-2])
```
%% Cell type:markdown id: tags:
### Opérateurs pour les listes
%% Cell type:markdown id: tags:
Avec l’opérateur `+`, on peut joindre deux listes!
%% Cell type:code id: tags:
``` python
students = ["Georges", "Monique", "Eric", "Françoise"] + ["ABCDEF"]
print(students)
```
%% Cell type:markdown id: tags:
### Effacer l’élément à l’index `i`
%% Cell type:markdown id: tags:
La commande `del` efface une entrée de la liste. Mais il faut se rappeler qu’on commence la numérotation à 0. Donc ici, pour effacer le 4e élément, on compte 0, 1, 2, `[3]`.
%% Cell type:code id: tags:
``` python
students = ['Georges', 'Monique', 'Eric', 'Françoise', 'ABCDEF']
del students[3]
print(students)
```
%% Cell type:markdown id: tags:
### Retirer un élément de la liste selon sa valeur
%% Cell type:markdown id: tags:
La méthode `.remove()` supprime un élément d’après sa valeur. Ici, on enlève la première valeur «Monique». Seul le premier élément trouvé est enlevé.
%% Cell type:code id: tags:
``` python
students = ['Georges', 'Monique', 'Eric', 'Françoise', 'ABCDEF', 'Monique', 'Monique']
students.remove("Monique")
print(students)
```
%% Cell type:markdown id: tags:
## “List Comprehensions”
Python propose une manière simplifiée de traiter les éléments d’une liste en boucle: la **liste en compréhension**. C’est-à-dire une liste définie à partir d’une autre liste. Voici deux variantes d’un code qui calcule le carré des éléments d’une liste:
%% Cell type:code id: tags:
``` python
# Notre liste de départ
xs = [1, 2, 3, 4, 5, 6, 7, 8]
# Puissance 2 avec une boucle “for”
ys = []
for x in xs:
ys.append(x ** 2)
```
%% Cell type:code id: tags:
``` python
# Avec une “List Comprehension”
ys = [x ** 2 for x in xs]
print(xs)
print(ys)
```
%% Cell type:markdown id: tags:
## Exercice
Comptez le nombre de lettres de chaque nom à l’aide d’une *List Comprehension*.
%% Cell type:code id: tags:
``` python
students = ['Georges', 'Monique', 'Eric', 'Françoise']
# Boucle for:
lengths = []
for student in students:
lengths.append(len(student))
# Votre code ici
# …
print(lengths)
```
%% Cell type:markdown id: tags:
## Imbriquer les listes
Une liste peut contenir d’autres listes. Cela permet par exemple de construire une matrice:
%% Cell type:code id: tags:
``` python
cities = [
["Berlin", "Lausanne", "La Tchaux"],
["Budapest", "Saint-Oyens", "Rome"]
]
```
%% Cell type:code id: tags:
``` python
cities[0][0]
```
%% Cell type:markdown id: tags:
## Exercice
A qui Max envoie-t-il des lettres?
- Parcourez la liste et trouvez quand Max est en première position
- Enregistrez ensuite les noms en 2e position dans la liste max_recipients
%% Cell type:code id: tags:
``` python
max_recipients = []
sender_and_recipient = [
["Max", "Susi"],
["Susi", "Julia"],
["Julia", "Franz"],
["Max", "Franz"],
["Franz", "Julia"],
["Max", "Lila"]
]
#for ... votre code ici
```
%% Cell type:markdown id: tags:
## Trier des listes
Vous aurez souvent besoin de trier des listes. Python propose une fonction pour ce faire. Mais on peut également modifier le système de tri à sa guise.
%% Cell type:code id: tags:
``` python
l = ['Georges', 'Monique', 'Eric', 'Françoise']
l.sort()
print(l)
```
%% Cell type:code id: tags:
``` python
l = ['Georges', 'Monique', 'Eric', 'Françoise']
l.sort(reverse=True)
print(l)
```
%% Cell type:markdown id: tags:
#### Utiliser sa propre fonction
%% Cell type:code id: tags:
``` python
l = ["Max", "Monika", "Erik", "Franziska"]
def get_length(item):
return len(item)
l.sort(key=get_length)
print(l)
```
%% Cell type:markdown id: tags:
## Exercice
Triez les noms pour qu’ils ne soient pas triés selon leur première lettre, mais selon leur dernière lettre
%% Cell type:code id: tags:
``` python
l = ['Georges', 'Monique', 'Eric', 'Françoise']
def get_last_letter(item)
# votre code ici
l.sort(key=get_last_letter)
print(l)
```
%% Cell type:markdown id: tags:
## Les dictionnaires en Python
Les dictionnaires sont incroyablement pratiques pour associer une clé et une valeur. Voici un exemple:
%% Cell type:code id: tags:
``` python
d = {"Berlin": "BER", "Helsinki": "HEL", "Saigon": "SGN"}
```
%% Cell type:code id: tags:
``` python
print(d)
```
%% Output
{'Berlin': 'BER', 'Helsinki': 'HEL', 'Saigon': 'SGN'}
%% Cell type:markdown id: tags:
On accède à un des éléments ainsi:
%% Cell type:code id: tags:
``` python
print(d["Helsinki"])
```
%% Output
HEL
%% Cell type:markdown id: tags:
Et voici comment on modifie un élément:
%% Cell type:code id: tags:
``` python
d["Budapest"] = "BUD"
```
%% Cell type:code id: tags:
``` python
print(d)
```
%% Output
{'Berlin': 'BER', 'Helsinki': 'HEL', 'Saigon': 'SGN', 'Budapest': 'BUD'}
%% Cell type:markdown id: tags:
## Exercice
%% Cell type:markdown id: tags:
Créez un dictionnaire contenant les aéroports suisses et leur abréviation.
%% Cell type:markdown id: tags:
## Enlever un élément
%% Cell type:code id: tags:
``` python
del d["Budapest"]
```
%% Cell type:code id: tags:
``` python
print(d)
```
%% Output
{'Berlin': 'BER', 'Helsinki': 'HEL', 'Saigon': 'SGN'}
%% Cell type:markdown id: tags:
## Un élément fait-il partie du dictionnaire?
%% Cell type:code id: tags:
``` python
if "Budapest" in d:
print("Budapest est contenu dans le dictionnaire")
if "Saigon" in d:
print("Saigon est contenu dans le dictionnaire")
```
%% Output
Saigon est contenu dans le dictionnaire
%% Cell type:markdown id: tags:
## Plusieurs manières d’accéder à un élément…
%% Cell type:code id: tags:
``` python
print(d["Saigon"])
print(d.get("Saigon"))
```
%% Output
SGN
SGN
%% Cell type:markdown id: tags:
Pourquoi utiliser get? La réponse est simple: il tolère les erreurs.
%% Cell type:code id: tags:
``` python
print(d["Budapest"])
```
%% Output
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-a5640edcb8ab> in <module>
----> 1 print(d["Budapest"])
KeyError: 'Budapest'
%% Cell type:code id: tags:
``` python
print(d.get("Budapest"))
```
%% Output
None
%% Cell type:markdown id: tags:
## Dictionnaires et boucles
Avec les dictionnaires, vous avez deux options pour les parcourir avec une boucle `for`.
Soit directement, en employant les clés:
%% Cell type:code id: tags:
``` python
d = {"München": "MUC", "Budapest": "BUD", "Helsinki": "HEL"}
for key in d:
value = d[key]
print(key)
print(value)
```
%% Output
München
MUC
Budapest
BUD
Helsinki
HEL
%% Cell type:markdown id: tags:
Soit en employant la méthode `.items()`, pour parcourir directement chaque paire clé-valeur:
%% Cell type:code id: tags:
``` python
for key, value in d.items():
print(key + ": " + value)
```
%% Output
München: MUC
Budapest: BUD
Helsinki: HEL
%% Cell type:markdown id: tags:
## Exercice
Combien de fois est répété chaque mot de cette liste?
%% Cell type:code id: tags:
``` python
words = ["Hello", "Hello", "Soleil", "Hello", "Mars"]
d = {}
for element in words:
# votre code ici
print(d)
```
%% Cell type:markdown id: tags:
## Exercice hardcore
%% Cell type:markdown id: tags:
Si vous avez envie d’un défi, on peut s’entraîner avec ce jeu de données: http://p3.snf.ch/Pages/DataAndDocumentation.aspx On va le charger directement en Python, à l’aide des modules `requests` et `csv`. (On verra bientôt une manière nettement plus puissante de charger et manipuler ces fichiers, mais chaque chose en son temps.)
%% Cell type:code id: tags:
``` python
import requests
import csv
```
%% Cell type:code id: tags:
``` python
# Le chargement peut mettre du temps: gros fichier
data = requests.get("http://p3.snf.ch/P3Export/P3_PersonExport.csv").text.splitlines()
```
%% Cell type:code id: tags:
``` python
people = list(csv.DictReader(data,delimiter=';'))
```
%% Cell type:markdown id: tags:
### Voici à quoi ça ressemble
C’est une liste de dictionnaires, dont voici les deux premiers éléments sur 8000:
%% Cell type:code id: tags:
``` python
people[:2]
```
%% Output
[{'Last Name': 'a Marca',
'First Name': 'Davide',
'Gender': 'male',
'Institute Name': '',
'Institute Place': '',
'Person ID SNSF': '53856',
'OCRID': '',
'Projects as responsible Applicant': '',
'Projects as Applicant': '',
'Projects as Partner': '',
'Projects as Practice Partner': '',
'Projects as Employee': '36549',
'Projects as Contact Person': ''},
{'Last Name': 'a Marca',
'First Name': 'Andrea',
'Gender': 'male',
'Institute Name': '',
'Institute Place': '',
'Person ID SNSF': '132628',
'OCRID': '',
'Projects as responsible Applicant': '67368',
'Projects as Applicant': '',
'Projects as Partner': '',
'Projects as Practice Partner': '',
'Projects as Employee': '',
'Projects as Contact Person': ''}]
%% Cell type:markdown id: tags:
### Quels instituts ont le plus de personnes impliquées?
%% Cell type:code id: tags:
``` python
institutes = {}
for row in people:
# votre code ici
print(row)
# à enlever quand vous êtes sûr de votre coup: people compte 7393 enregistrements…
break
```
%% Output
{'Last Name': 'a Marca', 'First Name': 'Davide', 'Gender': 'male', 'Institute Name': '', 'Institute Place': '', 'Person ID SNSF': '53856', 'OCRID': '', 'Projects as responsible Applicant': '', 'Projects as Applicant': '', 'Projects as Partner': '', 'Projects as Practice Partner': '', 'Projects as Employee': '36549', 'Projects as Contact Person': ''}