|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 luoydqsn 于 2019-3-24 23:52 编辑
14讲课后习题最后一题,验证输入密码的安全程度
大佬们,小白有疑问!!简单来说就是三点:
1. 用 for 语句对字符串进行迭代时(不知道这种表达对不对),是不是存在类似文件内容指针的东西,
有的话如何归零?(我的代码最大的问题出现在这,我以为是有这种东西的,可是找不到方法。。。)
(下面有 idle 截图说明具体情况)
2. 假设第一点成立,那我的代码中的 continue 语句的计算速度是不是优于小甲鱼的?(以下有小甲鱼的部分代码)
3. 小白上路,好不好容易完成了小甲鱼的课后习题并且成功运行,先激动一下!然后请问有什么细节地方需要注意?
(代码根据小甲鱼的答案已优化成自己喜欢的样子,嘻嘻嘻)
以下是我的代码:第一个问题的相关内容,在上下分割线之间
- print("=" * 20 + "RESTART" + "=" * 20)
- # 新手上路,用最笨的方法定义列表了。。。
- list1 = ['~','!','@','#','%','^','&','*',
- '(',')','_','=','-','/','.','?','<',
- '>',';',':','[',']','{','}','|','\\'] # \\实力坑爹!
- list2 = ['0','1','2','3','4','5','6','7','8','9']
- list3 = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z']
- shuoming = """
- 请按以下方式提升您的密码安全级别:
- \t1.密码必须由数字、字母及特殊字符三种组合
- \t2.密码只能由字母开头
- \t3.密码长度不低于16位
- """
- mima = input(">>>\n请输人需要检查的密码组合:")
- # 判断密码是否为空或者全是空格
- while mima.isspace() or len(mima) == 0:
- mima = input("您输入的密码为空(或空格),请重新输入:")
- string = 0
- num = 0
- pha = 0
- # =============此处为上分割线===============
- # 将密码的字符进行逐个验证
- # 考虑到以下四种情况在同一字符下不可能有共存现象
- # 因而试着用continue语句来减少计算时间
- for i in mima:
- if i in list1:
- string = 1
- continue
- elif i in list2:
- num = 1
- continue
- elif i in list3:
- pha = 1
- continue
- else:
- print(f"密码中不能含有‘{i}’号")
- mima = input("密码不符合要求,请重新输入:")
- # =============此处为下分割线=============
- print("您的密码安全级别评定为:", end = '')
- if (len(mima) <= 8) or (string + num + pha == 1):
- print("低")
- print(shuoming)
-
- elif (len(mima) > 16) and (mima[0] in list3) and (string + num + pha == 3):
- print("高")
- print("请继续保持")
-
- else:
- print("中")
- print(shuoming,end = '')
复制代码
、字符并不在规定列表中,重输入之后出现问题,似乎是类似指针的东西导致的
以下是小甲鱼的部分代码:(考虑到隐私问题,不敢复制全部,大佬应该猜得到这是啥的吧)
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con += 1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con += 1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con += 1
break
1.不用你管,系统会自己处理
2.不优于小甲鱼的
3.太啰嗦,现成BIF可以满足要求
|
|