Je dois donc créer un code qui valide si un mot de passe:
Voici le code:
def validate():
while True:
password = input("Enter a password: ")
if len(password) < 8:
print("Make sure your password is at lest 8 letters")
Elif not password.isdigit():
print("Make sure your password has a number in it")
Elif not password.isupper():
print("Make sure your password has a number in it")
else:
print("Your password seems fine")
break
validate()
Je ne sais pas ce qui ne va pas, mais lorsque je saisis un mot de passe comportant un numéro, il ne cesse de me dire que j'ai besoin d'un mot de passe comportant un numéro. Des solutions?
Vous pouvez utiliser le module re
pour les expressions régulières.
Avec cela, votre code ressemblerait à ceci:
import re
def validate():
while True:
password = raw_input("Enter a password: ")
if len(password) < 8:
print("Make sure your password is at lest 8 letters")
Elif re.search('[0-9]',password) is None:
print("Make sure your password has a number in it")
Elif re.search('[A-Z]',password) is None:
print("Make sure your password has a capital letter in it")
else:
print("Your password seems fine")
break
validate()
password.isdigit()
ne vérifie pas si le mot de passe contient un chiffre, il vérifie tous les caractères en fonction de:
str.isdigit (): Renvoie true si tous les caractères de la chaîne sont des chiffres et s'il y a au moins un caractère, false sinon.
password.isupper()
ne vérifie pas si le mot de passe a une majuscule, il vérifie tous les caractères en fonction de:
str.isupper (): Renvoie true si tous les caractères en majuscule de la chaîne sont en majuscule et s'il existe au moins un caractère en majuscule, false sinon.
Pour une solution, veuillez vérifier la question et la réponse acceptée à vérifier si une chaîne contient un nombre .
Vous pouvez créer votre propre fonction hasNumbers()
- (copiée à partir d'une question liée):
def hasNumbers(inputString):
return any(char.isdigit() for char in inputString)
et une hasUpper()
- function:
def hasUpper(inputString):
return any(char.isupper() for char in inputString)
r_p = re.compile('^(?=\S{6,20}$)(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^A-Za-z\s0-9])')
ce code validera votre mot de passe avec:
Vous vérifiez les méthodes isdigit et isupper sur l'intégralité de l'objet chaîne de mot de passe, et non sur chaque caractère de la chaîne. Ce qui suit est une fonction qui vérifie si le mot de passe répond à vos exigences spécifiques. Il n'utilise pas de contenu regex. Il imprime également tous les défauts du mot de passe entré.
#!/usr/bin/python3
def passwd_check(passwd):
"""Check if the password is valid.
This function checks the following conditions
if its length is greater than 6 and less than 8
if it has at least one uppercase letter
if it has at least one lowercase letter
if it has at least one numeral
if it has any of the required special symbols
"""
SpecialSym=['$','@','#']
return_val=True
if len(passwd) < 6:
print('the length of password should be at least 6 char long')
return_val=False
if len(passwd) > 8:
print('the length of password should be not be greater than 8')
return_val=False
if not any(char.isdigit() for char in passwd):
print('the password should have at least one numeral')
return_val=False
if not any(char.isupper() for char in passwd):
print('the password should have at least one uppercase letter')
return_val=False
if not any(char.islower() for char in passwd):
print('the password should have at least one lowercase letter')
return_val=False
if not any(char in SpecialSym for char in passwd):
print('the password should have at least one of the symbols $@#')
return_val=False
if return_val:
print('Ok')
return return_val
print(passwd_check.__doc__)
passwd = input('enter the password : ')
print(passwd_check(passwd))
Peut-être que vous pouvez utiliser l'expression regex:
re.search(r"[A-Z]", password)
Vérifiez les lettres majuscules.
re.search(r"[0-9]", password)
Vérifiez les chiffres dans le mot de passe.
Python 2.7 La boucle for attribuera un numéro de condition à chaque caractère. c’est-à-dire que Pa $$ dans une liste serait = 1,2,4,4,2,3,2,2,5. Puisque les ensembles ne contiennent que des valeurs uniques, l’ensemble aurait = 1,2,3,4,5; Par conséquent, puisque toutes les conditions sont remplies, la longueur de l'ensemble serait = 5. si elle était pa $$ w, l'ensemble = 2,4 et que len serait = 2, donc non valide.
name = raw_input("Enter a Password: ")
list_pass=set()
special_char=['#','$','@']
for i in name:
if(i.isupper()):
list_pass.add('1')
Elif (i.islower()):
list_pass.add('2')
Elif(i.isdigit()) :
list_pass.add('3')
Elif(i in special_char):
list_pass.add('4')
if len(name) >=6 and len(name) <=12:
list_pass.add('5')
if len(list_pass) is 5:
print ("Password valid")
else: print("Password invalid")
isdigit()
vérifie si la chaîne entière est un chiffre , pas si la chaîne contient un chiffre Renvoie true si tous les caractères de la chaîne sont des chiffres et s'il y a au moins un caractère, false sinon.
isupper()
vérifie que la chaîne entière est en majuscule , pas si la chaîne contient au moins un caractère majuscule. Renvoie true si tous les caractères en majuscule de la chaîne sont en majuscule et qu'il y a au moins un caractère en majuscule, false sinon.
Ce dont vous avez besoin, c’est d’utiliser la fonction intégrée any
:
any([x.isdigit() for x in password])
retournera True si au moins un chiffre est présent dans password
any([x.isupper() for x in password])
retournera True si au moins un caractère est considéré comme majuscule.