Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mot de passe vérificateur

    19 octobre 2020 à 16:11:06

    Bonjour, je suis bloqué à un endroit de mon exercice, voici le sujet :

    3.1- Ecrire un programme qui saisit une chaîne de caractères « s » représentant un mot de passe. Le programme doit vérifier que « s » respecte les critères suivants : • Le mot de passe doit contenir un minimum de 4 et un maximum de 12 caractères. • Un mot de passe doit contenir des lettres minuscules, majuscules, chiffres et au moins 1 caractère non alphanumérique : = _ & ? # * $ @ { } + ( ) : , ; ! '' ' . e • Le mot de passe ne peut pas contenir des espaces. Si le mot de passe est valide, le programme affiche valide, sinon il affiche invalide 3.2- Le programme doit ensuite vérifier qu’il s’agit bien d’un utilisateur humain et non pas pas d’un ordinateur. Pour cela il génère aléatoirement une suite de chiffres et de lettres qu’il affiche à l’utilisateur en lui demandant de les saisir séparés avec un caractère spécial (le nombre de caractères est aléatoire entre 5 et 10 et le caractère spécial est généré aléatoirement aussi). Si la saisie correspond à ce qui est attendu alors le mot de passe est validé définitivement sinon un nouvel essai est proposé à l’utilisateur. Si le nombre d’essais est supérieur 10 alors l’utilisateur est rejeté définitivment.

    J'ai réusis le 3.1 mais je suis bloqué au 3.2, en effet lorsque je met random.choice(string.ascii_letters) cela me marque :AttributeError: 'builtin_function_or_method' object has no attribute 'choice'

    Voici mon code : 

    import random
    import string
    from random import*
    majuscules = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    minuscules='abcdefghijklmnopqrstuvwxyz'
    chiffres = '0123456789'
    caractere= '_?#*$@{+[:,;!"\''
    espace=''
    s = input("entrez un mdp")
    confirm = False
    
    while confirm == False:
        if len(s) > 4 and len(s) < 12:
            if True in (car in majuscules for car in s) and \
                    True in (car in chiffres for car in s) and \
                    True in (car in minuscules for car in s)and \
                    True in (car in caractere for car in s) and \
                    False in (car in espace for car in s):
                confirm = True
    
        if confirm == True:
            print("Valide")
        else:
            print("Invalide")
        s=input()
    
    liste1 = []
    for i in range(randint(5,10)):
        liste1.append(randint(5,10))
    a = random.choice(string.ascii_letters)
    print(a)



    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2020 à 19:04:00

      c'est le fait d'avoir mis from random import * qui fait que tu dois passer directement par choice(string.ascii_letters) 
      avec juste la 1ère ligne (import random) là ta ligne serait bonne
      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2020 à 8:03:56

        Cette condition :

        if True in (car in majuscules for car in s)

        est la même que :

        if any(car in majuscules for car in s)

        ou encore que :

        if set(s) & set(majuscules)





        • Partager sur Facebook
        • Partager sur Twitter
          20 octobre 2020 à 10:10:54

          umfred a écrit:

          c'est le fait d'avoir mis from random import * qui fait que tu dois passer directement par choice(string.ascii_letters) 
          avec juste la 1ère ligne (import random) là ta ligne serait bonne


          Si j'enleve cette ligne, mon randint dans ma liste marche pas
          • Partager sur Facebook
          • Partager sur Twitter
            20 octobre 2020 à 10:24:12

            oui mais quand tu fais random import *, ça écrase random, parce qu'il y a une fonction random.random.

            Tu devrais plutôt faire :

            from random import choice, randint

            -
            Edité par thelinekioubeur 20 octobre 2020 à 10:24:22

            • Partager sur Facebook
            • Partager sur Twitter

            Mot de passe vérificateur

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown