繁体   English   中英

编写密码有效性检查 function

[英]Writing a password validity check function

我最近开始学习 Python 并在遇到以下情况时开始处理场景:

问:某网站要求用户输入用户名和密码进行注册。 编写一个程序来检查用户输入的密码的有效性。 以下是检查密码的标准: 1. [az] 之间至少 1 个字母 2. [0-9] 之间至少 1 个数字 1. [AZ] 之间至少 1 个字母 3. [$ 之间至少 1 个字符#@] 4. 交易密码的最小长度:6 5. 交易密码的最大长度:12 您的程序应该接受一系列以逗号分隔的密码,并将根据上述标准检查它们。 将打印符合条件的密码,每个密码用逗号分隔。 示例 如果输入以下密码作为程序的输入: ABd1234@1,a F1#,2w3E ,2We3345 那么程序的 output 应为: ABd1234@1*

我解决问题的方法是以下代码:

'''

def validity_check(pword):
return \
    (any(i.islower() for i in pword)) and \
    (any(i.isnumeric() for i in pword)) and \
    (any(i.isupper() for i in pword)) and \
    (any((i == "$" or i == "#" or i == "@") for i in pword)) and \
    (6 <= len(pword) < 13)

raw_input = input("Please enter a series of passwords to check, separated by a comma: ")
raw_list = raw_input.split(",")
valid_pwords = []
for i in raw_list:
    if validity_check(i) == True:
        valid_pwords.append(i)
print(",".join(valid_pwords))

'''

我的解决方案似乎有效,但我的问题是关于可读性。 自从开始这些 Python 问题以来,我已经有点痴迷于尽可能少的代码行。 程序可以更短吗? 我选择使用带有三元运算符的单个 function,这会影响可读性吗?

另外,由于我是 Python 的新手,因此非常欢迎对该程序的任何帮助和批评!

你可以使用正则表达式来解决这个问题,我认为它会帮助你,

import re

pattern = r'^([^a-z]*|[^A-Z]*|[^0-9]*|[^#$@]*)$'

wordlist = list(map(str,input("Please enter a series of passwords to check, separated by a comma: ").split(',')))
for i in wordlist:
    if not(re.match(pattern,i)) and (5<len(i) and len(i)<13):
       print(i)

注意:此正则表达式模式匹配不属于此类别的密码,并且在 if 语句中,它对有效密码返回 true。

谢谢 !

PEP 8对格式化您的validity_check检查 function 有一些具体建议:

  • 更喜欢使用括号内的隐式续行而不是使用反斜杠的显式续行
  • 将二元运算符放在连续行的开头。

此外,由于您有一堆 Boolean 值and一起编辑,因此首先执行最便宜的值。 尤其是在这里,您想在 go 之前拒绝一个长度错误的密码,以免重复多次以验证其他条件。

最后,与多个相等性检查相比,更喜欢包含检查,并删除多余的括号。

def validity_check(pword):

    return (6 <= len(pword) < 13
            and any(i.islower() for i in pword)
            and any(i.isnumeric() for i in pword)
            and any(i.isupper() for i in pword)
            and any(i in "$#@" for i in pword))

任何更短的内容都可能比描述它更能掩盖你正在做的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM