Menu

Une boucle qui ne boucle pas [Résolu/Fermé]

Jakes - 22 nov. 2016 à 17:00 - Dernière réponse : le père. 6042 Messages postés mardi 15 mai 2012Date d'inscription 17 avril 2018 Dernière intervention
- 22 nov. 2016 à 18:36
Bonjour,
J'aimerais faire un générateur de mot de passe en python, et l'utilisateur doit rentrer le nombre de caractères, le nombre de mot de passe à générer et si il y a des caractères spéciaux ou non.
Mais la boucle while x != cmbne boucle pas. Le générateur marche très bien, mais il génère toujours le même mot de passe si on lui dit d'en générer plusieurs !! Je ne vois pas l'erreur dans mon code pouvez vous m'aider ?
Le code :
# -*- coding:Latin-1 -*
import os
import time
from random import randint
lettres='abcdefghijklmnopqrstuvwxyz'
maj_lettres=lettres.upper()
car_spc='&#^<>$%*-'
chfs='0123456789'
nb=None
combien=None
i=0
x=0
pw=''
nb_a_random=25
print('Bienvenue dans le générateur de mot de passe.')
print("""Conseils :
                  *Utilisez au moins 8 caractères dans un mot de passe
                  *Utilisez majuscules, chiffres et caractères spéciaux pour un mot de passe fort
                  *Pour vous en souvenir, pensez à un mot pour chaque lettre""")
os.system('pause')
while not combien:
    try:
        cmb=int(input('Combien de mots de passe générer ? '))
        break
    except:
        print('Veuillez renseigner votre choix !!') 
while not nb:
    try:
        nb_car=int(input('\nCombien de caractères le mot de passe doit-il contenir ? '))
        if nb_car < 1:
            print('Le mot de passe doit contenir au moins 1 caractère !!')
            nb=True
        else:
            nb2=None
        while not nb2:
            print('\nVeuillez renseigner votre choix par Y pour oui ou N pour non.')
            chf=input('Le mot de passe doit-il contenir des chiffres ? ')
            maj=input('Le mot de passe doit-il contenir des majuscules ? ')
            spc=input('Le mot de passe doit-il contenir des caractères spéciaux ? ')
            if chf.lower() != 'y' and chf.lower() != 'n':
                print('\nVeuillez renseigner si vous voulez des chiffres ou non dans votre mot de passe.')
            if maj.lower() != 'y' and maj.lower() != 'n':
                print('\nVeuillez renseigner si vous voulez des majuscules ou non dans votre mot de passe.')
            if spc.lower() != 'y' and spc.lower() != 'n':
                print('\nVeuillez renseigner si vous voulez des caractères spéciaux ou non dans votre mot de passe.')
            else:
                break
        break
    except:
        print('\nVeuillez renseigner votre choix.')
if maj.lower() == 'y':
    lettres+=maj_lettres
    nb_a_random+=25 
if spc.lower() == 'y':
    lettres+=car_spc
    nb_a_random+=8
if chf.lower() == 'y':
    lettres+=chfs
    nb_a_random+=9

while x != cmb:
    while i != nb_car:
        car_random=randint(0,nb_a_random)
        pw+=lettres[car_random]
        i+=1
    print('\n[{0}] : Votre mot de passe a été généré : {1}'.format(time.strftime('%H:%M:%S'),pw))
    time.sleep(1)
    x+=1

Merci d'avance pour votre aide.
Afficher la suite 

6 réponses

Rocailleux 542 Messages postés mercredi 9 mars 2016Date d'inscription 8 mars 2018 Dernière intervention - 22 nov. 2016 à 17:39
0
Utile
2
"Mais la boucle while x != cmb ne boucle pas."

Soit il y a un bug dans python ! Soit x est égal à cmb et la condition n'est plus validée
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 22 nov. 2016 à 17:53
Oui, et pour le générateur, cela pourrai marcher mieux en l'initialisant avec seed, je pense :-)
J'ai fait une erreur : en fait, la boucle boucle et met autant de mot de passe qu'on lui demande, mais toujours le même
une capture d'écran de ce que le code fait : http://prnt.sc/dagob3
le père. 6042 Messages postés mardi 15 mai 2012Date d'inscription 17 avril 2018 Dernière intervention - 22 nov. 2016 à 18:09
0
Utile
2
Bonjour

Après avoir généré un mot de passe, tu ne réinitialises pas pw ni i.
Donc quand tu re-rentres dans ta boucle, i est déjà égal à nb_car, donc tu ne re-génères aucun mot de passe.
Merci beaucoup !!
le père. 6042 Messages postés mardi 15 mai 2012Date d'inscription 17 avril 2018 Dernière intervention > Jakes - 22 nov. 2016 à 18:36
De rien :-)