Besoin d'aide !! programme sur Python (mot de passe) amateur [Résolu/Fermé]

Signaler
Messages postés
11
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
6 mai 2015
-
Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
-
Bonjour !

Voila je suis en terminal et je fais ISN
J'ai un petit projet à faire sur le thème du mot de passe.... j'ai presque terminé le programme mais j'ai un souci !
Les conditions sont : -le mot de passe doit faire plus de 4 caractères
-et moins de 10
-il doit avoir 1 chiffre et 1 majuscule au minimum

Je travail sur Python et voilà ce que j'ai fait :

#conditions
def test (mdp) :
 satisfaisant = True
 
 if not len (mdp) > 4 :
  print ("mot de passe trop court" )
  satisfaisant = False
   
 if not len (mdp) < 10 :
  print ("mot de passe trop long" )
  satisfaisant = False
   
 chiffre_present = False
 i = "1234567890"
 for c in mdp :
  if c in i :
   chiffre_present = True
  else :
   chiffre_present = False
   satisfaisant = False
   print ("un chiffre minimum" )
 
 if not () :
  i = "AZERTYUIOPQSDFGHJKLMWXCVBN"  
  for c in mdp :
   if not c in i :
    satisfaisant = False
  print ("une majuscule minimum" )
   
 return satisfaisant  
 
 
#Fonction principale
mdp = input ("entrez un mot de passe : " )
 
while test(mdp)==False :
 print ("Erreur dans le mot de passe" )
 mdp = input ("entrez un nouveau mot de passe : " )
 
#Si toutes les conditions sont bonnes :
else :
 mdp2 = input ("répetez le mot de passe : " )
 while mdp != mdp2 :  
  print ("mot de passe incorrect" )  
  mdp2 = input ("mot de passe non identique réesseyer : " )
 else :
  print ("Mot de passe correct. Bravo !" )


Tout fonctionne sauf pour les chiffres et majuscules .... j'ai essaye plusieurs choses mais au finale soit il ignore la commande ; soit il vérifie chaque caractère du mot de passe un par un et pour chacun d'eux il écrit "un chiffre minimum"

Bref j'ai grand besoin de votre aide rapidement !!!


EDIT: Ajout de la coloration syntaxique.

2 réponses

Messages postés
15137
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 novembre 2020
617
Bonjour, écrire en gras et mettre des mots comme "rapidement" ou "urgent" font en général fuir ceux qui pourraient répondre.

Le gras fait agressif, et il n'y a rien d'urgent ou de pressé pour le bénévole aidant.


Ceci dit, je ne connais pas Python, mais pour ce type de travail la regex est l'outil idéal. Cette fonction existe en python

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
11
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
6 mai 2015

oui tu as surement raison mais c'est la première fois que je demande quelque chose sur un forum .... j'ai regardé un peu d'autres demandes et vue que la plus part des fois c'était rédiger dans ce style je me suis dit que c'était surement grâce à ça que les gens répondaient ....

(je suis bien d'accord avec toi !! )
sinon j'ai a peu près trouvé une solution .... c'est un peu du bricolage mais ça marche ps trop mal donc je vais faire avec je pense .....

merci quand meme !!
Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
23
Bonjour,

Pour vérifier s'il y a un caratère en masjuscule tu peux faire ceci :

nbMajuscules = sum(1 for c in mdp if c.isupper())



Pour les digits tu peux faire comme ceci :

nbDigits = sum(1 for c in mdp if c.isdigit())
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
11
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
6 mai 2015

Tout sur la meme ligne comme tu l'as écrit ???
Messages postés
11
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
6 mai 2015

chiffre_present = False
i = "1234567890"
for c in mdp :
if c in i :
chiffre_present = True
if chiffre_present :
chiffre_present = False
else :
satisfaisant = False
print ("un chiffre minimum")

maj_presente = False
i = "AZERTYUIOPQSDFGHJKLMWXCVBN"
for c in mdp :
if c in i :
maj_presente = True
if maj_presente :
maj_presente = False
else :
satisfaisant = False
print ("une majuscule minimum")


sinon j'ai bidouillé ça qui marche mais je sais pas comment ça se fait xD
Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
23
Oui, tu peux faire ceci :

if sum(1 for c in mdp if c.isupper()) :
    maj_presente  = True


Globalement c'est une boucle for qui stock chaque caractères dans "c" de "mdp" et test si ce caractère est en majuscule (ou digital avec isdigit() )
Ensuite sum fait le total.

S'il y en a pas, le total retournera 0 (autrement dit, False) s'il y en trouve, il ressortira >=1 (autrement dit True)