Comment mettre des strings en dictionnaire
Résolu/Fermé
A voir également:
- Comment mettre des strings en dictionnaire
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Attaque par dictionnaire - Guide
- Télécharger dictionnaire médical larousse gratuit pdf - Télécharger - Dictionnaires & Langues
- Télécharger dictionnaire français gratuit pdf - Télécharger - Bureautique
- Télécharger dictionnaire informatique gratuit pdf - Télécharger - Bureautique
12 réponses
Utilisateur anonyme
14 mai 2020 à 00:35
14 mai 2020 à 00:35
["yal_724851_100.0_{'CHF': 100.0", " 'EUR': 0", " 'USD': 0", " 'GBD': 0}"]
4
'GBD': 0}. #cela est mon newliste[3]
4
'GBD': 0}. #cela est mon newliste[3]
Utilisateur anonyme
13 mai 2020 à 16:47
13 mai 2020 à 16:47
mes dictionnaires sont dans des listes et lorsque je les reprends je ne peux meme plus les mettre ensemble
voici mon code
class Bank : def __init__(self): if os.path.exists(r"Ewallet.csv"): self.Liste_Ewallet = [] with open('Ewallet.csv', 'r') as file: reader = csv.reader(file) wallet_list = [] for row in reader: wallet_list.append(row) for i in range(len(wallet_list)): newListe = [] newListe = wallet_list[i] print(wallet_list[i]) print(len(newListe)) print(newListe[3]) newListe[0], newListe[1] , newListe [2] , newListe [3:4] = str(newListe[0]), int(newListe[1]) , float(newListe[2]), dict(newListe[3:4]) wallet_1 = Ewallet(newListe[0],newListe[1],newListe[2], newListe[3:6]) self.Liste_Ewallet.append(wallet_1) else: self.Liste_Ewallet = []
Utilisateur anonyme
13 mai 2020 à 17:24
13 mai 2020 à 17:24
def saveBank(self): pw = open('Ewallet.csv','w') for index , elem in enumerate(self.Liste_Ewallet) : pw.write('{}\n'.format(self.Liste_Ewallet[index].save())) pw.close()
voila comment je sauve les informations
Utilisateur anonyme
13 mai 2020 à 19:30
13 mai 2020 à 19:30
""" Ewallet Services main file """ import random import csv import os import requests # Currency converter function def message (): print('\n\t##Welcome to Ewallet Services## \n\nWhich action would you like to take? \n\n 1 : Create a new profile \n 2 : Access to an existing account \n 3 : Quit Ewallet Services \n') rate = 0.02 Rate = rate * 100 Rate_perc = '{} %'.format(Rate) montantDecouvert = 300 class Ewallet : # dispo amount par defaut en CHF def __init__(self,Id,generatedCode,dispoAmount,accounts): self.Id = Id self.generatedCode = generatedCode self.dispoAmount = dispoAmount self.accounts = {'CHF' : dispoAmount, 'EUR' : 0, 'USD' : 0 , 'GBD' : 0} def Information (self): info = '\nCompte : {}\nCode Pin : {} \nAmount on the account : {} \nfees Debit/Credit : {} \nDiff accounts {}'.format(self.Id,self.generatedCode,self.dispoAmount,Rate_perc,self.accounts) print(info) def CreditOp(self,amount): self.dispoAmount += amount - (rate*amount) return self.dispoAmount def DebitOperation(self,amount): if self.dispoAmount > amount + (rate*amount) : self.dispoAmount -= amount + (rate*amount) return self.dispoAmount else : print("Inssuficient funds") def codeVerification(self,code): if (self.generatedCode == code): return True else : return False def save(self): info ='{:},{:},{:},{:}'.format(self.Id,self.generatedCode,self.dispoAmount,self.accounts) return info def covertisseur_currencies (self,from_currency, to_currency, amount): # to currency on applique la conv rates = {} url = "https://api.exchangeratesapi.io/latest" data = requests.get(url).json() rates = data["rates"] if to_currency == "EUR" and from_currency != "EUR" : amount = round(amount / rates[from_currency], 4) return amount elif from_currency == "EUR" and to_currency == "EUR": amount = round(amount, 4) return amount else: amount = round(amount * rates[to_currency], 4) return amount class Bank : def __init__(self): if os.path.exists(r"Ewallet.csv"): self.Liste_Ewallet = [] with open('Ewallet.csv', 'r') as file: reader = csv.reader(file) wallet_list = [] for row in reader: wallet_list.append(row) for i in range(len(wallet_list)): # ajouter le -1 newListe = [] newListe = wallet_list[i] print(newListe[3]) newListe[0], newListe[1] , newListe [2] , newListe [3] = str(newListe[0]), int(newListe[1]) , float(newListe[2], dict(newListe[3])) wallet_1 = Ewallet(newListe[0],newListe[1],newListe[2], newListe[3]) self.Liste_Ewallet.append(wallet_1) else: self.Liste_Ewallet = [] def saveBank(self): pw = open('Ewallet.csv','w') for index , elem in enumerate(self.Liste_Ewallet) : pw.write('{}\n'.format(self.Liste_Ewallet[index].save())) pw.close() def existAcc (self,Id_entered): for index, elem in enumerate(self.Liste_Ewallet) : if self.Liste_Ewallet[index].Id == Id_entered: return (True,index) return (False,0) def blockEntry (self,client_id): char = ['é','è','à','ê','ç', ',','.',';',':','-','?','!','/','"', '%','(',')','=','+','*','@','¦','|'] list_count = [] exist = False for spec in char : count_char = 0 count_char = client_id.count(spec) list_count.append(count_char) for index , elem in enumerate(list_count): if list_count[index] > 0 : exist = True return exist else : pass return exist def newWallet (self) : client_id = input('Enter an ID to open an account \n>') if self.blockEntry(client_id) == False : cond, index = self.existAcc(client_id); if cond == False: client_id_clean = client_id.replace(" ","") print('ID 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,0) self.Liste_Ewallet.append(wallet) print('Information of the account:\n') wallet.Information() else: print('\nError! This ID is already taken!\nBack to main menu') else : print('\nError! Your ID cannot contain sepcial characters\nBack to main menu') def accountOp(self): client_id_op = input('Enter the account ID \n>') cond, index = self.existAcc(client_id_op); if cond == True : print('\nAccount found!\n') ok = False pin_entered = 0 try : while ok == False: pin_entered = int(input('Enter the account password \n>')) ok = True except: pass if self.Liste_Ewallet[index].codeVerification(pin_entered): print('\nCorrect Pin ') print('Connexion completed \n') print('Which action would you like to take ? \n 1 : DEBIT \n 2 : CREDIT \n 3 : INFO \n 4 : QUIT \n 5 : convertisseur') op = 0; try : op = int(input('>')) except : pass if op == 1 : ok = False amount_deb = 0; while ok == False and amount_deb <= 0 : try: amount_deb = float(input('Enter the amount to be debited \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 : ok = False amount_cred = 0 ; while ok == False and amount_cred <= 0: try : amount_cred = float(input('Enter the amount to be credited \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('Back to main menu') elif op == 5 : choice = input('1. to buy\n2. to sell\n>') monaie_1 = input('monnaie de base >') monaie_2 = input('monnaie deux >') montant = float(input('montant >')) wallet_1 = self.Liste_Ewallet[index] if choice == '1': wallet_1.accounts[monaie_1] = wallet_1.accounts[monaie_1] + montant wallet_1.accounts[monaie_2] = round(wallet_1.accounts[monaie_2] - wallet_1.covertisseur_currencies(monaie_1,monaie_2,montant),2) print("Update >",wallet_1.accounts) elif choice == '2': wallet_1.accounts[monaie_1] = wallet_1.accounts[monaie_1] - montant wallet_1.accounts[monaie_2] =round(wallet_1.accounts[monaie_2] + wallet_1.covertisseur_currencies(monaie_1,monaie_2,montant),2) print("Update >",wallet_1.accounts) else : print('Error, invalid operation, back to main menu') else : print('Wrong pin, back to main menu !\n') else : print('Account does not exist, back to main menu') def main(): stop = False bank = Bank() 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('Thank you for using Ewallet Services') stop = True elif op == 4: pass else : print('Error! Invalid choice') if __name__ == "__main__": main()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Furansujean
Messages postés
58
Date d'inscription
lundi 1 juillet 2019
Statut
Membre
Dernière intervention
12 septembre 2022
5
Modifié le 13 mai 2020 à 23:31
Modifié le 13 mai 2020 à 23:31
Bonsoir Yaleck,
comme tu le constates on ne peut pas construire un dictionnaire directement comme tu le fais.
Enfin... on peut construire un dictionnaire à la manière dont tu veux le faire.
Exemple sur une console :
Eh oui ! Il te "suffit" de passer une expression syntaxiquement correcte à
Bon... je te l'accorde, il faut réfléchir un peu pour ton exemple... :-)
En effet, quand tu demandes à lire le csv, cela te facilite le travail quand le séparateur est une virgule. Mais, dans ton cas :
La lecture du csv a découpé ton dictionnaire en plusieurs morceaux, là où il a vu des virgules en fait.
Je te propose donc d'aborder le découpage d'une autre façon.
je vois 2 solutions :
Tu enregistres tes données en séparant les éléments de ton dictionnaire par autre chose qu'une virgule. Ce pourrait être "_" par exemple dans ton fichier :
Par contre, il faut être sûr de ne pas avoir d'autres virgules dans tes données du dictionnaire.
Le 3e élément de la liste issue du découpage csv sera donc le dictionnaire complet avec des "_" comme séparateur, il te reste alors à faire un
Passer à une lecture de fichier sans le module csv :
Plus loin, tu utilises
comme tu le constates on ne peut pas construire un dictionnaire directement comme tu le fais.
Enfin... on peut construire un dictionnaire à la manière dont tu veux le faire.
Exemple sur une console :
>>> d = eval("{'a':1,'b':2}") >>> d {'a': 1, 'b': 2} >>> d['a'] 1
Eh oui ! Il te "suffit" de passer une expression syntaxiquement correcte à
eval.
Bon... je te l'accorde, il faut réfléchir un peu pour ton exemple... :-)
En effet, quand tu demandes à lire le csv, cela te facilite le travail quand le séparateur est une virgule. Mais, dans ton cas :
['lambert', '59776', '200.0', "{'CHF': 200.0", " 'EUR': 0", " 'USD': 0", " 'GBD': 0}"]
La lecture du csv a découpé ton dictionnaire en plusieurs morceaux, là où il a vu des virgules en fait.
Je te propose donc d'aborder le découpage d'une autre façon.
je vois 2 solutions :
- Solution 1
Tu enregistres tes données en séparant les éléments de ton dictionnaire par autre chose qu'une virgule. Ce pourrait être "_" par exemple dans ton fichier :
lambert,59776,200.0,{'CHF': 200.0_ 'EUR': 0_ 'USD': 0_ 'GBD': 0}
Par contre, il faut être sûr de ne pas avoir d'autres virgules dans tes données du dictionnaire.
Le 3e élément de la liste issue du découpage csv sera donc le dictionnaire complet avec des "_" comme séparateur, il te reste alors à faire un
replacede "_" en "," puis un
eval.
- Solution 2
Passer à une lecture de fichier sans le module csv :
with open('Ewallet.csv', 'r') as file: wallet_list = [] for row in file: wallet_list.append(row)
Plus loin, tu utilises
spliten précisant le séparateur :
trois_premiers_champs, dictionnaire = # séparation sur newListe au niveau de l'accolade ouvrante, qui sera donc le séparateur Id, generatedCode, dispoAmount,_ = # séparation des trois_premiers_champs avec séparateur virgule account = eval("{"+dictionnaire) # on remet l'accolade ouvrante qu'on a perdu lors du premier split
- Après il existe d'autres solutions, comme ne pas enregistrer de dictionnaire dans ton fichier, et accéder aux données d'une autre manière.
Utilisateur anonyme
14 mai 2020 à 00:10
14 mai 2020 à 00:10
je n'ai pas réussi par Json... mais comment je peux insérer des underscore dans mon fichier ? puisque justement je stock mes valeurs dans un fichier csv et les récupère par la suite. Pouvez-vous m'éclairer ?
Furansujean
Messages postés
58
Date d'inscription
lundi 1 juillet 2019
Statut
Membre
Dernière intervention
12 septembre 2022
5
Modifié le 14 mai 2020 à 00:28
Modifié le 14 mai 2020 à 00:28
Je dirais : dans la fonction
savede ta classe
Ewallet: tu remplaces les virgules de ton dictionnaire par des underscore. :-)
Utilisateur anonyme
14 mai 2020 à 00:29
14 mai 2020 à 00:29
mais comment récupérer maintenant mes variables ?
Furansujean
Messages postés
58
Date d'inscription
lundi 1 juillet 2019
Statut
Membre
Dernière intervention
12 septembre 2022
5
14 mai 2020 à 00:33
14 mai 2020 à 00:33
Fais un
Et tu suis ce que j'ai marqué dans ma "Solution 1". :-)
newListe[3]et tu verras comment récupérer tout ça.
Et tu suis ce que j'ai marqué dans ma "Solution 1". :-)
Utilisateur anonyme
14 mai 2020 à 00:30
14 mai 2020 à 00:30
mais cela me met des underscore entre les variables mais pas dans le dictionnaire
Modifié le 14 mai 2020 à 00:42
, dans , tu dois uniquement modifier ton dictionnaire : tu passes en puis tu remplaces les virgules qui sont à l'intérieur de cet attribut dictionnaire.