Python 如何检查密码要求?

Python 如何检查密码要求?,python,pandas,string,loops,data-cleaning,Python,Pandas,String,Loops,Data Cleaning,我有一个包含982个用户名和密码的数据库,我想用以下四个标准来计算坏密码的比率: 密码要求: 1-长度必须至少为10个字符 2-必须至少包含: 一个小写字母 一个大写字母 一个数字字符 一个非字母数字字符 3-不得包含短语密码(不区分大小写) 4-不得包含用户的名字或姓氏,例如,如果用户的名字是John Smith,则为SmItH876!不是有效的密码 我写了以下代码,结果是0.64,但正确答案是0.75,我无法理解我做错了什么。 这是最新的 #导入模块 作为pd进口熊猫 将numpy作为n

我有一个包含982个用户名和密码的数据库,我想用以下四个标准来计算坏密码的比率:

密码要求:

1-长度必须至少为10个字符

2-必须至少包含:

  • 一个小写字母
  • 一个大写字母
  • 一个数字字符
  • 一个非字母数字字符
3-不得包含短语密码(不区分大小写)

4-不得包含用户的名字或姓氏,例如,如果用户的名字是John Smith,则为SmItH876!不是有效的密码

我写了以下代码,结果是0.64,但正确答案是0.75,我无法理解我做错了什么。 这是最新的

#导入模块
作为pd进口熊猫
将numpy作为np导入
df=pd.read\u csv('dataset/logins.csv'))
#打印(df.info())
打印(测向头(10))
#创建名字和姓氏
名字=[]
姓氏=[]
对于ind,df.iterrows()中的行:
拆分=行['username']。拆分('.'))
first_names.append(拆分的[0])
last_names.append(拆分的[1])
df['first_name']=first_name
df['last_name']=姓氏
打印(测向头(10))
#检查标准
结果=[]
密码='password'
对于ind,df.iterrows()中的行:
var=行['password']
#核对总数
检查=正确
#检查标准1-长度
如果len(var)<10:
检查=错误
#检查条件3-密码短语
变量lower()中的elif密码:
检查=错误
#检查标准4-姓名和姓氏
elif(变量lower()中的行['first_name']或变量lower()中的行['last_name']:
检查=错误
#检查标准2-字符
其他:
检查\u l=错误
检查\u=False
检查\u nu=False
检查\u an=False
对于var中的char:
如果char.islower():
检查是否为真
打破
对于var中的char:
如果char.isupper():
检查_=True
打破
对于var中的char:
如果char.isnumeric():
检查\u nu=True
打破
对于var中的char:
如果char.isalnum():
检查\u an=True
打破
如果(check\u l==False或check\u==False或check\u nu==False或check\u an==False):
检查=错误
结果。追加(检查)
打印(结果)
#计算错误密码的数量
结果_len=len(结果)
结果_真=总和(结果)
错误通过=(结果长度-结果长度)/结果长度
错误通过=轮(错误通过,2)
打印(错误通过)

尝试打印每个密码检查对,查看哪些密码检查对在应该为真时没有返回真,反之亦然。从那里您可以调试isI无法下载数据集的问题。
#Import modules
import pandas as pd
import numpy as np
df = pd.read_csv('datasets/logins.csv')
#print(df.info())
print(df.head(10))

#Create first name and last name
first_names = []
last_names = []

for ind, row in df.iterrows():
    splitted = row['username'].split('.')
    first_names.append(splitted[0])
    last_names.append(splitted[1])

df['first_name'] = first_names
df['last_name'] = last_names
print(df.head(10))

#Check criterias
result = []
password= 'password'

for ind, row in df.iterrows():

    var = row['password']

    #check total
    check = True

    #check criteria 1 - length
    if len(var) < 10:
        check = False

    #check criteria 3 - password phrase
    elif password in var.lower():
        check = False

    #check criteria 4 - first and last name
    elif (row['first_name'] in var.lower() or row['last_name'] in var.lower()):
        check = False

    #check criteria 2 - characters
    else:
        check_l = False
        check_u = False
        check_nu = False
        check_an = False
    
        for char in var:    
            if char.islower():
                check_l = True
                break
        for char in var:
            if char.isupper():
                check_u = True
                break
        for char in var:
            if char.isnumeric():
                check_nu = True
                break
        for char in var:
            if char.isalnum():
                check_an = True
                break
        
        if (check_l == False or check_u == False or check_nu == False or check_an == False):
            check = False
                      
    result.append(check)
       
print(result)


#Calculate number of bad passwords
result_len = len(result)
result_true = sum(result)
bad_pass = (result_len - result_true) / result_len
bad_pass = round(bad_pass, 2)
print(bad_pass)