【蓝桥杯】Python字符串处理和应用

news2024/9/28 5:25:25

前言:

        本文侧重于通过实战训练来提高字符串的处理能力,可以先行学习一下我之前的文章:蓝桥杯Python快速入门(4) ,学习完基础知识再来刷题才会事半功倍!

字符串处理 

# 字符串切片
str1="12345678abcdefghi"
print(str1)                 #输出:12345678abcdefghi
print(str1[3])              #输出:4
print(str1[2:5])            #输出:345         截取一部分,左闭右开
print(str1[:5])             #输出:12345
print(str1[2:])             #输出:345678abcdefghi
print (len (str1) )         #输出字符串长度:17

#合并字符串: +和''.join
str2="***"
str12 = str1+str2
print (str12)               #输出:12345678abcdefghi***
#也可以这样合并字符串
print(''.join([str1, str2]))#输出:12345678abcdefghi***

#字符串插入:借助list        在str1[4]插入      
#str1="12345678abcdefghi"
str_list = list(str1)
str_list.insert(4, "***")   
aa= ''.join(str_list)
print(aa)                   #输出:1234***5678abcdefghi
      
#重复输出
#str2="***”
print (str2*2)              #输出:******
#用\输出特殊符号
print("\\  \" \n")      #输出:\  "  换行

# 全局查找子串
str3="abc"
str1="12345678abcdefghi"
print (str3 in str1)    #输出:True
print(str3 not in str1) #输出:False

# 局部查找
#str1="12345678abcdefghi"
#str.find(str,beg=0, end=len(string))指定范围查找
print (str1.find("345") )            #输出:2  输出字符串第一个字符索引
print (str1.find("345", 10))         #输出:-1 找不到输出-1
print (str1.find("456", 2,20))       #输出:3 

#交换
str2 = "123"
str3 = "abc"
str2, str3 = str3,str2
print(str2)             #输出:abc

#比较
print (str2 == str3)    #输出:False
print (str2 != str3)    #输出:True

例题一:单词分析

2020省赛 lanqiaoOJ504题

题目描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

输入输出样例

示例 1

输入

lanqiao

输出

a
2

示例 2

输入

longlonglongistoolong

输出

o
6

【知识补充】 

求一个字符的 ASCII码:ord('字符')

求该ASCII码下的字符:chr(ASCII码)

【代码】

s = input()
n = [0]*256   #对应256个ASCII码,初始化每个字符都是0个
for ch in s:  #逐个统计s的每个字符
    n[ord(ch)] += 1 
k = n.index (max(n)) # 找出数量最多的字符的索引(ASCII码)
print(chr(k))        # 根据ASCII码找到数量最多的字符
print(max (n))       # 该字符的个数

 例题二:标题统计

lanqiaoOJ题号325 

题目描述

凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?

注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。

输入描述

输入文件只有一行,一个字符串 s (1≤∣s∣≤5)。

输出描述

输出只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。

输入输出样例

示例

输入

Ca 45

输出

4

代码 

把空格和换行符替换成空,然后再统计字符数。 

替换:s.replace('要替换的字符','替换成的字符') 

s = input ()
print (len(s.replace(' ','').replace('\n','')))

例题三:罗马数字 

2012, 省赛  langiao0J题号276

题目描述

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现 0 的概念!

罗马数字的表示主要依赖以下几个基本符号:

I 1     V 5     X 10     L 50     C 100     D 500     M 1000

这里,我们只介绍一下 1000 以内的数字的表示法。

单个符号重复多少次,就表示多少倍。最多重复 3 次。比如:CCC 表示 300,XX 表示 20,但 150 并不用 LLL 表示,这个规则仅适用于 I X C M。

如果相邻级别大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX 表示 9,IV 表示 4, XL 表示 40 更多的输入描述参见下表,你找到规律了吗?

 

I,1        II,2        III,3        IV,4        V,5        VI,6        VII,7        VIII,8        IX,9

X,10        XI,11        XII,12        XIII,13        XIV,14        XV,15        XVI,16        XVII,17

XVIII,18        XIX,19        XX,20        XXI,21        XXII,22        XXIX,29        XXX,30

XXXIV,34        XXXV,35        XXXIX,39        XL,40        L,50        LI,51        LV,55        LX,60

LXV,65        LXXX,80        XC,90        XCIII,93        XCV,95        XCVIII,98        XCIX,99

C,100        CC,200        CCC,300        CD,400        D,500        DC,600        DCC,700

DCCC,800        CM,900        CMXCIX,999

本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。

输入描述

第一行是整数 n (n<100) ,表示接下来有 n 个罗马数字。

以后每行一个罗马数字。罗马数字大小不超过 999。

输出描述

要求程序输出 n 行,就是罗马数字对应的十进制数据。

输入输出样例

输入

3
LXXX
XCIII
DCCII

输出

80
93
702

代码: 

这道题主要是找规律。

dict = {'I': 1, 'IV': 4, 'V': 5, 'IX': 9, 'X': 10, 'XL': 40, 'L': 50, 'XC': 90,
        'C': 100, 'CD': 400, 'D': 500, 'CM': 900, 'M': 1000}
n = int(input())
for _ in range(n):
    ans = 0
    flag = 0
    s = input()
    for i in range(len(s)):
        if flag:            # 前一位<后一位
            flag = 0        # 已经计算过了,跳出当前循环
            continue
        c = s[i]            # 当前罗马数字对应的数字
        if i + 1 < len(s):  # i不是最后一位
            if dict[c] < dict[s[i + 1]]:  # 前一位<后一位
                flag = 1
                c = s[i:i + 2]            # 这两位罗马数字对应的数字
        ans += dict[c]      
    print(ans)

例题四:删除字符

题目描述

给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么?

输入描述

输入的第一行包含一个单词,由大写英文字母组成。

第二行包含一个正整数 t。

其中,单词长度不超过 100,t 小于单词长度。

输出描述

输出一个单词,表示答案。

输入输出样例

输入

LANQIAO
3

输出

AIAO

思路 

这道题要求删除后得到字典序最小的单词,而字典序是从左到右排的,所以应该优先从左边开始删除。

做法:每次删除时,从头到尾遍历字符串,比较相邻的两个字符,如果前面的数较大就删除它。 

 代码

s = list(input()) + ['']      # 注意最后补一个空格,空格的ASCI最小
t = int(input())
for _ in range(t):
    for i in range(0, len(s)):
        if s[i] > s[i + 1]:
            s.remove(s[i])    # 只能转换成列表再删除
            break
print(''.join(s))             # 连起来打印s

例题五:数位递增的数

lanqiao0J题号145

题目描述

一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数。

例如 1135 是一个数位递增的数,而 1024 不是一个数位递增的数。

给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?

输入描述

输入的第一行包含一个整数 n(1<n<10^6)。

输出描述

输出一行包含一个整数,表示答案。

输入输出样例

输入

30

输出

26

思路

  • n比较小,只有10^6,可以暴力(算法复杂度O(n))检查每个数字。
  • 如何判断一个数是数位递增的?一种简单的方法是把数变成一个字符串,然后按顺序判断每个字符的大小。
  • 顺序:转换为字符串后,用sorted()从小到大排序,如果排序前后一样,则是一个数位递增的数

 代码

n = int (input ())
ans = 0
for i in range(1, n):
    s = list(str(i))
    if s==sorted(s):#注意不能用sort ()
        ans+=1
print(ans)

例题六:单词接龙(难)

lanqiao0J题号769 

题目描述

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast 和 astonish,如果接成一条龙则变为 beastonish,另外相邻的两部分不能存在包含关系,例如 at 和 atide 间不能相连。

输入描述

输入的第一行为一个单独的整数 n(n≤20)表示单词数

以下 n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在。

输出描述

输出以此字母开头的最长的“龙”的长度。

输入输出样例

输入

5
at
touch
cheat
choose
tact
a

输出

23

思路 

  • 把所有字符串拼接在一起,输出最长的拼接。
  • 用DFS搜索所有可能的拼接,找到其中最长的拼接。
  • 代码中的check()函数,判断s和m是否能拼接,当s的后k个和m的前k个字符相同,则能拼接。

 代码

def check(x, y) : # 检查两个单词是否可以合并
    flag=0
    for i in range(1, min(len(x) , len(y))):
        if x[-i : len(x)]==y[:i]:  # 如果龙的后段等于后一个单词的前段
            flag=1 ;break
    if flag == 1 :
        if x[:len(x)-i] in y[i: ] or y[i:] in x[:len(x)-i]: # 如果有包含关系
            return False
        else:
            return i    # 可以拼接,返回可以开始拼接的位置
    else:
        return False    # 不能拼接,返回False
def dfs(dragon,x) :
    global ans
    ans=max(len(dragon) , ans)  # 更新龙的最长长度
    for i in range(n):
        if check (x, word[i])!=False and vis[i]<2: # 访问次数不能超过两次
            r=dragon+word[i][check(x,word[i]):]    # 合并
            vis[i]+=1       # 保护现场
            dfs (r, word[i])
            vis[i]-=1       # 恢复现场


n=int (input())
word=[]
for i in range (n) :
    word.append(input())
first =input()
ans=0                       # 记录长度
for i in range(n) :         # vis:访问情况
    vis=[0]*n
    if word[i][0]==first:   # 第i个单词的首字母是龙头
        vis[i]+=1
        res=word[i]         # 当前的龙
        dfs(res,word[i])    # 参数K:当前的龙和上一个单词,初始化为两个同一个单词
print (ans)

练习题: 

蓝桥杯题库:题库 - 蓝桥云课 (lanqiao.cn) 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优秀码农选择对象详细指南,看完记得要实战噢

2023年了&#xff0c;你是否已到了法定年纪&#xff0c;那么这一篇优秀码农选择对象的详细指南&#xff0c;你一定用得到&#xff0c;看完记得感谢狗哥哦&#xff01; 目录 一、对于婚姻先来思考这么几条 1. 太快决定结婚&#xff1f; 2. 一方或双方急于结婚&#xff1f; 3.…

【go语言入门教程】——1. go语言介绍及安装

目 录1. go 语言简介2. go 语言安装2.1 下载安装包2.2 安装 go2.3 验证安装结果3. 使用 VS Code 运行 go 程序1. go 语言简介 go的产生 go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 go 是从 2007 年末由 Robert Griesemer, Rob Pike, Ken…

Linux系统常见问题总结(持续更新)

目录一&#xff0c;vim安装与设置1&#xff0c;安装2&#xff0c;配置二&#xff0c;Found a swap file by the name三&#xff0c;docker启动失败&#xff1a;Job for docker.service failed because the control process exited with error四&#xff0c;docker-compose安装r…

JavaScript基础知识点整理(一)——运算符比较、闭包、深浅拷贝、原型、

内容主要涉及JavaScript&#xff1a;运算符比较、闭包、深浅拷贝、原型。 JavaScript闭包、原型、深浅拷贝1、 和 的差异2、JavaScript闭包3、JavaScript深浅拷贝3.1、浅拷贝3.2、深拷贝4、JavaScript原型1、 和 的差异 对于而言&#xff0c;若对比双方的类型不一样的话&…

MicroBlaze系列教程(2):AXI_INTC的使用

文章目录 @[TOC]AXI_INTC简介常用函数使用示例参考资料工程下载本文是Xilinx MicroBlaze系列教程的第1篇文章。 AXI_INTC简介 AXI_INTC中断控制器用于将多路中断信号按照优先级输出一路给处理器,支持AXI4-Lite总线,最多支持32个中断输入,中断输入可配置为边沿触发或电平触发…

【vuex】一.vue.js的基本指令;二.vue.js全家桶开发;三.vuex

目录 一.vue.js的基本指令 1.Vue的作用&#xff1a;快速的构建前端页面&#xff08;封装了html、css、js&#xff09;&#xff0c;以工程化的方式进行前端的开发 2.Vue的核心&#xff1a; &#xff08;1&#xff09;组件化&#xff1a; &#xff08;2&#xff09;数据的双…

shell执行脚本的方法及环境变量

执行脚本的方法 &#xff08;1&#xff09;bash ./filename.sh&#xff08;产生子进程&#xff0c;再运行&#xff0c;使用当前指定的bash shell去运行&#xff09; &#xff08;2&#xff09;./filename.sh&#xff08;产生子进程&#xff0c;再运行&#xff0c;使用脚本里面指…

vue3 手撕日历控件

vue制作日历控件 效果如下&#xff1a; <template><div class"cal_con" style"margin-left:200px"><div class"cal_header"><!-- 顶部左侧 --><div class"cal_header_left"><div class"cal_he…

STL分析(十 hash、function type_traits、cout、move )

hash function 假定存在一个Customer类 class Customer{ public:string fname, lname;int no; };其哈希函数存在三种方式 //方式一&#xff1a;创建可调用类型 class CustomerHash { public:std::size_t operator()(const Customer& c) const{return ......} };unordere…

Android 签名基础知识

目录Android 为什么要签名keystore的生成&#xff1a;keystore信息的查看参数说明&#xff1a;Android 怎么签名使用 jarsigner 签名如何查找 jdk 位置签名时遇到的问题查看 apk 是否签名查看 Apk 的MD5值以及MD5不显示时的解决办法缺少 xx.RSA 文件的原因V1 vs V2Android 为什…

Coolify系列-解决局域网主机突然连不了虚拟机

开始之前&#xff0c;我们需要确保配置一切正常&#xff0c;原始配置参考下文 Coolify系列-手把手教学解决局域网局域网中的其他主机访问虚拟机以及docker服务 如果是之前已经配置好的&#xff0c;突然无法访问了&#xff0c;采取以下方式进行排查操作 在虚拟机执行 ifconf…

【GD32F427开发板试用】基于蓝牙的远程步进电机控制

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;寒冰1988 一、前言 接上篇文章【GD32F427开发板试用】基于蓝牙模块的远程点灯演示&#xff0c;本篇是第二篇&#xff0c;基于调通的蓝牙模块添…

Pytest-Allure测试报告

Allure 模块下载 pip install allure-pytest包下载 https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/此处我选择下载最新的&#xff0c;版本上可以选择不是最新的&#xff0c;2.9.0的。下载zip或者tgz后缀格式的都可以。 配置环境变量 找到解压…

RPA自动办公01——Uibot的安装和基础用法

本期开始RPA的学习流程。 RPA是机器人自动化流程的简写&#xff0c;目的在于减少重复性的劳动&#xff0c;而且上手很简单&#xff0c;无需编程就能用。 本系列使用Uibot 软件&#xff0c;其下载地址在&#xff1a;来也科技流程创造者&#xff08;UiBot Creator&#xff09; …

searchableSelect 插件使用

<script type"text/javascript" src"//searchableSelect.js"></script> <script>function getUserServer() {var _this 自定义封装接口请求、弹窗等方法;_this.getAjax("get","//xxxxx/server", {}, function(res)…

前端异常监控平台Sentry安装配置使用及问题

前言&#xff1a;Sentry是一款开源的异常监控平台,支持各种语言的SDK&#xff0c;通过对应SDK可以收集错误信息和性能数据&#xff0c;并可以再后台web页面中查看相关信息。官方地址&#xff1a;安装说明&#xff1a;https://develop.sentry.dev/self-hosted/后台使用说明&…

1.1计算机组成结构:CPU组成、冯·诺依曼结构与哈佛结构、嵌入式芯片术语

1.1计算机组成结构&#xff1a;CPU组成、冯诺依曼结构与哈佛结构、嵌入式芯片术语计算机组成结构CPU组成运算器控制器冯诺依曼结构与哈佛结构冯诺依曼结构哈佛结构嵌入式——芯片术语计算机组成结构 CPU组成 CPU分成两个部分&#xff0c;包括运算器和控制器。 CPU是计算机中核…

Linux之环境搭建

目录 一、VMware 二、centos7的安装 三、Mysql安装 四、 前端项目部署 1.确保前台项目能用 2.将前台项目打包npm run build 3.做ip/host主机映射 4.完成Nginx动静分离的default.conf的相关配置 5.将前端构件号的dist项目&#xff0c;上传到云服务器/usr/local/... …

[Swift]SDK开发

本文主要介绍使用swift语言制作framework Demo:https://github.com/Gamin-fzym/CMSDK 一、创建工程 1.创建目录 这里我创建了一个“CMSDK”目录 2.打开Xcode新建workspace放入CMSDK目录 这里命名为“CMSDK” 3.打开CMSDK.xcworkspace新建SDK工程放入CMSDK目录 这里还是命…

06 CSS-盒子模型【尚硅谷JavaWeb教程】

06 CSS-盒子模型【尚硅谷JavaWeb教程】 JAVAWEB的学习笔记 学习视频来自&#xff1a;https://www.bilibili.com/video/BV1AS4y177xJ/?vd_source75dce036dc8244310435eaf03de4e330 不同的浏览器导致前端展示页面不一样&#xff0c;盒子的大小的不同。&#xff08;所以前端要考虑…