def花 发表于 2020-7-6 18:54:46

大佬们 帮帮忙指出下我的错误,我头秃了!!!

import re
print('请输入需要检查的密码组合:', end='')
password = str(input())
shuzhi = bool(re.search(r'\d', password)) #是否含有数字
r = re.compile(r'^')
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.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('输入有误!')

def花 发表于 2020-7-6 18:56:14

14讲课后作业!!!

乘号 发表于 2020-7-6 18:59:35

我们的头一万年前就秃了!(doge)

Hello. 发表于 2020-7-6 19:41:27

可否展示一下报错信息

Twilight6 发表于 2020-7-6 20:42:22






r = re.compile(r'^') 可以去掉 ^,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'^')
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.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('输入有误!')



def花 发表于 2020-7-6 22:04:32

Twilight6 发表于 2020-7-6 20:42





多谢大佬,刚学到14讲,用了很多百度来的半懂不懂的,哈哈哈,感谢

def花 发表于 2020-7-6 22:06:51

Hello. 发表于 2020-7-6 19:41
可否展示一下报错信息

感谢,没有报错,只是输出不了正确答案,五楼大佬指出来了,哈哈
页: [1]
查看完整版本: 大佬们 帮帮忙指出下我的错误,我头秃了!!!