需要下列題目的程式碼
設計密碼的分數計算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
你这个为啥是 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分】