【发布时间】:2018-08-16 07:43:54
【问题描述】:
所以这就是问题所在。我有一系列函数可以检查来自用户的 inputString 是否满足所有设置的密码条件:
- 密码长度必须至少为 5 个字符
- 密码必须至少包含一个大写字母
- 密码必须至少包含两个数字
- 密码不能包含字符“E”或“e”
- 密码必须至少包含一个非字母数字字符。
- 密码可能不是常用密码:'password', '12345', 'qwerty'、'letmein'、'trustno1'、'000000'、'passw0rd、'密码'
我的最后一个函数试图将所有定义的函数收集到一个可用的模块函数中。运行程序没有错误,但有一个错误总是打印,“无效!密码必须包含特殊字符。”为什么呢?你们建议哪些其他错误或修复以使此代码更高效或更具可读性?
def isFiveCharacters(inputString):
while len(inputString) > 5:
return True #print('Contains at least 5 characters, ')
else:
print('Invalid! Password must cantain more than 5 characters')
return False
def hasUpperCase(inputString):
x = any(char.isupper() for char in inputString)
if x == True:
return True #print ('an uppercase letter, ')
if x == False:
print('Invalid! Password must contain an upper case letter')
return False
def hasNumbers(inputString):
count = 0
for char in inputString:
if char == char.isdigit():
count += 1
if count >= 2:
#print ('two numbers, ')
return True
elif count < 2:
print ('Invalid! Password must contain two numbers')
return False
def hasLetterE(inputString):
for char in inputString:
if 'E' and 'e' in inputString:
print('Invalid! Password cannot contain the letter "E"')
return False
else:
#print('does not contain the letter E, ')
return True
#if 'e' in inputString:
# print('Password cannot contain the letter "e"')
# return None
def nonAlphaNumChar(inputString):
special_char = ['!','@','$','%','#','^','&','*']
if inputString == special_char * 2:
#print('a special character, ')
return True
else:
print('Invalid! Password must contain a special character')
return None
def usedPasswords(inputString):
used_passwords = ('password','12345','qwerty','letmein','trustno1','000000','passw0rd','Password')
if used_passwords == inputString:
print('Invalid! Password must be original.')
return False
def passwordCriteria(inputString):
isFiveCharacters(inputString)
hasUpperCase(inputString)
hasNumbers(inputString)
hasLetterE(inputString)
nonAlphaNumChar(inputString)
usedPasswords(inputString)
while inputString == True:
print('Valid Password')
return True
if inputString == False:
print('Error, invalid password')
return False
return None
【问题讨论】:
-
顺便说一句,cmets 只是注释掉了几行代码,别想太多了,哈哈
-
if input_string == special_char * 2这一行完全没有意义。你认为这意味着什么? -
我的意思是检查字符串是否包含至少2个特殊字符。