#1 Le 02/02/2021, à 09:00
- chris7522
[RESOLU] Utilisation format JSON (python)
Bonjour a toutes et a tous ,
J'ai écris ce petit truc , comment pourrai je améliorer ce code ? Ca ne doit pas etre tres propre tout ca .
Merci de votre analyse
import json
def nouveau_client():
print("choisissez un mot de passe d'au moins 5 caracteres alphanumérique :")
while True:
password = input()
if len(password) < 5:
print('Entrez un mot de passe de plus de 5 caractere :')
else:
print('mot de passe correcte')
break
print('Voici votre mot de passe :',password)
dic = {}
dic["password"] = password
print('Entrez votre prenom :')
while True:
name = input()
if(isinstance(name,str)):
print('prenom sauvegardé')
break
else:
print('Entrez une chaine')
dic["prenom"] = name
sauvegarde(dic)
def sauvegarde(client):
with open("client.json","w")as f:
json.dump(client,f)
def verif():
with open("client.json","r")as f:
dic = {}
dic = json.load(f)
var1 = dic.get("password","cle absente")
print("Entrez votre mot de passe : ")
while True:
var2 = input()
if var1 == var2:
print("Mot de passe correcte")
break
else:
print("Mot de passe incorrecte,recommencer..")
var3 = dic.get("prenom","cle absente")
print(f"Bienvenue {var3.upper()}")
print("Bonjour , Bienvenue !")
print("Vous etes déja client ? Tapez 1")
print("Vous etes nouveau client ? tapez 2 ")
var = int(input())
if var == 1:
verif()
elif var == 2:
nouveau_client()
Dernière modification par chris7522 (Le 04/02/2021, à 19:45)
Hors ligne
#2 Le 02/02/2021, à 17:21
- toitoinebzh
Re : [RESOLU] Utilisation format JSON (python)
salut
en lisant rapidement le code, voilà ce que je pense
* tu risques d'avoir un souci si 2 clients ont le même prénom
* tu vas te payer une erreur si il y a une faute de frappes, par exemple entre ton 1 et 2
Hors ligne
#3 Le 02/02/2021, à 20:19
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Merci de ton aide toitoinebzh
bzh pour Bretagne ?
Hors ligne
#4 Le 02/02/2021, à 22:16
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
Bonsoir,
Il y a plusieurs problèmes dans ton code, le plus important est qu'il n'est pas opérationnel .
Si tu veux enregistrer plus d'un client, il ne peut pas fonctionner (même si les mots de passe ou les prénoms ne sont pas identiques). Ta fonction sauvegarde est à revoir ou du moins à écrire. Elle n'ajoute pas au json les nouvelles saisies mais enregistre juste le dernier venu.
Tu n'as pas testé ton code?
D'autre part, tu as fait de mauvais choix dans la construction de ton dictionnaire:
En effet, tu fais:
dict = {"password": ..., "name": ...}
Tous les clients auront pour clefs les strings "password" et "name" . Comment veux-tu les identifier?
Je lis:
name = input()
if(isinstance(name,str)):
name étant une string ta condition sera toujours vrai. Utilise plutôt la fonction isalpha() sur ta string...
Voici comment pourrait s'écrire ton script: (améliorable et à compléter par quelques tests dont celui pour savoir si le password existe déjà afin d'accepter la saisie).:
import json
def nouveau_client():
print("choisissez un mot de passe d'au moins 5 caracteres\
alphanumérique :")
while True:
password = input()
if len(password) > 4:
print(f"mot de passe correct\n\
Voici votre mot de passe :{password}")
break
print('Entrez un mot de passe de plus de 5 caractere :')
dic = {}
print('Entrez votre prenom :')
while True:
name = input()
if name.isalpha():
print('prenom sauvegardé')
break
print('Entrez une chaine de caractère')
dic[password] = name
sauvegarde(dic)
def sauvegarde(client):
try:
with open("clientbidon.json","r")as f:
d = {}
d = json.load(f)
d.update(client)
except FileNotFoundError:
with open("clientbidon.json","w") as f:
json.dump(client,f)
else:
with open("clientbidon.json","w") as f:
json.dump(d,f)
def verif():
with open("clientbidon.json","r")as f:
d = json.load(f)
print("Entrez votre mot de passe : ")
while True:
password = input()
if password in d:
print(f"Mot de passe correct\nBienvenue {d[password]}")
break
print("Mot de passe incorrect,recommencer..")
blabla = "Bonjour , Bienvenue !\nVous etes déja client ?Tapez 1\n\
Vous etes nouveau client ? tapez 2\n "
var = input(blabla)
if var == "1": verif()
elif var == "2": nouveau_client()
#5 Le 03/02/2021, à 11:58
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Merci Beaucoup d'avoir pris le temps de tout réecrire le code ! Je ne pourrai pas réellement faire de progrès sans votre analyse et vos corrections . J'ai deja remarqué pas mal de chose que je ne connaissais pas .
Le temps d'étudier tout ca et je reviens avec mes questions
Hors ligne
#6 Le 04/02/2021, à 14:34
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Bonjour,
def nouveau_client():
print("choisissez un mot de passe d'au moins 5 caracteres \
alphanumérique :")
while True:
password = input()
if len(password) > 4:
print(f"mot de passe correct\n\
Voici votre mot de passe :{password}")
break
print('Entrez un mot de passe de plus de 5 caractere :')
Dans cette portion de code de la fonction nouveau_client , apres le break , le "else" est facultatif ?
def sauvegarde(client):
try:
with open("client1.json","r")as f:
d = {}
d = json.load(f)
d.update(client)
except FileNotFoundError:
with open("client1.json","w") as f:
json.dump(client,f)
else:
with open("client1.json","w") as f:
json.dump(d,f)
Dans cette fonction , je comprends :
Dans le bloc try , on verifie si le fichier "client1.json " existe .
SI c'est le cas on ajoute le contenu de la variable "client" au dictionnaire que l'on vient d'ouvrir .
SI ce n'est pas le cas , une exception est levée , on crée alors le fichier " client1.json que l'on ouvre en écriture et on ajoute le contenu de la variable " client" .
blabla = "Bonjour , Bienvenue !\nVous etes déja client ?Tapez 1\n\
Vous etes nouveau client ? tapez 2\n "
Ca aurait été trop long de mettre tout ca entre parenthese apres input(....) d'ou la variable blabla ?
Hors ligne
#7 Le 04/02/2021, à 18:53
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
Bonjour,
def nouveau_client(): print("choisissez un mot de passe d'au moins 5 caracteres \ alphanumérique :") while True: password = input() if len(password) > 4: print(f"mot de passe correct\n\ Voici votre mot de passe :{password}") break print('Entrez un mot de passe de plus de 5 caractere :')
Dans cette portion de code de la fonction nouveau_client , apres le break , le "else" est facultatif ?
Je n'utilise pas else, car écrit comme ci-dessus je n'en ai pas besoin. Ça fait l'économie d'une instruction interprétée par le proc. Dans le cas de ce code, ce n'est pas vraiment important mais dans une boucle c'est du temps gagné. Tout cela c'est du domaine de l'algorithmie.
def sauvegarde(client): try: with open("client1.json","r")as f: d = {} d = json.load(f) d.update(client) except FileNotFoundError: with open("client1.json","w") as f: json.dump(client,f) else: with open("client1.json","w") as f: json.dump(d,f)
Dans cette fonction , je comprends :
Dans le bloc try , on verifie si le fichier "client1.json " existe .
SI c'est le cas on ajoute le contenu de la variable "client" au dictionnaire que l'on vient d'ouvrir .
SI ce n'est pas le cas , une exception est levée , on crée alors le fichier " client1.json que l'on ouvre en écriture et on ajoute le contenu de la variable " client" .
Oui, dans l'idée ça peut se traduire comme tu le dis.
blabla = "Bonjour , Bienvenue !\nVous etes déja client ?Tapez 1\n\ Vous etes nouveau client ? tapez 2\n "
Ca aurait été trop long de mettre tout ca entre parenthese apres input(....) d'ou la variable blabla ?
C'est juste pour la visibilité. La PEP 8 préconise de ne pas dépasser 79 caractères par lignes.
Je t'ai demandé sur un autre post d'éditer tous les titres de tes discussions avec la mention [Résolu] comme le demande le forum. Merci de le faire.
Je t'invite aussi à bien choisir le titre de tes posts. En effet, un titre bien choisi t'apportera plus de réponses et permet un référencement pertinent de la discussion par les moteurs de recherche. Ainsi, les réponses qui te sont apportées peuvent aussi profiter à d'autres personnes
Dernière modification par Compte supprimé (Le 06/02/2021, à 23:35)
#8 Le 04/02/2021, à 19:57
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Merci de ton aide .
J'avais l'intention de placer la mention "resolu" , je n'aurai pas du attendre autant de temps pour le faire
Hors ligne
#9 Le 04/02/2021, à 20:05
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
#10 Le 06/02/2021, à 07:33
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Bonjour a tous ,
J'ai ajouté cette nouvelle fonction a celles existantes . Je voulais :
- retourner le mot de passe sur le compte mail de la personne en cas d'oubli .( a partir de la valeur du dico , le prénom dans mon exemple)
- Après 3 tentatives infructueuses , lui permettre de créer un compte .
J'ai essayé de faire comme j'ai pu , c'est brouillon et peu efficace et surtout je n'arrive a faire partir mon email sur le compte !
J'y ai passé l'après-midi et j'ai besoin de votre aide .
def send_email():
sender_email = " *****@gmail.com "
receiver_email = " *****@gmail.com "
port = 465
password = " ****** "
with open("client1.json","r")as f:
d = json.load(f)
cpt = 0
while cpt < 3:
prenom = input(str('Veuillez entrer votre prenom :\n'))
if prenom in d.values():
break
print("Prenom inconnu ")
cpt += 1
if cpt >= 3:
print("Vous pouvez creer un compte client .")
nouveau_client()
password_recovery = [x for x,v in d.items()if v == prenom]
a = " Votre mot de passe :"
b = str(password_recovery)
message = a + b
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context)as server:
server.login("******@gmail.com", password)
server.sendmail(sender_email, receiver_email,message)
print('Votre mot de passe a été envoyé a votre adresse mail')
D'avance je vous en remercie.
Hors ligne
#11 Le 06/02/2021, à 09:52
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
Bonjour,
Je passe en coup de vent (j'ai à faire). Je m'attarderai un peu plus tard sur ta problèmatique si d'ici là tu n'obtiens pas de réponse.
Par contre, merci de créer un nouveau sujet pour de nouvelles questions (tu peux y glisser le lien de cette conversation) comme le demande le site... (et pour les raisons que j'ai évoqué en #7)
#12 Le 06/02/2021, à 13:03
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
J’avoue ne pas savoir comment faire pour glisser le lien vers un nouveau sujet
Hors ligne
#13 Le 06/02/2021, à 21:06
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
Pour créer un lien vers d'une page: depuis la page en question, tu fais un copié de l'adresse qui est marqué dans ton navigateur . cette adresse est le lien .
-->Pour cette page ça donne ceci: https://forum.ubuntu-fr.org/viewtopic.php?id=2061570
Ceci dit, tu peux te contenter de créer une nouvelle discussion que tu pourrais nommer, par exemple "Comment envoyer un mail avec python" puisque c'est cela qui semble te préoccuper. Je t'y répondrais
édit:
je lis:
while cpt < 3:
prenom = input(str('Veuillez entrer votre prenom :\n'))
if prenom in d.values():
break
print("Prenom inconnu ")
cpt += 1
if cpt >= 3:
print("Vous pouvez creer un compte client .")
nouveau_client()
Ce serait plutôt:
cpt =0
while True:
if prenom:= input('Veuillez entrer votre prenom :\n') in d.values():
break
print("Prenom inconnu ")
cpt += 1
if cpt == 3:
print("Vous pouvez creer un compte client .")
nouveau_client()
break
Cependant, ce n'est pas le prénom qu'il faut demander mais le mdp qui lui est unique(il peut y avoir plusieurs prénoms identiques)
édit2:
Je lis :
password_recovery = [x for x,v in d.items()if v == prenom]
a = " Votre mot de passe :"
b = str(password_recovery)
message = a + b
?? avec un dico on utilise une compréhention de dictionnaire. et puis mettre ça ici ça n'a pas de sens
Dernière modification par Compte supprimé (Le 06/02/2021, à 21:59)
#14 Le 06/02/2021, à 22:14
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
Je pense que tu devrais laisser de côté ton projet et y revenir dans quelque temps lorsque tu auras avancé ton mooc.
Pour construire une maison on commence par faire une fondation solide sans quoi elle s'écroule au moindre vent.
Il en est de même en programmation
N'hésite pas à utiliser le forum pour des questions précises.
Voici mon conseil : travaille tes bases, fini le mooc, fais les exercices de tes cours et tu réaliseras ton projet les doigts dans le nez:)
#15 Le 07/02/2021, à 19:04
- chris7522
Re : [RESOLU] Utilisation format JSON (python)
Merci de ton aide .
Je vais suivre tes sages conseils et finir le mooc !
C'est vrai que je ne maitrise pas grand chose pour le moment . Je sais que l'apprentissage des bases est indispensable mais , j'ai l'impression de retenir peu de chose .
En revanche , lorsque j'essaie de reproduire un mini projet fun et amusant , je mémorise beaucoup plus facilement .
C'est peut etre intéressant de faire les deux pour progresser plus rapidement . Qu'en pensez vous ?
Dernière modification par chris7522 (Le 07/02/2021, à 20:06)
Hors ligne
#16 Le 08/02/2021, à 21:08
- Compte supprimé
Re : [RESOLU] Utilisation format JSON (python)
lorsque j'essaie de reproduire un mini projet fun et amusant , je mémorise beaucoup plus facilement
Idem. On apprend aussi avec le coeur. Et puis lorsque quelque chose est source de plaisir pourquoi s'en priver?
C'est peut etre intéressant de faire les deux pour progresser plus rapidement . Qu'en pensez vous ?
(de mon point de vu) oui si ton code utilise ce que tu as déjà appris mais pas forcément assimilé.
Par contre, je pense que te pencher sur des librairies comme smtplib, ne t'apprendra pas à mieux utiliser python. (mais ça peut éventuellement à t'exercer à lire la doc)