鱼C论坛

 找回密码
 立即注册
查看: 1210|回复: 11

[已解决]渣渣求助

[复制链接]
发表于 2018-3-22 18:35:27 | 显示全部楼层 |阅读模式

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

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

x
symbols = '`~!@#$%^&*()_+-=[]\{}|;",:./<>?'
chars = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
nums = '0123456789'


password = input('请输入需要检查的密码')
length = len(password)

while(password.isspace()) or (length < 6):
    print('密码过于简单')
    break



for each in password:   
    while (each in chars) or (each in nums):
        print('您的密码等级为:',end ='')
        if length <= 8:
            print('低')
            break
        
        elif (each in nums) and (each in symbols) and (password[0] in chars):
            if length > 16:
                print('高')
                break
            
        else:
            print('中')
            break
    break
   为什么总是不能显示密码级别为高的结果,麻烦哪位大神指点一下,感谢~
   



最佳答案
2018-3-22 22:59:52
本帖最后由 阿bang 于 2018-3-22 23:17 编辑
我叫枫剑 发表于 2018-3-22 21:53
大佬能不能顺便帮我看一下我刚刚发帖子,按照你的意思改了之后,不知道哪里又出毛病了

  1. specialletter = '~!@#$%^&*()_=-/,.?<>;:[]{}|''\\'
  2. numbers = '1234567890'
  3. letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  4. password = raw_input('Please input your password: ')
  5. numbers_count = 0
  6. letters_count = 0
  7. specialletter_count = 0
  8. length = len(password)
  9. if length == 0 or password.isspace():
  10.     print '您输入得是空值'
  11. elif length:
  12.     for i in password:
  13.         if i in numbers:
  14.             numbers_count = 1
  15.         elif i in letters:
  16.             letters_count = 1
  17.         elif i in specialletter:
  18.             specialletter_count = 1
  19.         else:
  20.             print '您输入得密码含有特殊字符,请重新输入!'
  21.             print '特殊字符仅限:~!@#$%^&*()_=-/,.?<>;:[]{}\|'
  22.             break

  23. if length <= 8 and specialletter_count == 0 and numbers_count + letters_count == 1:
  24.     print '您输入的是低级密码,过于简单了'
  25. if length >= 8 and specialletter_count + numbers_count + letters_count == 2:
  26.     print '中级密码'
  27. if numbers_count + letters_count + specialletter_count == 3 and length >= 16 and password[0] in letters:
  28.     print '高级密码'
复制代码


我的代码发你参考下吧。你的整体思路是不对的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 18:44:46 | 显示全部楼层
本帖最后由 阿bang 于 2018-3-22 18:46 编辑

and 的逻辑有问题。你密码的每个符号,不可能是符合3个条件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 18:48:27 | 显示全部楼层
正确的做法是,如果密码有字符有num,那么num的flag就=1,同样道理,字母和简单符号的也弄个flag标记
如果所有的的flag标记之和= 3,那么就是符合3个种类型字符都有。然后再判断密码长度即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 20:40:57 | 显示全部楼层
阿bang 发表于 2018-3-22 18:48
正确的做法是,如果密码有字符有num,那么num的flag就=1,同样道理,字母和简单符号的也弄个flag标记
如果 ...

那 each in nums 的意思是 每个each都在nums里才为真还是只要有一个在nums里就为真?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 21:20:34 | 显示全部楼层
本帖最后由 阿bang 于 2018-3-22 21:21 编辑
我叫枫剑 发表于 2018-3-22 20:40
那 each in nums 的意思是 每个each都在nums里才为真还是只要有一个在nums里就为真?


这里是每个字符去迭代,每次针对每个each单独判断是否为真
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 21:39:45 | 显示全部楼层
阿bang 发表于 2018-3-22 21:20
这里是每个字符去迭代,每次针对每个each单独判断是否为真

就是说只要有一个在里面就为真,是这个意思吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 21:42:51 | 显示全部楼层
我叫枫剑 发表于 2018-3-22 21:39
就是说只要有一个在里面就为真,是这个意思吧

你的循环的最外层for循环是迭代遍历密码的每一个字符,每个字符独立去做内层的while的判断。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 21:50:39 | 显示全部楼层
阿bang 发表于 2018-3-22 21:42
你的循环的最外层for循环是迭代遍历密码的每一个字符,每个字符独立去做内层的while的判断。

就是说,如果外面没有for循环的话就是只要有一个在里面while就为真,但是现在有了for循环,是要判断密码里的每个字符,就必须是每一个都要在里面才能为真,是这个意思吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 21:52:28 | 显示全部楼层
我叫枫剑 发表于 2018-3-22 21:50
就是说,如果外面没有for循环的话就是只要有一个在里面while就为真,但是现在有了for循环,是要判断密码 ...

大佬能不能顺便帮我看一下我刚刚发帖子,按照你的意思改了之后,不知道哪里又出毛病了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 21:53:18 | 显示全部楼层
阿bang 发表于 2018-3-22 21:42
你的循环的最外层for循环是迭代遍历密码的每一个字符,每个字符独立去做内层的while的判断。

大佬能不能顺便帮我看一下我刚刚发帖子,按照你的意思改了之后,不知道哪里又出毛病了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 22:59:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿bang 于 2018-3-22 23:17 编辑
我叫枫剑 发表于 2018-3-22 21:53
大佬能不能顺便帮我看一下我刚刚发帖子,按照你的意思改了之后,不知道哪里又出毛病了

  1. specialletter = '~!@#$%^&*()_=-/,.?<>;:[]{}|''\\'
  2. numbers = '1234567890'
  3. letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  4. password = raw_input('Please input your password: ')
  5. numbers_count = 0
  6. letters_count = 0
  7. specialletter_count = 0
  8. length = len(password)
  9. if length == 0 or password.isspace():
  10.     print '您输入得是空值'
  11. elif length:
  12.     for i in password:
  13.         if i in numbers:
  14.             numbers_count = 1
  15.         elif i in letters:
  16.             letters_count = 1
  17.         elif i in specialletter:
  18.             specialletter_count = 1
  19.         else:
  20.             print '您输入得密码含有特殊字符,请重新输入!'
  21.             print '特殊字符仅限:~!@#$%^&*()_=-/,.?<>;:[]{}\|'
  22.             break

  23. if length <= 8 and specialletter_count == 0 and numbers_count + letters_count == 1:
  24.     print '您输入的是低级密码,过于简单了'
  25. if length >= 8 and specialletter_count + numbers_count + letters_count == 2:
  26.     print '中级密码'
  27. if numbers_count + letters_count + specialletter_count == 3 and length >= 16 and password[0] in letters:
  28.     print '高级密码'
复制代码


我的代码发你参考下吧。你的整体思路是不对的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 23:02:33 | 显示全部楼层
我叫枫剑 发表于 2018-3-22 21:53
大佬能不能顺便帮我看一下我刚刚发帖子,按照你的意思改了之后,不知道哪里又出毛病了

你不能根据password的单个字符去判断是否是简单密码还是高级密码
应该是在最外面的for循环之后,再判断。因为for循环遍历完每个密码的字母后,最后才能判断整个密码的字符串是属于哪种密码类型。
所以,你对password的最终类型的判断,应该在for循环之外,你可以看看我的代码,看能否理解。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-9 14:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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