Projet programmation
Résolu
Utilisateur anonyme
-
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
dans le cadre d'un cours d'université j'ai un projet à faire pour créer un compte bancaire virtuel.
Mon problème est que je n'arrive pas à utiliser mon code à deux reprises, c'est à dire que je crée un fichier mais dans ma classe "__init__" je n'arrive pas à récupérer les données de mes anciens comptes créés. pouvez vous regarder mon code et m'aider à comprendre comment je peux le faire ?
Bien à vous.
Voici mon code :
dans le cadre d'un cours d'université j'ai un projet à faire pour créer un compte bancaire virtuel.
Mon problème est que je n'arrive pas à utiliser mon code à deux reprises, c'est à dire que je crée un fichier mais dans ma classe "__init__" je n'arrive pas à récupérer les données de mes anciens comptes créés. pouvez vous regarder mon code et m'aider à comprendre comment je peux le faire ?
Bien à vous.
Voici mon code :
"Import package" import json import os import random def message (): print('\nBienvenue dans le service Ewallet: \nQue voulez-vous faire ? \n 1 : Créer un nouveaux profil \n 2 : Accéder à un compte existant \n 3 : Quitter les services de Ewallet \n \nVotre entrée :\n') # Declaration of a global variable because the rate is fixed rate = 0.02 Rate = rate * 100 Rate_perc = '{} %'.format(Rate) montantDecouvert = 300 class Ewallet : global rate def __init__(self,Id,generatedCode,dispoAmount): self.Id = Id self.generatedCode = generatedCode self.dispoAmount = dispoAmount #print('Compte {}\nCode Pin {} \nArgentdispo {} '.format(self.Id,self.generatedCode,self.dispoAmount)) # constructeur est app automatiquement pour avoir dans la variable les diff attributs # self pour déclarer les attributs de ma classe / element appartenant a l objet crée specifiquement def Information (self): info = '\nCompte : {}\nCode Pin : {} \nAmount on the account : {} \nfees Debit/Credit : {}'.format(self.Id,self.generatedCode,self.dispoAmount,Rate_perc) print(info) def CreditOp(self,amount): self.dispoAmount += amount - (rate*amount) # commission taken by the bank return self.dispoAmount def DebitOperation(self,amount): if self.dispoAmount > amount + (rate*amount) : self.dispoAmount -= amount + (rate*amount) return self.dispoAmount else : print("Error solde insufissant") def codeVerification(self,code): if (self.generatedCode == code): return True else : return False def save(self): info = '{:<15s} ¦ {:<15d} ¦ {:<15.2f} '.format(self.Id,self.generatedCode,self.dispoAmount) return info # Retunr a string class Bank : def __init__(self): self.Liste_Ewallet = [] def saveBank(self): pw = open('Ewallet.txt','w+') for index , elem in enumerate(self.Liste_Ewallet) : id_count, code_pin, amount_dispo = 'ID Ewallet', 'Code Pin', 'Amount Available' pw.write('{:<15} ¦ {:<15} ¦ {:<15} \n'.format(id_count,code_pin,amount_dispo)) pw.write('{}\n'.format(self.Liste_Ewallet[index].save())) pw.write("=============================================================================\n\n") pw.close() def existAcc (self,Id_entered): for index, elem in enumerate(self.Liste_Ewallet) : if self.Liste_Ewallet[index].Id == Id_entered: # chopper le wallet donc peut avoir le id return (True,index) return (False,0) def newWallet (self) : # on peut bloquer les entrée pour que l'utilisateur il puisse pas rentrer des string chelou client_id = input('Enter an ID to open an account \n>') if ',' not in client_id : cond, index = self.existAcc(client_id); if cond == False: client_id_clean = client_id.replace(" ","") print('\nID accepted\n') ok = False initial_amount = 0; while ok == False and initial_amount <= 0 : try : initial_amount = float(input('Enter an amount \n>')) if initial_amount <= 0 : print('\nError ! the amount entered must be positive !\n') else : print('Amount accepted\n') ok = True except : print('\nError ! the amount entered must be positive !\n') numerical_code = random.randrange(0,1000000) wallet = Ewallet(client_id_clean,numerical_code,initial_amount) self.Liste_Ewallet.append(wallet) print('Information of the account :\n') wallet.Information() else: print('\n Error ! The account already exists !') else : print('\n Error ! Your name must not contain "," !!') # peu le pimper def accountOp(self): client_id_op = input('Enter the account ID \n>') cond, index = self.existAcc(client_id_op); if cond == True : print('\nAcoount found !\n') ok = False pin_entered = 0 while ok == False: pin_entered = int(input('Enter the account password \n>')) ok = True if self.Liste_Ewallet[index].codeVerification(pin_entered): print('\nCorrect Pin ') print('Connexion completed \n') print('\nQue voulez-vous faire ? \n 1 : DEBITER le compte \n 2 : CREDITER le compte \n 3 : INFOS du compte \n 4 : QUITTER le Ewallet \nEntrée :\n') op = 0; try : op = int(input('>')) except : pass if op == 1 : #debit the account ok = False amount_deb = 0; while ok == False and amount_deb <= 0 : try: amount_deb = float(input('Enter the amount to debit from the account \n>')) except : print() if amount_deb <= 0 : print('\nError ! the amount entered must be positive !\n') else : ok = True self.Liste_Ewallet[index].DebitOperation(amount_deb) self.Liste_Ewallet[index].Information() elif op == 2 : #credi the account ok = False amount_cred = 0 ; while ok == False and amount_cred <= 0: try : amount_cred = float(input('Enter the credit amount \n>')) except: print() if amount_cred <= 0 : print('\nError ! the amount entered must be positive !\n') ok = True self.Liste_Ewallet[index].CreditOp(amount_cred) self.Liste_Ewallet[index].Information() elif op == 3 : self.Liste_Ewallet[index].Information() elif op == 4 : print('retour menu principal') else : print('Error, non valid operation, retour menu principal') else : print('Wrong pin, retour principal menu !\n') else : print('Account doesnt exist, retour principal menu') def main(): stop = False bank = Bank() # instanciation while stop == False: message() op = 0 try : op = int(input('>')) except: print() if op == 1 : bank.newWallet() elif op == 2 : bank.accountOp() elif op == 3 : bank.saveBank() print('Merci d avoir utilisé les services Ewallet') stop = True else : print('Error ! Choix invalide') if __name__ == "__main__": main()
A voir également:
- Projet programmation
- Filigrane projet - Guide
- Application de programmation - Guide
- Gant projet - Télécharger - Gestion de projets
- Musique projet x - Forum Musique / Radio / Clip
- Projet x film ✓ - Forum Musique / Radio / Clip
6 réponses
Bonsoir Yaleck,
Pour récupérer tes données sauvegardées, le plus facile serait de les stocker dans un fichier csv, l'accès sera plus facile par la suite. Pour cela tu as le module
Le format bien structuré de ton fichier Ewallet.txt tel que tu l'as conçu, je l'aurais vu davantage pour un fichier visible du client, comme un relevé de compte, donc sans le mot de passe.
Ceci étant dit, si tu souhaites conserver ton format de fichier, tu peux le relire comme indiqué ici :
https://stackoverflow.com/questions/8369219/how-to-read-a-text-file-into-a-string-variable-and-strip-newlines
mais tu auras ensuite quelques manipulations (peut-être fastidieuses à mettre en place) de chaines de caractères pour récupérer tout comme il faut.
Pour récupérer tes données sauvegardées, le plus facile serait de les stocker dans un fichier csv, l'accès sera plus facile par la suite. Pour cela tu as le module
csv. Tu trouveras des tas d'exemples sur internet. Par exemple : https://riptutorial.com/fr/csv/example/6947/lire-et-ecrire-en-python
Le format bien structuré de ton fichier Ewallet.txt tel que tu l'as conçu, je l'aurais vu davantage pour un fichier visible du client, comme un relevé de compte, donc sans le mot de passe.
Ceci étant dit, si tu souhaites conserver ton format de fichier, tu peux le relire comme indiqué ici :
https://stackoverflow.com/questions/8369219/how-to-read-a-text-file-into-a-string-variable-and-strip-newlines
mais tu auras ensuite quelques manipulations (peut-être fastidieuses à mettre en place) de chaines de caractères pour récupérer tout comme il faut.
Utilisateur anonyme
Seriez-vous disponible pour m'aider à mettre cela en place ?
Oui, n'hésite pas si tu as des questions. :-)
Comment veux-tu procéder : tu gardes le format que tu as défini dans ton fichier .txt ou tu préfères passer au format .csv ?
Comment veux-tu procéder : tu gardes le format que tu as défini dans ton fichier .txt ou tu préfères passer au format .csv ?
j'ai essayé les deux mais je n'y arrive pas, puisque mon code a besoin des classes pour les attributs. Même lorsque j'arrive à recréer une liste avec mes données, je n'arrive pas à les conserver en tant que classes Ewallet je ne peux donc pas les utiliser pour refaire mon fichier et là est tout mon problème.
Bonjour,
Je vais te proposer la version avec csv, mais tu peux aussi l'adapter avec ta structure de fichier :
Aide-toi des exemples qu'on trouve sur internet. Fais autant de
Si après tout ça, tu as toujours des blocages, poste ici l'extrait du code que tu as modifié et qui ne fonctionne pas. Je regarderai.
Courage ! :-)
Je vais te proposer la version avec csv, mais tu peux aussi l'adapter avec ta structure de fichier :
class Bank : def __init__(self): self.Liste_Ewallet = [] # tu ajoutes la lecture de ton fichier ici with open('Ewallet.csv','r') as csvEwallet: # pour chaque ligne du fichier, tu ajoutes ses éléments dans self.Liste_Ewallet. Les élements seront directement stockés dans une liste, ce qui sera facile à récupérer. # quelques lignes de code à écrire ici def saveBank(self): # j'ai remplacé ta version du fichier pour une écriture dans un csv with open('Ewallet.csv','w') as csvEwallet: # tu parcours ta Liste_Ewallet, et tu écris dans le csv
Aide-toi des exemples qu'on trouve sur internet. Fais autant de
Si après tout ça, tu as toujours des blocages, poste ici l'extrait du code que tu as modifié et qui ne fonctionne pas. Je regarderai.
Courage ! :-)
On a essayé de garder le même format mais le problème qui arrive est que notre liste est en string et non un attribut ce qui nous empêche de les reprendre je pense que cela est pareil en cdv ou en txt. Qu'on penses tu ? On a utilisé ce code là :
def __init__(self): if os.path.exists(r'Ewallet.txt'): pw = open('Ewallet.txt','r') self.Liste_Ewallet = [] file_size = os.path.getsize('Ewallet.txt') x = 0; wallet_pos = 1 ; if file_size != 0: lines = pw.readlines() while x != len(lines): print(wallet_pos) self.Liste_Ewallet.append(lines[wallet_pos]) wallet_pos += 4 x += 1 if wallet_pos == len(lines) + 1: break else: self.Liste_Ewallet = [] def saveBank(self): pw = open('Ewallet.txt','w+') for index , elem in enumerate(self.Liste_Ewallet) : id_count, code_pin, amount_dispo = 'ID Ewallet', 'Code Pin', 'Amount Available' pw.write('{:<15} ¦ {:<15} ¦ {:<15} \n'.format(id_count,code_pin,amount_dispo)) pw.write('{}\n'.format(self.Liste_Ewallet[index].save())) pw.write("=============================================================================\n\n") pw.close()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Au moment où tu arrives à cette ligne :
tu souhaites ajouter un objet Ewallet à partir des données déjà stockés.
Il faut créer un nouveau Ewallet via l'appel de la méthode __init__:
Il faut donc commencer par remplacer ta ligne de code à la ligne 12 par :
La question qui se pose à présent est de savoir comment transmettre les données de
Pour cela tu dois passer par exemple de :
Pour répondre à cela, tu peux utiliser la fonction
En résumé, tu remplaces ta ligne 12 par (à toi de compléter):
self.Liste_Ewallet.append(lines[wallet_pos])
tu souhaites ajouter un objet Ewallet à partir des données déjà stockés.
Il faut créer un nouveau Ewallet via l'appel de la méthode __init__:
Ewallet(Id, generatedCode, dispoAmount).
Il faut donc commencer par remplacer ta ligne de code à la ligne 12 par :
self.Liste_Ewallet.append(Ewallet(Id, generatedCode, dispoAmount))
La question qui se pose à présent est de savoir comment transmettre les données de
lines[wallet_pos]vers
Id,
generatedCodeet
dispoAmount?
Pour cela tu dois passer par exemple de :
lines[wallet_pos]qui vaut
11 ¦ 156290 ¦ 11.00à :
Id, generatedCode, dispoAmount = ['11', '156290', '11.00'](et ne pas oublier ensuite de transformer en int generatedCode et en float dispoAmount).
Pour répondre à cela, tu peux utiliser la fonction
splitpour couper ta ligne au niveau des
¦comme séparateurs. Ensuite il faudra enlever les espaces à gauche et à droite : la fonction
stripfait ça.
En résumé, tu remplaces ta ligne 12 par (à toi de compléter):
#utilisation de split et strip sur la ligne lines[wallet_pos] Id, generatedCode, dispoAmount = ___ generatedCode, dispoAmount = int(generatedCode), float(dispoAmount) self.Liste_Ewallet.append(Ewallet(Id, generatedCode, dispoAmount))