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

Afficher l'aide

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 sample du module random.

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...
terminal

Résultats

/ 2 tests validés

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é 👇

Seules les propositions différentes de la solution proposée par Docstring peuvent être envoyées.

Ma solution :

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.