鱼C论坛

 找回密码
 立即注册
查看: 608|回复: 5

[已解决]014讲的课后作业,我的思路错在什么地方了?

[复制链接]
发表于 2019-1-8 18:37:47 | 显示全部楼层 |阅读模式

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

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

x
codenum = True
num = "1234567890"
pha = "abcdefghijklmnopqrstuvwxyz"
spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"

while codenum:
        n = 0
        p = 0
        s = 0
        cd = input('请输入需要检查的密码组合')
        if (cd[0] in num == True) or (cd[0] in pha == True):#看第一个字符是什么。
                print("第一个字符错了,重来")
                continue
        for i in cd:#看都包含什么字符
                if i in num == True:
                        n = 1
                if i in pha == True:
                        p = 1
                if i in spe == True:
                        s = 1
        flag = n + p + s
        if flag == 1 or len(cd)<=8:
                print("密码安全级别是低,重设!")
                print(flag)
                continue
        if flag == 2 or len(cd)<=8:
                print("密码安全级别是中,重设一下吧!")
                print(flag)
                continue
        if flag == 3 and len(cd)>=16:
                print("密码等级是高,可以了")
                codenum = False

最佳答案
2019-1-8 20:12:09
本帖最后由 水瓶座 于 2019-1-8 21:03 编辑

codenum = True
num = "1234567890"
pha = "abcdefghijklmnopqrstuvwxyz"
spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"

while codenum:
        n = 0
        p = 0
        s = 0
        cd = input('请输入需要检查的密码组合')
        if (cd[0] in num == True) or (cd[0] in pha == True):#看第一个字符是什么。
                print("第一个字符错了,重来")
                continue
        for i in cd:#看都包含什么字符
                if i in num == True:
                        n = 1
                if i in pha == True:
                        p = 1
                if i in spe == True:
                        s = 1
        flag = n + p + s
        if flag == 1 or len(cd)<=8:
                print("密码安全级别是低,重设!")
                print(flag)
                continue
        if flag == 2 or len(cd)<=8:
                print("密码安全级别是中,重设一下吧!")
                print(flag)
                continue
        if flag == 3 and len(cd)>=16:
                print("密码等级是高,可以了")
                codenum = False

红色的地方,不知名出错,经测试以下代码正确:

codenum = True
num = "1234567890"
pha = "abcdefghijklmnopqrstuvwxyz"
spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"

while codenum:
        n = 0
        p = 0
        s = 0
        cd = input('请输入需要检查的密码组合:')
        pdnum = cd[0] in num
        pdpha = cd[0] in pha
        print(cd[0] in num == True)
        if (pdnum == True) or (pdpha == True):#看第一个字符是什么。

                print("第一个字符错了,重来")
                continue
        for i in cd:#看都包含什么字符
                if i in num == True:
                        n = 1
                if i in pha == True:
                        p = 1
                if i in spe == True:
                        s = 1
        flag = n + p + s
        if flag == 1 or len(cd)<=8:
                print("密码安全级别是低,重设!")
                print(flag)
                continue
        if flag == 2 or len(cd)<=8:
                print("密码安全级别是中,重设一下吧!")
                print(flag)
                continue
        if flag == 3 and len(cd)>=16:
                print("密码等级是高,可以了")
                codenum = False

很明显cd[0] in num是True,但是cd[0] in num == True是False,百度搜了搜,发现
if(5 ==len(a)   

     ==len(b)):   

         print "yes"
按照c的语法规则,显然我们要先从左边第一个“==”开始,

以上题为例,若“5 ==len(a)”&#8203;则返回布尔值“True”,然后再比较“True”和“len(b)”是否相等。

但python却是”5== len(a)== len(b)“等价于”5== len(a) and len(a)==len(b)“

于是乎cd[0] in num == True等价于cd[0] in num and num == True,然后

>>> True and False
False
>>>
然后我找不到形容词了,懂就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-8 19:32:14 | 显示全部楼层
具体什么题意?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-8 20:11:11 | 显示全部楼层
ba21 发表于 2019-1-8 19:32
具体什么题意?

请写一个密码安全性检查的代码代码:check.py
  
# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8位
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8位
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-8 20:12:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 水瓶座 于 2019-1-8 21:03 编辑

codenum = True
num = "1234567890"
pha = "abcdefghijklmnopqrstuvwxyz"
spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"

while codenum:
        n = 0
        p = 0
        s = 0
        cd = input('请输入需要检查的密码组合')
        if (cd[0] in num == True) or (cd[0] in pha == True):#看第一个字符是什么。
                print("第一个字符错了,重来")
                continue
        for i in cd:#看都包含什么字符
                if i in num == True:
                        n = 1
                if i in pha == True:
                        p = 1
                if i in spe == True:
                        s = 1
        flag = n + p + s
        if flag == 1 or len(cd)<=8:
                print("密码安全级别是低,重设!")
                print(flag)
                continue
        if flag == 2 or len(cd)<=8:
                print("密码安全级别是中,重设一下吧!")
                print(flag)
                continue
        if flag == 3 and len(cd)>=16:
                print("密码等级是高,可以了")
                codenum = False

红色的地方,不知名出错,经测试以下代码正确:

codenum = True
num = "1234567890"
pha = "abcdefghijklmnopqrstuvwxyz"
spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\\"

while codenum:
        n = 0
        p = 0
        s = 0
        cd = input('请输入需要检查的密码组合:')
        pdnum = cd[0] in num
        pdpha = cd[0] in pha
        print(cd[0] in num == True)
        if (pdnum == True) or (pdpha == True):#看第一个字符是什么。

                print("第一个字符错了,重来")
                continue
        for i in cd:#看都包含什么字符
                if i in num == True:
                        n = 1
                if i in pha == True:
                        p = 1
                if i in spe == True:
                        s = 1
        flag = n + p + s
        if flag == 1 or len(cd)<=8:
                print("密码安全级别是低,重设!")
                print(flag)
                continue
        if flag == 2 or len(cd)<=8:
                print("密码安全级别是中,重设一下吧!")
                print(flag)
                continue
        if flag == 3 and len(cd)>=16:
                print("密码等级是高,可以了")
                codenum = False

很明显cd[0] in num是True,但是cd[0] in num == True是False,百度搜了搜,发现
if(5 ==len(a)   

     ==len(b)):   

         print "yes"
按照c的语法规则,显然我们要先从左边第一个“==”开始,

以上题为例,若“5 ==len(a)”&#8203;则返回布尔值“True”,然后再比较“True”和“len(b)”是否相等。

但python却是”5== len(a)== len(b)“等价于”5== len(a) and len(a)==len(b)“

于是乎cd[0] in num == True等价于cd[0] in num and num == True,然后

>>> True and False
False
>>>
然后我找不到形容词了,懂就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-8 20:20:46 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-8 20:54 编辑

if (cd[0] in num == True) or (cd[0] in pha == True):#看第一个字符是什么。


==True不用加,这句代码的意思就是第一个字符是数字或者英文字母,cd[0] in num  在里面就是True,  使用or 有真为真
为为什么你们都不喜欢发代码呢

  1. codenum = True
  2. num = "1234567890"
  3. pha = "abcdefghijklmnopqrstuvwxyz"
  4. spe = "~!@#$%^&*()_=-/,.?<>;:[]{}|\"

  5. while codenum:
  6.         n = 0
  7.         p = 0
  8.         s = 0
  9.         cd = input('请输入需要检查的密码组合')
  10.         if cd[0] not in set(num)|set(pha):
  11.                 print("第一个字符错了,重来")
  12.                 continue
  13.         for i in cd:#看都包含什么字符
  14.                 if i in num:
  15.                     n = 1
  16.                 elif i in pha:
  17.                     p = 1
  18.                 elif i in spe:
  19.                     s = 1
  20.         flag = n + p + s
  21.         if flag == 1 or len(cd)<=8:
  22.             print("密码安全级别是低,重设!")
  23.             print(flag)
  24.             continue
  25.         if flag == 2 or len(cd)<=8:
  26.             print("密码安全级别是中,重设一下吧!")
  27.             print(flag)
  28.             continue
  29.         if flag == 3 and len(cd)>=16:
  30.             print("密码等级是高,可以了")
  31.             codenum = False
复制代码

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

使用道具 举报

发表于 2019-1-8 22:54:09 | 显示全部楼层
可以参考一波我的哟
  1. symbols = "~!@#$%^&*()_=-/,.?<>;:[]{}|\"
  2. characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. numbers = '1234567890'
  4. characters_level = 0

  5. password = input('请输入需要检查的密码组合:')
  6. lenth = len(password)

  7. while (password.isspace()) or (lenth == 0):
  8.     print('您输入的密码为空(或空格),请重新输入:')
  9.     lenth = len(password)

  10. if lenth <= 8:
  11.     lenth_level = 1
  12. elif 8 < lenth <16:
  13.     lenth_level = 2
  14. else:
  15.     lenth_level = 3

  16. for each in password:
  17.     if each in symbols:
  18.         characters_level += 1
  19.         break

  20. for each in password:
  21.     if each in characters:
  22.         characters_level += 1
  23.         break

  24. for each in password:
  25.     if each in numbers:
  26.         characters_level += 1
  27.         break

  28. while True:
  29.     if (lenth_level == 1) or (characters_level == 1):
  30.         print('您的密码安全级别评定为:低')
  31.     elif (lenth_level == 3) and (characters_level == 3) and (password[0] in characters):
  32.         print('您的密码安全级别评定为:高')
  33.         print('请继续保持哦^_^')
  34.         break
  35.     else:
  36.         print('您的密码安全级别评定为:中')
  37.     print('''请按以下方式提升您的密码安全级别:
  38.     1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
  39.     2. 密码只能由字母开头
  40.     3. 密码长度不能低于16位''')
  41.     break

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 13:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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