python练习(三)

本文主要探讨了Python编程中的字符串操作技巧,包括字符串的创建、修改、查找、替换和分割等基本操作,并结合实例介绍了如何运用这些技巧解决实际问题。同时,文章还深入讨论了一些基础算法的应用,如排序、搜索算法在字符串处理中的应用,帮助读者提升Python编程能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#密码强度等级
"""
题目描述
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
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
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值