Corrections Notebooks

Author

Ludovic Deneuville

Liste et dictionnaires

ex1

# Plusieurs manières de faire, par exemple

notes = ["do", "re", "re", "re", "fa", "sol", "solsi", "la"]

notes.pop(3)           # suppression par index
notes.pop(2)
notes.remove("solsi")  # suppression par valeur
notes.insert(2, "mi")  

notes
['do', 're', 'mi', 'fa', 'sol', 'la']

ex2

l = ["un", "deux", "trois", "quatre"]

# Inverse la liste sans la modifier
l_inv = list(reversed(l)) # cast en list
print(l_inv)

# Modifie la liste
l.reverse()
print(l)
['quatre', 'trois', 'deux', 'un']
['quatre', 'trois', 'deux', 'un']

ex3

entiers = [n for n in range(1, 10)]
print(entiers)

entiers.pop()
print(entiers)

entiers.pop(-1)
print(entiers)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7]

ex4

la = ["triangle", "carré", "Rectangle"]
print(max(la)) 
print(min(la)) 

# Pour les chaines de caractères, c'est ordonné par code ASCII

# Pas de notion d'ordre entre chaines de caractères et types numériques
triangle
Rectangle

ex5

type([])

# ex extraire les entiers positifs
relatifs = [1, 12, -20, 5, 8, -19, -2]

positifs = []

for z in relatifs:
    if z >= 0:
        positifs.append(z)

print(positifs)
[1, 12, 5, 8]

ex6

🚧 TODO : faire sans boucle

resultats = {
    "6emeA": {"Miranda" : {"notes": {"physique": 16, "histoire": 12}},
              "Celestin": {"notes": {"physique": "absent", "histoire": 18}}
             },
    "6emeB": {"Hypolyte": {"notes": {"maths": 11, "anglais": 0}},
              "Josephine": {"notes": {"maths": 16, "anglais": 20}}
             }
}

print(list(resultats.keys()))
print(resultats["6emeA"]["Miranda"]["notes"]["histoire"])
print(list(resultats["6emeB"]["Hypolyte"]["notes"].values()))
print(list(resultats["6emeB"].keys()))

matieres_6emeA = []
for eleve in resultats["6emeA"].values():
    matieres_6emeA += eleve["notes"].keys()
    
print(list(set(matieres_6emeA)))
['6emeA', '6emeB']
12
[11, 0]
['Hypolyte', 'Josephine']
['histoire', 'physique']

ex7

🚧 TODO : faire sans boucle

chaine = "Je compte le nombre d'occurences de chaque caractère de la phrase courante."

lettres = {}

for c in chaine:
    if c in lettres:
        lettres[c] += 1
    else:
        lettres[c] = 1

for c, count in lettres.items():
    print(f"'{c}': {count}")
'J': 1
'e': 12
' ': 11
'c': 8
'o': 4
'm': 2
'p': 2
't': 3
'l': 2
'n': 3
'b': 1
'r': 6
'd': 3
''': 1
'u': 3
's': 2
'h': 2
'a': 6
'q': 1
'è': 1
'.': 1

ex8

Tests et boucles

ex1

somme = 0
for i in range(1, 11):
    somme += i**2
somme
385

ex2

for i in range(5, -1, -1):
    print(i)
print("Boom")
5
4
3
2
1
0
Boom

ex3

gamme = ['do', 're', 'mi', 'fa', 'sol', 'la', 'si']

i = 0
while i < len(gamme):
    print("La note numéro " + str(i) + " de la gamme de do majeur est " + gamme[i])
    i += 1
La note numéro 0 de la gamme de do majeur est do
La note numéro 1 de la gamme de do majeur est re
La note numéro 2 de la gamme de do majeur est mi
La note numéro 3 de la gamme de do majeur est fa
La note numéro 4 de la gamme de do majeur est sol
La note numéro 5 de la gamme de do majeur est la
La note numéro 6 de la gamme de do majeur est si

ex4

liste = [34, 7, 20, 12, 50, 23, 16, 28, 6, 11, 19, 13, 26, 8, 9]
taille = len(liste)

for i in range(taille):
    for j in range(i, taille):
        if liste[i] > liste[j]:
            tmp = liste[j]
            liste[j] = liste[i]
            liste[i] = tmp
liste
[6, 7, 8, 9, 11, 12, 13, 16, 19, 20, 23, 26, 28, 34, 50]

ex5

a = 0
b = 1
for i in range(10):
    print(a + b)
    b = a + b
    a = b - a
1
2
3
5
8
13
21
34
55
89

ex6

x = [8, 18, 6, 0, 15, 17.5, 9, 1]
minimum = float('inf')
maximum = -float('inf')

for i in x:
    if i > maximum:
        maximum = i
    if i < minimum:
        minimum = i
        
print("max : " + str(maximum))
print("min : " + str(minimum))
max : 18
min : 0

ex7

for eleve in notes:
    print(eleve, end = ' : ')
    nb_notes = 0
    somme = 0
    for note in notes[eleve]:
        nb_notes += 1
        somme += note
    print(somme/nb_notes)

Fonctions

ex1

def puissance(x, y):
    return x**y

print(puissance(2, 10))
1024

ex2

import numpy as np

def statistiques_descriptives(liste):
    return round(np.mean(liste),2), round(np.var(liste),2)

statistiques_descriptives([1,12,20,3,8,15,17])

ex3

def est_pair(i):
    if type(i) is not int:
        print("Le paramètre " + str(i) + " n'est pas entier")
    else:
        return i%2 == 0
    
print(est_pair(12))
print(est_pair(8.5))
print(est_pair("toto"))
True
Le paramètre 8.5 n'est pas entier
None
Le paramètre toto n'est pas entier
None

ex4

def enlever_doublons(liste, trier = False):
    if trier:
        return sorted(set(liste))
    else:
        return list(set(liste))

print(enlever_doublons([1,12,1,4,4]))
print(enlever_doublons([1,12,1,4,4], True))
[1, 12, 4]
[1, 4, 12]

ex5

def factoriel_rec(i):
    if i == 0:
        return 1
    else:
        return i * factoriel_rec(i-1)
    
factoriel_rec(5)
120

ex6

def appliquer_fonction_liste(liste, fonction):
    res = [fonction(element) for element in liste]
    return res

l = ["abcd","Ensai","ReNNes"]
majuscule = lambda c:c.upper()

appliquer_fonction_liste(l, majuscule)
['ABCD', 'ENSAI', 'RENNES']

POO

ex1

# by ChatGPT

class Etudiant:
    def __init__(self, nom, age):
        self.nom = nom
        self.age = age
        self.liste_notes = []

    def ajouter_note(self, note):
        self.liste_notes.append(note)

    def calculer_moyenne(self):
        if len(self.liste_notes) == 0:
            return 0
        total = sum(self.liste_notes)
        moyenne = total / len(self.liste_notes)
        return moyenne

# Exemple d'utilisation
etudiant1 = Etudiant("Alice", 20)
etudiant1.ajouter_note(15)
etudiant1.ajouter_note(18)
etudiant1.ajouter_note(12)
moyenne_etudiant1 = etudiant1.calculer_moyenne()
print(f"Moyenne de {etudiant1.nom}: {moyenne_etudiant1}")

ex2

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def distance(self, autrePoint):
        return math.sqrt((self.x - autrePoint.x)**2 + (self.y - autrePoint.y)**2)
    
p1 = Point(0,0)
p2 = Point(1,1)
print(p1.distance(p2))

class Cercle:
    def __init__(self, p_centre, p_rayon):
        self.centre = p_centre
        self.rayon = p_rayon
        
    def calculer_surface(self):
        return math.pi * self.rayon**2
    
c1 = Cercle(p1, 2)
print(c1.calculer_surface())

ex3

class CompteBancaire:
    def __init__(self, titulaire, solde):
        self.titulaire = titulaire
        self.solde = solde
        
    def afficher_solde(self):
        print("Le solde du compte de " + self.titulaire + " est " + str(self.solde) + " euros.")
        
    def deposer(self, montant):
        self.solde += montant
    
    def retirer(self, montant):
        if self.solde >= montant:
            self.solde -= montant
            print("Retrait accepté.")
        else:
            print("Retrait refusé : fonds insuffisants.")
            
    def transferer(self, autreCompte, montant):
        if self.solde >= montant:
            autreCompte.solde += montant
            self.solde -= montant
        else:
            print("Transfert refusé : fonds insuffisants.")
            
client1 = CompteBancaire("Bernard", 2000)
client2 = CompteBancaire("Bianca", 5000)

client1.afficher_solde()
client2.afficher_solde()

print()  # saut de ligne

client1.deposer(1000)
client1.afficher_solde() # +1000

print()

client2.retirer(6000)
client2.afficher_solde() # aucun changement

print()

client2.retirer(1000)
client2.afficher_solde() # -1000

print()

client2.transferer(client1, 5000)
client2.afficher_solde() # aucun changement

print()

client2.transferer(client1, 2000)
client2.afficher_solde() # - 2000
client1.afficher_solde() # + 2000