密码强度python

这是描述:
用于密码的英文字符被分为四种:(1)字母(2)数字(3)英文标点符号(4)其他所有英文字符。
其中,标点符号包括: ?!.,'“;:`_-()[]/*
现在用户输入一行字符作为密码,程序判断其强度。规则为:(1)密码长度小于8为弱密码,判定为”weak“;(2)密码长度大于等于8,且只包含一种字符也为弱密码;(3)密码长度大于等于8,且包含两种字符为中等密码,判定为”medium“;(3)密码长度大于等于8,且包含三种字符为强密码,判定为”good“;(4)密码长度大于等于8,且包含四种字符为极强密码,判定为”excellent“

例如密码:”abc123“为弱密码,输出"weak”;
密码“1234567890“为弱密码,输出"weak";
密码“123abdef”为中等密码,输出"medium";
密码“123()abdef”为强密码,输出"good";
密码“123()abd@”为极强密码,输出"excellent";

以下是我找到的一段代码,经测试只得了50分,希望各位帮忙捉虫

x = input()
level = ['weak', 'medium', 'good', 'excellent']
store = ['?', '!', '.',',', "'", '“', ';', ':', '`', '_', '-', '(', ')', '[', ']', '/', '*']
level_flag = -1
f1, f2, f3, flag, f4 = 1, 1, 1, 1, 1
if len(x)<8:
    print('weak')
    flag=0
else:
    level_flag=0
for i in x:
    if f1:
        if i in store:
            level_flag+=1
            f1=0
if f2:
    if 96< ord(i)<123 or 64< ord(i) < 91:
        level_flag +=1
        f2 =0
if f3:
    if 47< ord(i) <58:
        level_flag+=1
        f3=0
if f4:
    if 31< ord(i) < 48 or 57<ord(i)<65 or 90 < ord(i)<97 or 122 < ord(i):
        level_flag +=1
        f4=0
if flag:
    print(level[level_flag-1])


你得把每个判断条件都放在循环内

x = input()
level = ['weak', 'medium', 'good', 'excellent']
store = ['?', '!', '.',',', "'", '“', ';', ':', '`', '_', '-', '(', ')', '[', ']', '/', '*']
level_flag = -1
f1, f2, f3, f4 = 1, 1, 1, 1
if len(x) < 8:
    print('weak')
else:
    level_flag = 0
    for i in x:
        if f1 and i in store:
            level_flag += 1
            f1 = 0
        if f2 and ((96 < ord(i) < 123) or (64 < ord(i) < 91)):
            level_flag += 1
            f2 = 0
        if f3 and (47 < ord(i) < 58):
            level_flag += 1
            f3 = 0
        if f4 and ((31 < ord(i) < 48) or (57 < ord(i) < 65) or (90 < ord(i) < 97) or (122 < ord(i))):
            level_flag += 1
            f4 = 0
    print(level[level_flag-1])