【问题标题】:Creating a Password Criteria Module for Python 3为 Python 3 创建密码标准模块
【发布时间】: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个特殊字符。

标签: python module passwords


【解决方案1】:

我只是要指出明显的错误:

你应该像这样收集函数返回的值

valid = isFiveCharacters(inputString)
# then just use the boolean values with an `and`
valid = valid and hasUpperCase(inputString)
valid = valid and hasNumbers(inputString)
# and so on
# then use
if valid:
    print("Valid Password")
else:
    print("Invalid Password")

我建议详细阅读函数 return 语句和 while 循环,并清楚地了解它们的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多