鱼C论坛

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

[已解决]小白-小甲鱼十五课,课后作业,诸多问题,待大神一一解答,尤其是最后一个问题!

[复制链接]
发表于 2019-6-16 13:06:07 | 显示全部楼层 |阅读模式

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

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

x
题目:
# 密码安全性检查代码
#
# 低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8 位
#
# 中级密码要求:
# 1. 密码必须由数字、字母或特殊字符(仅限:`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>)任意两种组合
# 2. 密码长度不能低于8 位
#
# 高级密码要求:
# 1. 密码必须由数字、字母及特殊字符(仅限:
)三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16 位

小甲鱼的答案:
# coding=utf-8
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input(' 请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length == 0):
    passwd = input(" 您输入的密码为空(或空格),请重新输入: ")
if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3
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
while 1:
    print(" 您的密码安全级别评定为: ", end='')
    if flag_len == 1 or flag_con == 1 :
        print(" 低")
    elif flag_len == 2 or flag_con == 2 :
        print(" 中")
    else:
        print(" 高")
        break
    print(" 请按以下方式提升您的密码安全级别: \n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16 位'")
    break

我的思路:让用户输入密码,然后依次判断等级是不是低,不是的话等级是不是中,否则为高

疑问:
1.没有看到密码只能由字母开头的判断啊?
2.运行了输入非字母开头结果,其余条件符合高的条件,评定结果为高,不是应该为中么?
3.如果要加入这个条件,该怎么修改?
4.最后一个最重要的思路问题,我看到这个题目以后,本身是做测试的,思路就是顺着题目写,大致就是让用户输入密码,然后依次判断等级是不是低,不是的话等级是不是中,否则为高   i 我是这么想的,但是还不会写,这样的思路能否实现并满足题目要求? ii 如果i不可取,是代码效率低,浪费效率资源了,还是什么原因,为什么不能按照i的思路写?小甲鱼的思路好在哪?
最佳答案
2019-6-16 15:22:47
a = """~!@#$%^&*()_=-/,.?<>;:[]{}|\ """
def long(c):
    if c <= 8:
        return 0
    elif c > 8:
        if c >= 16:
            return 2
        else:
            return 1
def num(b):
    if b.isalpha() == 1or b.isdigit()== 1:
        return 0
    else:
        x,y,z,e = 0,0,0,0
        for i in b:
            if i in a:
                x = 1
            elif i.isalpha() == 1:
                y = 1
            elif i.isdigit() == 1:
                z =1
            else:
                e =1
        if x+y+z == 1:
            return 0
        elif x+y+z == 2:
            return 1
        elif x+y+z == 3:
            return 2
        else:
            return 3
b = input("请输入密码:")
c = len(b)
while True:
    O = long(c) == 1 or long(c) == 2
    p = long(c) == 2
    q = num(b) != 0
    n = num(b) == 2
    m = num(b) == 3
    if m:
        print("密码中含非法字符")
        b = input("请重新输入:")
        c = len(b)
    elif b[0].isalpha() == 1 and n and p:
        print("安全等级高,请放心使用")
        break
    elif O and q:
        print("安全等级中等")
        break
    else:
        print("安全等级低,请慎重考虑")
        break
这是我自制的密码判断 ,根据题目做的,之后看了小甲鱼的 ,我感觉小甲鱼的低中高判断很简洁,自制的就比较复杂 ,个人建议你先看题目,自己做一遍 ,做出了之后再去看答案,会给你很大提升。你直接看答案会完全没有自己的思路。最后说一下首字母判断,我自制的是有的,你可以参考一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-16 15:22:47 | 显示全部楼层    本楼为最佳答案   
a = """~!@#$%^&*()_=-/,.?<>;:[]{}|\ """
def long(c):
    if c <= 8:
        return 0
    elif c > 8:
        if c >= 16:
            return 2
        else:
            return 1
def num(b):
    if b.isalpha() == 1or b.isdigit()== 1:
        return 0
    else:
        x,y,z,e = 0,0,0,0
        for i in b:
            if i in a:
                x = 1
            elif i.isalpha() == 1:
                y = 1
            elif i.isdigit() == 1:
                z =1
            else:
                e =1
        if x+y+z == 1:
            return 0
        elif x+y+z == 2:
            return 1
        elif x+y+z == 3:
            return 2
        else:
            return 3
b = input("请输入密码:")
c = len(b)
while True:
    O = long(c) == 1 or long(c) == 2
    p = long(c) == 2
    q = num(b) != 0
    n = num(b) == 2
    m = num(b) == 3
    if m:
        print("密码中含非法字符")
        b = input("请重新输入:")
        c = len(b)
    elif b[0].isalpha() == 1 and n and p:
        print("安全等级高,请放心使用")
        break
    elif O and q:
        print("安全等级中等")
        break
    else:
        print("安全等级低,请慎重考虑")
        break
这是我自制的密码判断 ,根据题目做的,之后看了小甲鱼的 ,我感觉小甲鱼的低中高判断很简洁,自制的就比较复杂 ,个人建议你先看题目,自己做一遍 ,做出了之后再去看答案,会给你很大提升。你直接看答案会完全没有自己的思路。最后说一下首字母判断,我自制的是有的,你可以参考一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-16 18:47:48 | 显示全部楼层
天下一统2014 发表于 2019-6-16 15:22
a = """~!@#$%^&*()_=-/,.?;:[]{}|\ """
def long(c):
    if c  8:

我也是自己先做的 ,做不出个所以然来  才去参考的 ,自己的思路去写 很多不会写不下去了·····唉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-17 06:14:11 From FishC Mobile | 显示全部楼层
可以把一题分为几块。最后拼起来。不会的知识可以去网上查。这样对你才有提高
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-17 08:14:20 | 显示全部楼层
呃,小甲鱼的代码就很普通的if判断帮助理解的课后习题啊,效率其实考虑不考虑吧,都那样,密码一百位一下的运算,再快也就快那么一丢丢丢,至于加入首字母判断,甚至后面可能还有其他判断的话,就直接遍历一遍用户输入的字符串,挨个判断属于什么(字母,数字,还是特殊符号),属于哪个属性,哪个属性的变量加一,判断首个字符就直接看第一个字符是不是字母就好了,最后三个属性加起来的值就是长度,中途遇到不合法的值就break提示一下输入错误,然后根据四个值再判断是高等级还是低等级还是中等级
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-17 13:38:16 | 显示全部楼层
RIXO 发表于 2019-6-17 08:14
呃,小甲鱼的代码就很普通的if判断帮助理解的课后习题啊,效率其实考虑不考虑吧,都那样,密码一百位一下的 ...

# coding=utf-8
c = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<> '''
d = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
e = '0123456789'
i=0
mima = input("密码安全性检查,请输入检测密码:")
for bianliang1 in mima:
    if bianliang1 in c:
        i+=1
        break
        # print("密码包含特殊字符!")
for bianliang2 in mima:
    if bianliang2 in d:
        i+=1
        break
        # print("密码包含字母!")
for bianliang3 in mima:
    if bianliang3 in e:
        i+=1
        break
        # print("密码包含数字!")
if i==3 and len(mima)>=16 and mima[0] in d:
    print("密码安全性:高!")
elif i>=2 and len(mima)>8:
    print("""密码安全性:中!
请按以下方式提升您的密码安全级别:
1.密码必须由数字、字母及特殊字符三种组合
2.密码只能由字母开头
3.密码长度不能低于16位""")
else:
    print("""密码安全性:低!
    请按以下方式提升您的密码安全级别:
    1.密码必须由数字、字母及特殊字符三种组合
    2.密码只能由字母开头
    3.密码长度不能低于16位""")

就这么一道题,我这个初学者断断续续弄了2天,日,皇天不负有心人,终于按照我自己的方式在已学的方法下实现了(自己简单的测了一下,结果还不知道是不是完全正确),简直想哭·····
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-17 13:39:44 | 显示全部楼层
# coding=utf-8
c = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<> '''
d = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
e = '0123456789'
i=0
mima = input("密码安全性检查,请输入检测密码:")
for bianliang1 in mima:
    if bianliang1 in c:
        i+=1
        break
        # print("密码包含特殊字符!")
for bianliang2 in mima:
    if bianliang2 in d:
        i+=1
        break
        # print("密码包含字母!")
for bianliang3 in mima:
    if bianliang3 in e:
        i+=1
        break
        # print("密码包含数字!")
if i==3 and len(mima)>=16 and mima[0] in d:
    print("密码安全性:高!")
elif i>=2 and len(mima)>8:
    print("""密码安全性:中!
请按以下方式提升您的密码安全级别:
1.密码必须由数字、字母及特殊字符三种组合
2.密码只能由字母开头
3.密码长度不能低于16位""")
else:
    print("""密码安全性:低!
    请按以下方式提升您的密码安全级别:
    1.密码必须由数字、字母及特殊字符三种组合
    2.密码只能由字母开头
    3.密码长度不能低于16位""")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-13 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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