鱼C论坛

 找回密码
 立即注册
查看: 2821|回复: 8

请帮忙看看下面的代码问题

[复制链接]
发表于 2015-12-3 14:46:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是小甲鱼python学习14讲的课后练习题。
# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位

symbols = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\''''
numbers = '0123456789'
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

password=input("请输入密码: ")
length = len(password)
flag_con = 0
flag_len = 0
flag_upper = 0

#判断密码的组成
for each in password:
    if each in symbols:
        flag_con+=1
        break;
for each in password:
    if each in numbers:
        flag_con+=1
        continue;
for each in password:
    if each in letters:
        flag_con+=1
        continue;


#判断密码的长度
if length<8:
    flag_len = 1
if 8<=length<16:
    flag_len = 2
if length>=16:
    flag_len = 3

#判断首字母
if flag_len == 3 and password[0] in letters():
    flag_upper == 1

#判断密码级别
if flag_con == 1 and password not in sybols and flag_len == 1:
    print('密码安全性较低',end='')
if flag_con == 2 and flag_len == 2:
    print('密码安全等级为中',end='')
if flag_con == 3 and flag_len == 3 and flag_upper ==1:
    print('很好,你的密码安全等级很高,请继续保持', end='')



#######################################################################################
请帮忙看看问题出在哪呢?输入了密码之后根本不执行。谢谢啦。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-20 11:17:43 | 显示全部楼层
楼主还在学习吗?很多天不签到了,我也是刚学到这里,发现没有检测首字母的环节,之后搜索到你这个帖子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 13:15:52 | 显示全部楼层
最近不学python好久了,我也不敢确定我说的问题是否正确哈,,,,首先你的break和continue后面加分号干嘛...然后问题就出在了这里,你的continue会把for不停的执行,碰到数字或字母那个con就会加1,不停的加,,最后的判断就一个也不成立了...把continue改成break就好了..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-20 14:38:53 | 显示全部楼层
本帖最后由 小小大鱼 于 2016-2-20 14:42 编辑
ssg2006 发表于 2016-2-20 11:17
楼主还在学习吗?很多天不签到了,我也是刚学到这里,发现没有检测首字母的环节,之后搜索到你这个帖子


1.问题在最后面的判断密码级别上,flag_con是密码长度,不是级别
  1. if flag_con == 1 and password not in sybols and flag_len == 1:
  2.     print('密码安全性较低',end='')
  3. if flag_con == 2 and flag_len == 2:
  4.     print('密码安全等级为中',end='')
  5. if flag_con == 3 and flag_len == 3 and flag_upper ==1:
  6.     print('很好,你的密码安全等级很高,请继续保持', end='')
复制代码

分别只有以下情况才会有结果:
a.密码只有一位,且没有符号
b.密码只有两位
c.密码只有三位,且首位是字母
修改后代码如下:请参考:
  1. symbols = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\''''
  2. numbers = '0123456789'
  3. letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

  4. password=input("请输入密码: ")
  5. length = len(password)
  6. flag_con = 0
  7. flag_len = 0
  8. flag_upper = 0

  9. #判断密码的组成
  10. for each in password:
  11.     if each in symbols or numbers or letters:
  12.         flag_con+=1

  13. #判断密码的长度
  14. if length<8:
  15.     flag_len = 1
  16. if 8<=length<16:
  17.     flag_len = 2
  18. if length>=16:
  19.     flag_len = 3

  20. #判断首字母
  21. if flag_len == 3 and password[0] in letters:
  22.     flag_upper = 1

  23. #判断密码级别
  24. if flag_len == 1 and password not in symbols :
  25.     print('密码安全性较低',end='')
  26. if flag_len == 2:
  27.     print('密码安全等级为中',end='')
  28. if flag_len == 3 and flag_upper ==1:
  29.     print('很好,你的密码安全等级很高,请继续保持', end='')
复制代码


事实上,这里的flag_con没有起任何作用,如果你想判断密码组成,请分别统计,不要用同一变量名flag_con

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
冬雪雪冬 + 5 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-29 07:58:20 | 显示全部楼层
小小大鱼 发表于 2016-2-20 14:38
1.问题在最后面的判断密码级别上,flag_con是密码长度,不是级别

分别只有以下情况才会有结果:

O(∩_∩)O谢谢热心讲解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-29 09:38:30 | 显示全部楼层
zjk 发表于 2016-2-20 13:15
最近不学python好久了,我也不敢确定我说的问题是否正确哈,,,,首先你的break和continue后面加分号干嘛. ...

谢谢。
#判断首字母
if flag_len == 3 and password[0] in letters():
    flag_upper == 1
这段语句还是有问题,首字母的判断是不是写错了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-29 10:22:18 | 显示全部楼层
小小大鱼 发表于 2016-2-20 14:38
1.问题在最后面的判断密码级别上,flag_con是密码长度,不是级别

分别只有以下情况才会有结果:

flag_con是判断是否有字母、数字、特殊符号的啊。谢谢你,根据你提供的代码我改了下我的:
symbols = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\''''
numbers = '0123456789'
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

password=input("请输入密码: ")
length = len(password)
flag_con = 0
flag_len = 0
flag_upper = 0


#判断密码的组成
for each in password:
    if each in symbols or numbers or letters:
        flag_con+=1
        break

#判断密码的长度
if length<8:
    flag_len = 1
if 8<=length<16:
    flag_len = 2
if length>=16:
    flag_len = 3

#判断首字母
if flag_len == 3 and password[0] in letters:
    flag_upper = 1

#判断密码级别
if (flag_con == 1 or flag_con == 2) and password not in symbols and flag_len == 1:
    print('密码安全性较低',end='')
if flag_con == 2 and flag_len == 2:
    print('密码安全等级为中',end='')
if flag_con == 3 and flag_len == 3 and flag_upper ==1:
    print('很好,你的密码安全等级很高,请继续保持', end='')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-29 19:08:18 | 显示全部楼层
一二二四四 发表于 2016-2-29 09:38
谢谢。
#判断首字母
if flag_len == 3 and password[0] in letters():

你多了个括号吧,我代码里面不是改了么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 09:22:11 | 显示全部楼层
小小大鱼 发表于 2016-2-29 19:08
你多了个括号吧,我代码里面不是改了么?

嗯,看见了,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-18 14:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表