鱼C论坛

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

[已解决]做小甲鱼的字符串课后习题后,有一个疑问

[复制链接]
发表于 2019-3-24 21:59:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 luoydqsn 于 2019-3-24 23:52 编辑

14讲课后习题最后一题,验证输入密码的安全程度

大佬们,小白有疑问!!简单来说就是三点:


1. 用 for 语句对字符串进行迭代时(不知道这种表达对不对),是不是存在类似文件内容指针的东西,
有的话如何归零?(我的代码最大的问题出现在这,我以为是有这种东西的,可是找不到方法。。。)
(下面有 idle 截图说明具体情况)

2. 假设第一点成立,那我的代码中的 continue 语句的计算速度是不是优于小甲鱼的?(以下有小甲鱼的部分代码)

3. 小白上路,好不好容易完成了小甲鱼的课后习题并且成功运行,先激动一下!然后请问有什么细节地方需要注意?
(代码根据小甲鱼的答案已优化成自己喜欢的样子,嘻嘻嘻)

以下是我的代码:第一个问题的相关内容,在上下分割线之间

  1. print("=" * 20 + "RESTART" + "=" * 20)

  2. #   新手上路,用最笨的方法定义列表了。。。

  3. list1 = ['~','!','@','#','%','^','&','*',
  4.          '(',')','_','=','-','/','.','?','<',
  5.          '>',';',':','[',']','{','}','|','\\']   #  \\实力坑爹!

  6. list2 = ['0','1','2','3','4','5','6','7','8','9']

  7. list3 = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
  8.          'n','o','p','q','r','s','t','u','v','w','x','y','z']

  9. shuoming = """
  10. 请按以下方式提升您的密码安全级别:
  11. \t1.密码必须由数字、字母及特殊字符三种组合
  12. \t2.密码只能由字母开头
  13. \t3.密码长度不低于16位
  14. """

  15. mima = input(">>>\n请输人需要检查的密码组合:")


  16. #   判断密码是否为空或者全是空格

  17. while mima.isspace() or len(mima) == 0:
  18.     mima = input("您输入的密码为空(或空格),请重新输入:")

  19. string = 0
  20. num = 0
  21. pha = 0

  22. #   =============此处为上分割线===============
  23. #   将密码的字符进行逐个验证
  24. #   考虑到以下四种情况在同一字符下不可能有共存现象
  25. #   因而试着用continue语句来减少计算时间

  26. for i in mima:
  27.     if i in list1:
  28.         string = 1
  29.         continue
  30.     elif i in list2:
  31.         num = 1
  32.         continue
  33.     elif i in list3:
  34.         pha = 1
  35.         continue
  36.     else:
  37.         print(f"密码中不能含有‘{i}’号")
  38.         mima = input("密码不符合要求,请重新输入:")

  39. #   =============此处为下分割线=============

  40. print("您的密码安全级别评定为:", end = '')      
  41. if (len(mima) <= 8) or (string + num + pha == 1):
  42.     print("低")
  43.     print(shuoming)
  44.    
  45. elif (len(mima) > 16) and (mima[0] in list3) and (string + num + pha == 3):
  46.     print("高")
  47.     print("请继续保持")
  48.    
  49. else:
  50.     print("中")
  51.     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


最佳答案
2019-3-25 10:17:59
luoydqsn 发表于 2019-3-24 23:45
大佬我错了!!!

可是,大佬,你还是没回答我的问题。。。

1.不用你管,系统会自己处理
2.不优于小甲鱼的
3.太啰嗦,现成BIF可以满足要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-24 22:34:37 | 显示全部楼层
本帖最后由 ba21 于 2019-3-24 23:19 编辑

首先鼓励你靠自己写出差不多的代码。不过还是太啰嗦了,有很多能用上的BIF都没有用了。
在你的代码上改了下,你参考下:
  1. symbols = '~!@#$%^&*()_=-/.?<>;:[]{}|\\'


  2. shuoming = """
  3. 请按以下方式提升您的密码安全级别:
  4. \t1.密码必须由数字、字母及特殊字符三种组合
  5. \t2.密码只能由字母开头
  6. \t3.密码长度不低于16位
  7. """

  8. mima = input(">>>\n请输人需要检查的密码组合:")


  9. # 判断密码是否为空或者全是空格, 密码只能由字母开头
  10. while mima.strip()=='' or not mima[0].isalpha():      
  11.         mima = input("密码只能由字母开头且不能为空,请重新输入:")


  12. # 测式强度
  13. alpha=0
  14. digit=0
  15. symb=0
  16. for i in mima:
  17.         if i.isalpha():
  18.                 alpha = 1
  19.                 continue
  20.         elif i.isdigit():
  21.                 digit = 1
  22.                 continue
  23.         elif i in symbols:
  24.                 symb = 1
  25.                 continue
  26.         
  27.         

  28. num =alpha+digit+symb

  29. print("您的密码安全级别评定为:", end = '')      
  30. if (len(mima) <= 8) or num == 1:
  31.     print("低")
  32.     print(shuoming)
  33.    
  34. elif (len(mima) > 16) and num >= 3:
  35.     print("高")
  36.     print("请继续保持")
  37.    
  38. else:
  39.     print("中")
  40.     print(shuoming,end = '')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 23:02:49 | 显示全部楼层
ba21 发表于 2019-3-24 22:34
首先鼓励你靠自己写出差不多的代码。不过还是太啰嗦了,有很多能用上的BIF都没有用了。
在你的代码上改了 ...

首先谢谢大佬,因为是小白上路,还没训练出计算机思维,所以很啰嗦233~~(其实第一版不出错的代码更啰嗦。。。)~~~从大佬代码中又学到有东西,谢谢

然后,大佬,你没回答我的问题啊5555,还有强制把密码第一位规定为字母了。。。

最后,大佬你的代码还有个错误啊。。。第34和35行。。。我按大佬的思维输入 a、123   
就报错了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 23:14:50 | 显示全部楼层
本帖最后由 luoydqsn 于 2019-3-24 23:16 编辑
ba21 发表于 2019-3-24 22:34
首先鼓励你靠自己写出差不多的代码。不过还是太啰嗦了,有很多能用上的BIF都没有用了。
在你的代码上改了 ...


哦对了,shuoming中说密码只能由字母开头,那个是小甲鱼自己设置的坑,他这个习题好多让人误解的表达。。。小甲鱼自己都承认了。。还好我发现有不对劲的地方。。没进那个坑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 23:18:54 | 显示全部楼层
luoydqsn 发表于 2019-3-24 23:02
首先谢谢大佬,因为是小白上路,还没训练出计算机思维,所以很啰嗦233~~(其实第一版不出错的代码更啰嗦 ...

代码是给你参考的,别没事去找X。看也知道if num >=3:
                break
在代码中用不着;忘了删掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 23:45:12 | 显示全部楼层
ba21 发表于 2019-3-24 23:18
代码是给你参考的,别没事去找X。看也知道if num >=3:
                break
在代码中用不着;忘了删 ...

大佬我错了!!!

可是,大佬,你还是没回答我的问题。。。
原谅我这是第一次提问这么长的代码,我尽量试着给足信息了吧,还排了排版面。不知道大佬看懂了没有~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-25 10:17:59 | 显示全部楼层    本楼为最佳答案   
luoydqsn 发表于 2019-3-24 23:45
大佬我错了!!!

可是,大佬,你还是没回答我的问题。。。

1.不用你管,系统会自己处理
2.不优于小甲鱼的
3.太啰嗦,现成BIF可以满足要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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