Dans cet exercice, vous devez implémenter une méthode virement qui permette d'ajouter ou enlever de l'argent à la balance du compte.
On désire générer un numéro unique pour chaque virement effectué et le sauvegarder dans le dictionnaire virements de l'instance.
Le numéro unique généré doit contenir 15 caractères et peut être composé de lettres (minuscules ou majuscules) et de chiffres de 0 à 9.
Dans le cas de cet exercice, john effectue un virement de 5,000€.
Le dictionnaire john.virements devra donc ressembler à :
>>> john.virements
{'vQLONfX81hrIsDS': 5000}
Bien sûr, la clé du virement étant aléatoire, votre script retournera un résultat différent pour le numéro unique du virement.
La balance du compte de John devra être égale à 25,000€ (20,000€ de départ plus les 5,000€ du virement).
Pour créer un identifiant aléatoire, vous pouvez utiliser le module random et le module string.
code Code
import random
import string
class Compte:
def __init__(self, nom, numero, balance):
self.nom = nom
self.numero = numero
self.balance = balance
self.virements = {}
def virement(self, montant):
self.balance += montant
uuid = "".join(random.sample(string.digits + string.ascii_letters, 15))
self.virements[uuid] = montant
john = Compte(nom="John Smith", numero="123456", balance=20000)
john.virement(montant=5000)
comment Explications
Premièrement, on devait créer une méthode virement qui permette de virer un certain montant d'argent dans le compte.
On devait donc pouvoir récupérer ce montant dans un paramètre que l'on appelle tout bonnement montant. On utilise la valeur envoyée à ce paramètre pour modifier la balance du compte :
def virement(self, montant):
self.balance += montant
On devait ensuite générer un identifiant unique aléatoire composé de 15 lettres et chiffres.
Pour cela, on fait appelle à deux modules : le module random et le module string.
Le module string contient plusieurs constantes bien pratiques pour ce genre de cas.
Dans le cadre de cet exercice, on utilise la constante string.ascii_letters qui contient toutes les lettres de l'alphabet en majuscule et minuscule :
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
De la même façon, la constante string.digits nous retourne tous les chiffres de 0 à 9 :
>>> import string
>>> string.digits
'0123456789'
Chacune de ces constantes nous retourne une chaîne de caractères qui contient tous les caractères demandés.
On peut donc additionner ces deux chaînes de caractères avec le symbole d'addition :
>>> string.digits + string.ascii_letters
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
On a donc ainsi tous les caractères dans lesquels nous souhaitons 'piocher' pour générer notre identifiant aléatoire.
Pour sélectionner un nombre aléatoire de caractères dans une chaîne de caractères, on utilise la fonction sample du module random :
>>> random.sample('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 15)
['v', 'r', 'm', 'P', 'o', 'g', 'x', 's', 'D', 'O', '3', 'q', 'y', 'b', 'V']
Cette fois-ci, on se retrouve avec une liste. Il nous faut donc joindre les éléments de cette liste en une chaîne de caractères.
Pour ce faire on utilise la méthode join sur une chaîne de caractères vide, ce qui donne la ligne de code suivante qui nous permet de générer un identifiant unique complet de 15 caractères :
uuid = "".join(random.sample(string.digits + string.ascii_letters, 15))
Il ne nous reste plus qu'à ajouter ce virement dans notre dictionnaire :
self.virements[uuid] = montant
star Points importants
-
Pour récupérer toutes les lettres de l'alphabet et tous les chiffres on utilise le module
string. -
Pour récupérer aléatoirement des caractères dans une chaîne de caractères, on utilise la fonction
sampledu modulerandom.
class Compte:
def __init__(self, nom, numero, balance):
self.nom = nom
self.numero = numero
self.balance = balance
self.virements = {}
john = Compte(nom="John Smith", numero="123456", balance=20000)
john.virement(montant=5000)import random
import string
class Compte:
def __init__(self, nom, numero, balance):
self.nom = nom
self.numero = numero
self.balance = balance
self.virements = {}
def virement(self, montant):
self.balance += montant
uuid = "".join(random.sample(string.digits + string.ascii_letters, 15))
self.virements[uuid] = montant
john = Compte(nom="John Smith", numero="123456", balance=20000)
john.virement(montant=5000)Console
Un instant...
Résultats
Test de l'attribut balance de john
assert john.balance == 25000, "L'attribut balance ne contient pas la bonne valeur."
Test de l'attribut virements
assert len(list(john.virements.values())) > 0, "Le dictionnaire john.virements doit contenir un virement de 5000€."
assert list(john.virements.values())[0] == 5000, "Le dictionnaire john.virements doit contenir un virement de 5000€."
import string
for l in list(john.virements.keys())[0]:
assert l in string.ascii_letters + string.digits, "L'identifiant unique des virements ne doit contenir que des lettres minuscules, majuscules et des chiffres de 0 à 9."
assert len(list(john.virements.keys())[0]) == 15, "L'identifiant unique des virements doit contenir précisément 15 caractères."Bravo, tu as réussi cet exercice de code 🥳
Envoyer ma solution
Vous avez trouvé une solution alternative pour cet exercice ? Proposez votre solution à la communauté 👇
Ma solution :






