Une boucle qui ne boucle pas

Résolu/Fermé
Jakes - 22 nov. 2016 à 17:00
 Utilisateur anonyme - 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.

2 réponses

Utilisateur anonyme
22 nov. 2016 à 17:39
"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
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
22 nov. 2016 à 17:53
Oui, et pour le générateur, cela pourrai marcher mieux en l'initialisant avec seed, je pense :-)
0
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
0
Utilisateur anonyme
22 nov. 2016 à 18:09
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.
0
Merci beaucoup !!
0
Utilisateur anonyme > Jakes
22 nov. 2016 à 18:36
De rien :-)
0