鱼C论坛

 找回密码
 立即注册
查看: 1428|回复: 9

[已解决]python 14讲最后一题求改进代码

[复制链接]
发表于 2017-8-6 16:48:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 发狂的战斗机 于 2017-8-6 17:42 编辑
  1. password = input('请输入需要检查的密码组合:')
  2. length = len(password)
  3. initial = password[0]
  4. intCount = 0 #记录数字的个数
  5. strCount = 0 #记录str元素个数
  6. reCount =0 #记录特殊元素的个数
  7. characterre =r'''~!@#$%^&*()_=-/,.?<>;:[]{}\|'''
  8. while (password.isspace() or length ==0):
  9.     password = input('您的输入密码为空(或空格),请重新输入:')
  10.     length = len(password)
  11. for i in password:   
  12.     if i.isdigit(): #判断i是否是int
  13.         intCount += 1
  14.         continue
  15.     elif i.isalpha(): #判断i是不是str
  16.         strCount += 1
  17.         continue
  18.     elif i in characterre: #判断i是不是characterre中的特殊符号
  19.         reCount += 1
  20.         continue
  21. if length <8:#低级的判断
  22.     print('您的密码安全级别为:低')
  23. elif password.isdigit() or password.isalpha():
  24.     print('您的密码安全级别为:低')
  25. elif 16<=length and initial.isalpha() and (intCount > 0 and strCount > 0 and reCount > 0):
  26.     print('您的密码安全级别为:高')
  27.     print('请继续保持')
  28. elif (8<=length) and ((intCount > 0 and strCount > 0 and reCount == 0  ) or (intCount > 0 and reCount > 0 and strCount == 0) or (strCount >0 and reCount > 0 and intCount == 0)):
  29.     print('您的密码安全级别为:中')
  30. else:
  31.     print('你的密码啥也不是')
  32. if not (16<=length and initial.isalpha() and (intCount > 0 and strCount > 0 and reCount > 0)):
  33.     print('''请按以下方式提升您的密码安全级别:
  34.                       1.密码必须有数字、字母及特殊字符三种组合
  35.                       2.密码只能由字母开头
  36.                       3.密码的长度不能低于16位''')
复制代码

    要求1:用14讲前的内容
eg: 确实现在谈效率太早了。多谢版主和小甲鱼老师的回复
最佳答案
2017-8-6 17:39:53
发狂的战斗机 发表于 2017-8-6 17:26
谢谢回复,我是尽可能在进化自己的逻辑。
确实后面有更先进的办法。
那就先问问 这个代码写得还行吗?
...

前者啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-6 16:52:36 | 显示全部楼层
本帖最后由 发狂的战斗机 于 2017-8-6 17:24 编辑

标准答案不足的地方:我刚看完小甲鱼的答案,
他的代码有些小问题
如 密码8位数 1234567g
这样的他会判断为低级密码
但按照描述 不小于8,8位密码是不小于8的
所以理当符合中级密码的标准。
还有好几个地方 存在了这样的交叉。

自我认为的差别:看了小甲鱼的答案后
我想到自己的代码能够改进的地方 就是 他最后打印代码的方式更为简单?
但是我觉得我个人想的代码 优秀的地方是 中间那段计数的
这个计数方法是看如何计算字符串中的各种字符的数量想出来的
然后自己又想了想优化效率的办法是continue,可以不进行那些判断
小甲鱼的思路是三个分开来算,我认为太没有效率了。

然后小甲鱼对字母和数字建造了库保存 让我有点意外
我没想到这点,但不确定这样是否对计算机的储存和效率有帮助?


所以求大神或者各位前辈指导我一下,帮帮我这个迷途的羔羊。
我的水平是初学编程,然后刚学到python前14讲完。
做完这最后一题,我感觉到难度确实非常大。
1.难度在于先后,我一开始想先判断数据类型再看长度。以及先看长度后判断数据类型
后来发现很难分先后判断 就一起了。我觉得原因是:小甲鱼这题逻辑不是很严,导致我想很多。
2.字符串的特殊字符查找,我一开始以为像数字那样有函数可以使用,但后面发现找不到。然后
重新审题后发现原来有规定是什么。
3.如果输入中文或者夹杂空格怎么办,空格有办法处理(可以直接让有空格就报错)但是中文我不知道怎么处理(没办法建造字符串储存)
4.能不能再优化一下 那段判断密码等级的代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 17:10:37 | 显示全部楼层
@小甲鱼
来看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 17:12:04 | 显示全部楼层
你不要现在就试图把代码效率提高,等你把小甲鱼视频都看完了再说
因为有一些提高效率的你现在学不到
比如什么 列表表达式 生成器一类的
到后面,还要尝试不使用for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 17:26:07 | 显示全部楼层
新手·ing 发表于 2017-8-6 17:12
你不要现在就试图把代码效率提高,等你把小甲鱼视频都看完了再说
因为有一些提高效率的你现在学不到
比如 ...

谢谢回复,我是尽可能在进化自己的逻辑。
确实后面有更先进的办法。
那就先问问 这个代码写得还行吗?
关于字母和数字 到底建造一个字符串库好
还是直接用函数判断好?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 17:30:36 | 显示全部楼层
“三种字符都有但是不大于16位”这个肯定就是中级啦,因为它已经满足中级的要求了。

这道题的难点在于中级的范围是最广的,所以我在参考代码中先判断低级,符合之后再判断高级,如果不符合那就列入中级的范畴了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 17:36:32 | 显示全部楼层
小甲鱼 发表于 2017-8-6 17:30
“三种字符都有但是不大于16位”这个肯定就是中级啦,因为它已经满足中级的要求了。

这道题的难点在于中 ...

。。老师好
我后面想了想 好像是这么回事
但是8位数的那个交叉
1234567g 应该是中级而不是低级
答案会判成低级
还有123456789其实也不满足低级小于等于8的要求
所以我就纠结了很久
可能我强迫症严重。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 17:39:53 | 显示全部楼层    本楼为最佳答案   
发狂的战斗机 发表于 2017-8-6 17:26
谢谢回复,我是尽可能在进化自己的逻辑。
确实后面有更先进的办法。
那就先问问 这个代码写得还行吗?
...

前者啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-6 17:56:50 | 显示全部楼层
本帖最后由 发狂的战斗机 于 2017-8-6 17:57 编辑


感谢帮助。
但这题文字部分还是不严密的地方,强迫症患者思考了很久避开了一些
8位数 既有字母也有数字 如果按照小甲鱼的代码打
会判断为低级
但是 既有字母又有数字符合不低于8位是中级密码
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
16位拥有三种字符的 但字母不是开头第一个,但是也不符合中级的第一条规定。
可能是我太较真了吧。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-6 17:58:44 | 显示全部楼层
发狂的战斗机 发表于 2017-8-6 17:56
感谢帮助。
但这题文字部分还是不严密的地方,强迫症患者思考了很久避开了一些
8位数 既有 ...

可能是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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