我正在为学校的计算课做一些工作,我们需要输入密码。输入需要介于6到12个字符之间,并且包含大写,小写和数字。到目前为止我有这个:
import sys
import os
def checkPass():
passLoop = True
while passLoop:
print("Welcome user!")
x = len(input("Please enter your password, between 6 and 12 characters. "))
if x < 6:
print("Your password is too short")
r = input("Please press any key to restart the program")
elif x > 12:
print("Your password is too long")
r = input("Please press any key to restart the program")
else:
print("Thank you for entering your password.")
print("Your password is strong. Thank you for entering!")
passLoop = False
checkPass()
我需要你的帮助来检查大写,小写和整数。我只是年轻,所以请不要太苛刻!
答案 0 :(得分:2)
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d).{6,12}$
你可以试试这个。这个用re
。
您可以像
一样使用它import re
if re.match(r"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d).{6,12}$",pass,re.M):
print "valid"
else:
print "invalid"
参见演示。
答案 1 :(得分:0)
any
功能与地图结合可能会有所帮助。 map函数迭代给定字符串的所有字符,并通过给定的lambda函数进行测试(如果字符是大写字母)。由map函数
>>> any(map(lambda a:a.isupper(),"aba"))
False
>>> any(map(lambda a:a.isupper(),"aBa"))
True
你可以把它包装成一个单独的函数,比如
>>> def test(passwd,func):
return any(map(func,passwd))
>>> test("aBa",str.isupper)
True
>>> test("ab0",str.isdigit)
True
>>> test("aBa",str.islower)
True
答案 2 :(得分:0)
我们假设您将密码存储在名为passwd的变量中。 然后我们可以采用您的文字要求并为它们编写检查:
输入需要介于6到12个字符之间
if not 6 <= len(passwd) <= 12: ...
并包含大写,
if not any(c.isupper() for c in passwd): ...
小写
if not any(c.islower() for c in passwd): ...
及其中的数字。
if not any(c.isdigit() for c in passwd): ...
旁注:你真的不应该限制密码的长度。