Signaler

Une boucle qui ne boucle pas [Résolu]

Posez votre question Jakes - Dernière réponse le 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 
Utile
+0
moins plus
"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] 4060Messages postés mercredi 15 septembre 2004Date d'inscription ContributeurStatut 8 décembre 2016 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 :-)
Répondre
Jakes- 22 nov. 2016 à 17:54
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
Répondre
Ajouter un commentaire
Utile
+0
moins plus
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.
Jakes- 22 nov. 2016 à 18:18
Merci beaucoup !!
Répondre
le père. 5718Messages postés mardi 15 mai 2012Date d'inscription 10 décembre 2016 Dernière intervention - 22 nov. 2016 à 18:36
De rien :-)
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !