鱼C论坛

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

[已解决]大佬们 帮帮忙指出下我的错误,我头秃了!!!

[复制链接]
发表于 2020-7-6 18:54:46 | 显示全部楼层 |阅读模式

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

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

x
import re
print('请输入需要检查的密码组合:', end='')
password = str(input())
shuzhi = bool(re.search(r'\d', password)) #是否含有数字
r = re.compile(r'^[a-zA-Z]')
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
    else:
        zhimu = False
        break
length = len(password) #长度
alphabet = password.isalpha() #检查是否都是字母
digit = password.isdecimal() #检查是否都是数字
simple = password.isalnum() #检查是否都是数字或字母
special = ['~!@#$%^&*()_=-/,.?<>;:[]{}|\\']
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
    else:
        spe = False
        break
begin = password[0].isalpha #判断第一个字符是否为字母
if alphabet == True or digit == True or length <= 8:
    print('你的密码安全级别评定为:低1')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
elif alphabet == False and digit == False and length >= 8:
    if simple == True:
        print('你的密码安全级别评定为:中1')
    elif spe == True and (shuzhi == True or zhimu == True):
        print('你的密码安全级别评定为:中2')
    else:
        print('你的密码安全级别评定为:低2')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
elif begin == True and shuzhi == True and spe == True:
    print('你的密码安全级别评定为:高')
    print('请继续保持')
else:
    print('输入有误!')
最佳答案
2020-7-6 20:42:22




r = re.compile(r'^[a-zA-Z]') 可以去掉 ^,for 循环都是一个字符一个字符的循环,不用开头匹配
错误:
1)
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
    else:
        zhimu = False
        break
2)
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
    else:
        spe = False
        break
正确:
1)
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
else:
    zhimu = False

2)
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
else:
    spe = False

你两个都 break,肯定只会循环第一个字符就退出了,这样for循环完全没有用处



错误:special = ['~!@#$%^&*()_=-/,.?<>;:[]{}|\\']
正确:special = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
原因:第一个弄成列表,导致列表的这个字符串是个整体,你判断 password 是不是在列表的元素中 除非你输入和这个字符串一模一样,否则肯定会导致spe = False



将:elif begin == True and shuzhi == True and spe == True and length >= 16:
    print('你的密码安全级别评定为:高')
    print('请继续保持')
移动到 if 的第一个下面,就是当第一个 elif 加上长度判断


完整代码,没有帮你优化哈,你自己搞搞,还有就是我觉得这里用正则有点大材小用了:
import re
print('请输入需要检查的密码组合:', end='')
password = str(input())
shuzhi = bool(re.search(r'\d', password)) #是否含有数字
r = re.compile(r'^[a-zA-Z]')
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
else:
    zhimu = False

length = len(password) #长度
alphabet = password.isalpha() #检查是否都是字母
digit = password.isdecimal() #检查是否都是数字
simple = password.isalnum() #检查是否都是数字或字母
special = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
else:
    spe = False

begin = password[0].isalpha() #判断第一个字符是否为字母
if alphabet == True or digit == True or length <= 8:
    print('你的密码安全级别评定为:低1')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
elif begin == True and shuzhi == True and spe == True and length >= 16:
    print('你的密码安全级别评定为:高')
    print('请继续保持')
elif alphabet == False and digit == False and length >= 8:
    if simple == True:
        print('你的密码安全级别评定为:中1')
    elif spe == True and (shuzhi == True or zhimu == True):
        print('你的密码安全级别评定为:中2')
    else:
        print('你的密码安全级别评定为:低2')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
else:
    print('输入有误!')



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

使用道具 举报

 楼主| 发表于 2020-7-6 18:56:14 | 显示全部楼层
14讲课后作业!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 18:59:35 | 显示全部楼层
我们的头一万年前就秃了!(doge)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 19:41:27 | 显示全部楼层
可否展示一下报错信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 20:42:22 | 显示全部楼层    本楼为最佳答案   




r = re.compile(r'^[a-zA-Z]') 可以去掉 ^,for 循环都是一个字符一个字符的循环,不用开头匹配
错误:
1)
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
    else:
        zhimu = False
        break
2)
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
    else:
        spe = False
        break
正确:
1)
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
else:
    zhimu = False

2)
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
else:
    spe = False

你两个都 break,肯定只会循环第一个字符就退出了,这样for循环完全没有用处



错误:special = ['~!@#$%^&*()_=-/,.?<>;:[]{}|\\']
正确:special = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
原因:第一个弄成列表,导致列表的这个字符串是个整体,你判断 password 是不是在列表的元素中 除非你输入和这个字符串一模一样,否则肯定会导致spe = False



将:elif begin == True and shuzhi == True and spe == True and length >= 16:
    print('你的密码安全级别评定为:高')
    print('请继续保持')
移动到 if 的第一个下面,就是当第一个 elif 加上长度判断


完整代码,没有帮你优化哈,你自己搞搞,还有就是我觉得这里用正则有点大材小用了:
import re
print('请输入需要检查的密码组合:', end='')
password = str(input())
shuzhi = bool(re.search(r'\d', password)) #是否含有数字
r = re.compile(r'^[a-zA-Z]')
for item in password: #判断是否含有字母
    result = r.match(item)
    if result != None:
        zhimu = True
        break
else:
    zhimu = False

length = len(password) #长度
alphabet = password.isalpha() #检查是否都是字母
digit = password.isdecimal() #检查是否都是数字
simple = password.isalnum() #检查是否都是数字或字母
special = '~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
for each in password:  #检测是否含有特殊字符
    if each in special:
        spe = True
        break
else:
    spe = False

begin = password[0].isalpha() #判断第一个字符是否为字母
if alphabet == True or digit == True or length <= 8:
    print('你的密码安全级别评定为:低1')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
elif begin == True and shuzhi == True and spe == True and length >= 16:
    print('你的密码安全级别评定为:高')
    print('请继续保持')
elif alphabet == False and digit == False and length >= 8:
    if simple == True:
        print('你的密码安全级别评定为:中1')
    elif spe == True and (shuzhi == True or zhimu == True):
        print('你的密码安全级别评定为:中2')
    else:
        print('你的密码安全级别评定为:低2')
    print('请按以下方式提升您的密码安全级别:\n     1.密码必须由数字、字母及特殊字符三种组合\n     2.密码只能由字母开头\n     3.密码长度不能低于16位')
else:
    print('输入有误!')



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

使用道具 举报

 楼主| 发表于 2020-7-6 22:04:32 | 显示全部楼层

多谢大佬,刚学到14讲,用了很多百度来的半懂不懂的,哈哈哈,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-6 22:06:51 | 显示全部楼层
Hello. 发表于 2020-7-6 19:41
可否展示一下报错信息

感谢,没有报错,只是输出不了正确答案,五楼大佬指出来了,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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