#密码强度等级
"""
题目描述
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符
二、字母:
0 分: 没有字母
10 分: 全都是小(大)写字母
20 分: 大小写混合字母
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号
五、奖励:
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
>= 90: 非常安全
>= 80: 安全(Secure)
>= 70: 非常强
>= 60: 强(Strong)
>= 50: 一般(Average)
>= 25: 弱(Weak)
>= 0: 非常弱
对应输出为:
VERY_SECURE
SECURE,
VERY_STRONG,
STRONG,
AVERAGE,
WEAK,
VERY_WEAK,
请根据输入的密码字符串,进行安全评定。
注:
字母:a-z, A-Z
数字:-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./ (ASCII码:x21~0x2F)
:;<=>?@ (ASCII<=><=><=><=><=>码:x3A~0x40)
[\]^_` (ASCII码:x5B~0x60)
{|}~ (ASCII码:x7B~0x7E)
输入描述:
本题含有多组输入样例。
每组样例输入一个string的密码
输出描述:
每组样例输出密码等级
示例1
"""
while True:
try:
str_data = input().strip()
num, up_char, low_char, other, score = 0, 0, 0, 0, 0
for data in str_data:
if data.isdigit(): #Python isdigit() 方法检测字符串是否只由数字组成
num += 1 #计算数字的个数
elif data.isalpha(): #Python isalpha() 方法检测字符串是否只由字母组成
if data.lower() == data:
low_char += 1 #计算小写字母的个数
else:
up_char += 1 #计算大写字母的个数
else:
other += 1 #计算符号的个数
# 长度
if len(str_data) < 5:
score += 5
elif len(str_data) < 8:
score += 10
else:
score += 25
# 字母
if up_char==0 and low_char==0:
pass
elif (up_char==0 and low_char!=0) or (up_char!=0 and low_char==0):
score += 10
else:
score += 20
# 数字
if num == 0:
pass
elif num == 1:
score += 10
else:
score += 20
# 其他字符
if other == 0:
pass
elif other == 1:
score += 10
else:
score += 25
# 奖励
if num != 0 and (up_char+low_char) != 0 and other==0:
score += 2
elif num != 0 and up_char != 0 and low_char != 0 and other!=0:
score += 5
elif num != 0 and (up_char+low_char) != 0 and other!=0:
score += 3
# 最后评分标准
if score >=90:
print('VERY_SECURE')
elif score >=80:
print('SECURE')
elif score >= 70:
print('VERY_STRONG')
elif score >= 60:
print('STRONG')
elif score >= 50:
print('AVERAGE')
elif score>=25:
print('WEAK')
else:
print('VERY_WEAK')
except:
break
#扑克牌大小
"""
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,
如:4 4 4 4-joker JOKER。
基本规则:
输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,
不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系
(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子)
"""
# 使用字典更加高效一点
# 先判断是否有火箭,有则输出火箭
# 然后判断双方牌数是否相同,输出第一位较大的
# 然后判断是否有炸弹,有则输出炸弹
while True:
try:
D = {'3':0, '4':1, '5':2, '6':3, '7':4, '8':5, '9':6, '10':7, 'J':8, 'Q':9, 'K':10, 'A':11, '2':12, 'joker':13, 'JOKER':14}
a,b = input().split('-')
s1,s2 = a.split(),b.split()
if a == 'joker JOKER' or b == 'joker JOKER':
print('joker JOKER')
elif len(s1) == len(s2):
print(a if D[s1[0]]>D[s2[0]] else b)
#判断是否有炸弹
elif len(a) == 7:
print(a)
elif len(b) == 7:
print(b)
else:
print('ERROR')
except:
break
#合法ip
"""
输入一个ip,判断其格式是正确的
"""
"""
10.138.15.1
255.0.0.255
255.255.255.1000
YES
YES
NO
"""
#ip合法:以点作为分隔符,有四个部分,每个部分的数字小于256
while 1:
try:
a=input()
b=a.split('.')
if len(b)!=4:
print('NO')
else:
if 0<=int(b[0])<256 and 0<=int(b[1])<256 and 0<=int(b[2])<256 and 0<=int(b[3])<256:
print('YES')
else:
print('NO')
except:
break
#找到最长的数字串
"""
在字符串中找到最长的数字串
"""
import re
while True:
try:
s=input()
#t = re.compile(r'\d+')
a=re.findall('\d+',s)#用正则表达式匹配出字符串中的数字
length=0
res=[]
for i in a:
#找到数字串长度较大的那个
if len(i)>length:
length=len(i)
#如果又找到新的数字串,res重新指向空列表
res=[]
res.append(i)
#较大的且长度相等的数字串,也放入列表中
elif len(i)==length:
res.append(i)
print(res)
st=res[0]
# print(st)
for s in res[1:]:
st=st+s
print(st+','+str(length))
except:
break
#数字前加上符号
''''
题目描述
将一个字符中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。
注意:本题有多组样例输入。
输入描述:
输入一个字符串
输出描述:
字符中所有出现的数字前后加上符号“*”,其他字符保持不变
'''
"""
注意string.replace()返回一个新的字符串,对原字符串并无修改
"""
while True:
try:
string = input()
out = ''
for i in string:
if i.isdigit():
out += "*"+i+"*"
else:
out += i
# out = out.replace("**", "")
print(out)
except:
break
#字符串逆序
"""
题目描述
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入描述:
输入一个字符串,可以有空格
输出描述:
输出逆序的字符串
"""
# s = input("请输入字符串:")
# n_s = ''
# for i in range(len(s), 0, -1):
# n_s += s[i-1]
# print(n_s)
while True:
try:
s = input()
print(s[::-1])
except Exception as e:
break
"""
切片语法
t[s:e:p] ,当步进 p < 0:
起始序号 s 缺省时,s 默认为−1.
终点序号 e 缺省时默认为 − l e n ( t ) − 1
"""
python练习(三)
最新推荐文章于 2022-04-12 21:43:54 发布