19. 密码强度数据分析

 

18. 查找文件

在 password.txt 中存储了某系统中,一些用户的用户名和他们设置的密码,存储时,每行存储 5 个数据,奇数行为用户名,偶数行为对应的密码:

现在需要将其转换为一个序表,包括 ID,USER,PASSWORD 和 LEVEL4 个字段。其中 LEVEL 字段需要对设置的密码执行强度分析,强度最高 5 级,以下要求每达成一项强度加 1:①包含小写字母②包含大写字母③包含数字或小数点④包含其它字符⑤密码长度不小于 8 个字符。请列出哪些用户的密码强度小于 3。

参考答案:

解答:

A B C D
1 password.txt =file(A1).read()
2 =B1.split@bn(“\t”)
3 =A2.step(2,1).conj() =A2.step(2,2).conj()
4 =create(ID,USER,PASSWORD,LEVEL) >A4.modify(0:A3,#:ID,~:USER,B3(#):PASSWORD)
5 for A4 =A5.PASSWORD.split() =0 =0
6 =0 =0 =if(B5.len()>=8,1,0)
7 for B5 if islower(B7) >C5=1
8 else if isupper(B7) >D5=1
9 else if isdigit(B7) || B7==“.” >B6=1
10 else >C6=1
11 >A5.LEVEL=C5+D5+B6+C6+D6
12 =A4.select(LEVEL<3)

B1 将文件中的数据全部读为一个字符串,A2 用s.split 函数将其拆分,@n 选项将其数据按行拆开,再在每一行中使用设置的分隔符参数继续拆分;由于数据中存储的密码包含特殊字符,因此还需要添加 @b 选项,避免其中可能包含的括号或者引号影响拆分效果。执行后 A2 结果如下:

可以看到,数据中的每一行都被用制表符 \t 为分隔符拆分为了序列。A3 和 B3 中用A.step()函数隔行获取数据,分别获得用户名和密码,并执行 A.conj() 得到全部的用户名和密码序列。

A4 新建结果序表,在 B4 中用T.modify() 函数,将 A4 和 B4 中的数据填入序表。新建报表也可以用A.new()去直接生成,新增记录时也可以循环调用 T.insert()。A5 执行循环,判断每位用户的密码强度。在 5~11 行中,通过判断密码的总长度,以及每个字符的种类,获知其是否满足各项强度条件。在 B11 中,计算最终的密码强度并设入 LEVEL 字段。循环执行后,A4 得到的全部数据如下:

之后只需选出密码强度较小的用户列表即可。


20. 用跨网游标处理多行大数据
目录和习题数据