急-Python要如何設計密碼

需要下列題目的程式碼

設計密碼的分數計算function

密碼的分數計算規則如下:
1.N個英文字母小寫加N分。
2.X個英文字母大寫加X * 2分。
3.Y個數字加Y * 3分。
4.M個特殊符號【~!@#$%&<>_十=】加M * 5分(不包含【及】這兩個符號)。
5。有五個以上的數字且任兩個數字在密碼中的位置不相鄰,例如:「1a1a1a1a1」,加10分。

輸入說明:
給定至少兩組分數不同的密碼,每組密碼以隔行區隔,輸入-1以停止。

輸出說明:
計算各組密碼的分數,依序輸出最高及最低分數的兩組密碼及其分數,
兩組密碼以隔行區隔,兩組密碼中的密碼與分數之間以空格區隔。

範例輸入 :
1a1a1a1a1
a1a1a1a1a
1W$fg&9Q9kp32%
1W$fg&9Q9kp3%2
An@Apple!A*Day=Keeps^The#Doctor_Away
PEKOPEKO
-1

範例輸出 :
An@Apple!A*Day=Keeps^The#Doctor_Away 72
PEKOPEKO 16

img

你这个为啥是 72 分呢
An@Apple!A*Day=Keeps The#Doctor_Away

大写: 8个 16分
小写 :21个 21分
特殊字符: @!=#_ 5个 25分 题目了没有 * 号, 空格也没算进去

如果都算的话,那就是下面的程序

data = input()
if data == '-1':
    exit(0)

def guize(param):
    sum_xiaoxie = 0
    sum_daxie = 0
    sum_shuzi = 0
    sum_teshu = 0
    sum_guize = 10

    for i in param:
        if i >= 'a' and i <= 'z':
            sum_xiaoxie += 1
        if i >= 'A' and i <= 'Z':
            sum_daxie += 2
        if i >= '0' and i <= '9':
            sum_shuzi += 3
        if i in r"~!@#$%&<>_+= *":
            sum_teshu += 5

    for i in range(len(param)-1):
        if param[i] >= '0' and param[i] <= '9' and param[i+1] >= '0' and param[i+1] <= '9' or sum_shuzi <= 5:
            sum_guize = 0
            break
            
    return sum_xiaoxie + sum_daxie + sum_shuzi + sum_teshu + sum_guize

passwdList = []
while not data == '-1':
    tmp = []
    tmp.append(data)
    tmp.append(guize(data))
    passwdList.append(tmp)
    data = input()

passwdList.sort(key = lambda x : x[1])

print("%s %s" % (passwdList[-1][0], passwdList[-1][1]))
print("%s %s" % (passwdList[0][0], passwdList[0][1]))

1.X个大写字母就是加2*X分是吗?
2.Y个数字就是不管多少个数只加3分是吗?
3.5个以上数字满足条件5加10分,那么1W$fg&90u9kp3%2e3p2p加多少分
4,上面的2和3可以叠加吗?

import re
import string

def calcScore(st):
    score = 0
    S = '~!@#$%&<>_+='
    for i in st:
        if i in string.ascii_lowercase:
            score += 1
        elif i in string.ascii_uppercase:
            score += 2
        elif i in string.digits:
            score += 3
        elif i in S:
            score += 5
            
    r = re.findall(r'\d+', st)    
    c = sum([1 if len(i) == 1 else 0 for i in r])
    if c >= 5 :
        score += 10
    return score

s_min,s_max, score_min,score_max = '', '', 1000000,  0
while True:
    ss = input(">>>")
    if ss =="-1":break
    scoret = calcScore(ss)
    if scoret > score_max:
        s_max, score_max =ss, scoret
    if scoret < score_min:
        s_min, score_min =ss, scoret
        
print(s_max, score_max)
print(s_min, score_min)

上面写的是对数字部分有叠加【即只要有一个数字就加3分,如果同时存在5个不相邻的数字就会再加10分】