鱼C论坛

 找回密码
 立即注册
查看: 1468|回复: 6

[已解决]第十四讲作业求解

[复制链接]
发表于 2020-8-5 13:07:48 | 显示全部楼层 |阅读模式

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

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

x
为什么运行不出结果,代码哪里错了吗?
  
# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位
temp = input('请输入需要检查的密码组合:')

passwd = int(temp)
length = len(passwd)
nums = '0123456789'
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
str1 = r'~!@#$%^&*()_=-/,.?<>;:[]{}|\''
flag1 = 0
flag2 = 0
#判断密码长度
if length <= 8:
    flag2 = 1
elif 16 > length > 8:
    flag2 = 2
elif length >= 16:
    flag2 = 3
for each in passwd:#判断是否包含字符
    if each in str1:
        flag1 += 1
        break
for each in passwd:#判断是否包含字母
    if each in chars:
        flag1 += 1
        break
for each in passwd:#判断是否包含数字
    if each in nums:
        flag1 += 1
        break
if (flag1 == 1) and (flag2 == 1):
    print('您的密码安全级别评定为:低'
          '请按以下方式提升您的密码安全级别'
          '       1.密码必须由数字、字母及特殊字符三种组合'
          '       2.密码只能由字母开头'
          '       3.密码长度不能低于16位')
if (flag1 == 2) and (flag2 == 2):
    print('您的密码安全级别评定为:中'
          '请按以下方式提升您的密码安全级别'
          '       1.密码必须由数字、字母及特殊字符三种组合'
          '       2.密码只能由字母开头'
          '       3.密码长度不能低于16位')
if (flag1 == 3) and (flag2 == 3):
    print('您的密码安全级别评定为:高')
    print('请继续保持')
最佳答案
2020-8-5 13:17:07
本帖最后由 Hello. 于 2020-8-5 13:24 编辑

你不必将其转化为整型,len()函数需要字符串类型,具体看注释
  1. temp = input('请输入需要检查的密码组合:')

  2. passwd = temp # 不要转化为整型,整型没有长度,只有字符串才有
  3. length = len(passwd)
  4. nums = '0123456789'
  5. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  6. str1 = r'~!@#$%^&*()_=-/,.?<>;:[]{}|\''
  7. flag1 = 0
  8. flag2 = 0
  9. #判断密码长度
  10. if length <= 8:
  11.     flag2 = 1
  12. elif 16 > length > 8:
  13.     flag2 = 2
  14. elif length >= 16:
  15.     flag2 = 3
  16. for each in passwd:#判断是否包含字符
  17.     if each in str1:
  18.         flag1 += 1
  19.         break
  20. for each in passwd:#判断是否包含字母
  21.     if each in chars:
  22.         flag1 += 1
  23.         break
  24. for each in passwd:#判断是否包含数字
  25.     if each in nums:
  26.         flag1 += 1
  27.         break
  28. if (flag1 == 1) and (flag2 == 1):
  29.     print('您的密码安全级别评定为:低'
  30.           '请按以下方式提升您的密码安全级别'
  31.           '       1.密码必须由数字、字母及特殊字符三种组合'
  32.           '       2.密码只能由字母开头'
  33.           '       3.密码长度不能低于16位')
  34. if (flag1 == 2) and (flag2 == 2):
  35.     print('您的密码安全级别评定为:中'
  36.           '请按以下方式提升您的密码安全级别'
  37.           '       1.密码必须由数字、字母及特殊字符三种组合'
  38.           '       2.密码只能由字母开头'
  39.           '       3.密码长度不能低于16位')
  40. if (flag1 == 3) and (flag2 == 3):
  41.     print('您的密码安全级别评定为:高')
  42.     print('请继续保持')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 13:16:39 | 显示全部楼层

这个最佳答案由 风过无痕1989 给出,感谢 风过无痕1989 的回答。

单击隐藏图章
本帖最后由 风过无痕1989 于 2020-8-5 12:47 编辑


if (flag1 = 1) and (flag2 = 1): 等三句是赋值,不是条件判断! 应该改为:

if (flag1 == 1) and (flag2 == 1):
{

}
if (flag1 == 2) and (flag2 == 2):
{

}
if (flag1 == 3) and (flag2 == 3):
{

}

用{}括起来,才表示该条件满足,需要执行的语句段,否则,只就会按语句的先后顺序全部执行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 13:17:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Hello. 于 2020-8-5 13:24 编辑

你不必将其转化为整型,len()函数需要字符串类型,具体看注释
  1. temp = input('请输入需要检查的密码组合:')

  2. passwd = temp # 不要转化为整型,整型没有长度,只有字符串才有
  3. length = len(passwd)
  4. nums = '0123456789'
  5. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  6. str1 = r'~!@#$%^&*()_=-/,.?<>;:[]{}|\''
  7. flag1 = 0
  8. flag2 = 0
  9. #判断密码长度
  10. if length <= 8:
  11.     flag2 = 1
  12. elif 16 > length > 8:
  13.     flag2 = 2
  14. elif length >= 16:
  15.     flag2 = 3
  16. for each in passwd:#判断是否包含字符
  17.     if each in str1:
  18.         flag1 += 1
  19.         break
  20. for each in passwd:#判断是否包含字母
  21.     if each in chars:
  22.         flag1 += 1
  23.         break
  24. for each in passwd:#判断是否包含数字
  25.     if each in nums:
  26.         flag1 += 1
  27.         break
  28. if (flag1 == 1) and (flag2 == 1):
  29.     print('您的密码安全级别评定为:低'
  30.           '请按以下方式提升您的密码安全级别'
  31.           '       1.密码必须由数字、字母及特殊字符三种组合'
  32.           '       2.密码只能由字母开头'
  33.           '       3.密码长度不能低于16位')
  34. if (flag1 == 2) and (flag2 == 2):
  35.     print('您的密码安全级别评定为:中'
  36.           '请按以下方式提升您的密码安全级别'
  37.           '       1.密码必须由数字、字母及特殊字符三种组合'
  38.           '       2.密码只能由字母开头'
  39.           '       3.密码长度不能低于16位')
  40. if (flag1 == 3) and (flag2 == 3):
  41.     print('您的密码安全级别评定为:高')
  42.     print('请继续保持')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 13:18:33 | 显示全部楼层
风过无痕1989 发表于 2020-8-5 13:16
这个最佳答案由 风过无痕1989 给出,感谢 风过无痕1989 的回答。

单击隐藏图章

老哥,人家python的不用{}好吧,再加上他就是你刚才回答的那个,去运行不了再来的,里面逻辑有问题好吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 14:10:10 | 显示全部楼层
本帖最后由 baige 于 2020-8-5 14:12 编辑

  1. temp = input('请输入需要检查的密码组合:')

  2. passwd = temp
  3. length = len(passwd)

  4. nums = '0123456789'
  5. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  6. str1 = r'~!@#$%^&*()_=-/,.?<>;:[]{}|\''

  7. #判断字母数字和特殊字符 第一个特殊字符 第二个字母 第三个数字
  8. flag1 = [0,0,0]
  9. #用来长度判断
  10. flag2 = 0
  11. #判断第一个字符
  12. flag = 0
  13. for each in chars:
  14.     if passwd[0] in chars:
  15.         flag = 1
  16. #判断密码长度
  17. if length <= 8 :
  18.     flag2 = 1
  19. elif 8 < length < 16 :
  20.     flag2 = 2
  21. else :
  22.     flag2 = 3

  23. #特殊字符判断
  24. for each in passwd :
  25.     if each in str1 :
  26.         flag1[0] = 1
  27.         break
  28. #字母判断
  29. for each in passwd:
  30.     if each in chars:
  31.         flag1[1] = 1
  32.         break
  33. #数字判断
  34. for each in passwd:
  35.     if each in nums:
  36.         flag1[2] = 1
  37.         break
  38. #判断一共几种字符
  39. cnt = 0
  40. for i in range(0,3):
  41.     cnt += flag1[i]

  42. if cnt == 1 and flag2 == 1:
  43.     print('您的密码安全级别评定为:低'
  44.            '请按以下方式提升您的密码安全级别'
  45.            '       1.密码必须由数字、字母及特殊字符三种组合'
  46.            '       2.密码只能由字母开头'
  47.            '       3.密码长度不能低于16位')
  48. elif cnt == 2 and flag2 == 2:
  49.     print('您的密码安全级别评定为:中'
  50.            '请按以下方式提升您的密码安全级别'
  51.            '       1.密码必须由数字、字母及特殊字符三种组合'
  52.            '       2.密码只能由字母开头'
  53.            '       3.密码长度不能低于16位')
  54. elif cnt == 3 and flag2 == 3 and flag == 1:
  55.     print('您的密码安全级别评定为:高')
  56.     print('请继续保持')
  57. else :
  58.     print('未定义')



复制代码

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

使用道具 举报

发表于 2020-8-5 16:12:12 | 显示全部楼层
风过无痕1989 发表于 2020-8-5 13:16
这个最佳答案由 风过无痕1989 给出,感谢 风过无痕1989 的回答。

单击隐藏图章

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

使用道具 举报

发表于 2020-8-5 16:14:24 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-8-5 16:12
??????????

我也不知怎么回事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 20:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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