CCF CSP认证历年题目自练Day45

news2025/2/22 7:58:06

这几天搞泰迪杯数据分析技能赛去了。等拿国奖了就出一期关于泰迪杯的。

题目请添加图片描述

试题编号: 201703-3
试题名称: Markdown
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的:
请添加图片描述
  这些用 Markdown 写成的文本,尽管本身是纯文本格式,然而读者可以很容易地看出它的文档结构。同时,还有很多工具可以自动把 Markdown 文本转换成 HTML 甚至 Word、PDF 等格式,取得更好的排版效果。例如上面这段文本通过转化得到的 HTML 代码如下所示:
请添加图片描述

本题要求由你来编写一个 Markdown 的转换工具,完成 Markdown 文本到 HTML 代码的转换工作。简化起见,本题定义的 Markdown 语法规则和转换规则描述如下:
  ●区块:区块是文档的顶级结构。本题的 Markdown 语法有 3 种区块格式。在输入中,相邻两个区块之间用一个或多个空行分隔。输出时删除所有分隔区块的空行。
  ○段落:一般情况下,连续多行输入构成一个段落。段落的转换规则是在段落的第一行行首插入 <p>,在最后一行行末插入 </p>
  ○标题:每个标题区块只有一行,由若干个 # 开头,接着一个或多个空格,然后是标题内容,直到行末。# 的个数决定了标题的等级。转换时,# Heading 转换为 <h1>Heading</h1>## Heading 转换为 <h2>Heading</h2>,以此类推。标题等级最深为 6。
  ○无序列表:无序列表由若干行组成,每行由 * 开头,接着一个或多个空格,然后是列表项目的文字,直到行末。转换时,在最开始插入一行 <ul>,最后插入一行 </ul>;对于每行,* Item 转换为 <li>Item</li>。本题中的无序列表只有一层,不会出现缩进的情况。
  ●行内:对于区块中的内容,有以下两种行内结构。
  ○强调:_Text_ 转换为 <em>Text</em>。强调不会出现嵌套,每行中 _ 的个数一定是偶数,且不会连续相邻。注意 _Text_ 的前后不一定是空格字符。
  ○超级链接:[Text](Link) 转换为 <a href="Link">Text</a>。超级链接和强调可以相互嵌套,但每种格式不会超过一层。
输入格式
  输入由若干行组成,表示一个用本题规定的 Markdown 语法撰写的文档。
输出格式
  输出由若干行组成,表示输入的 Markdown 文档转换成产生的 HTML 代码。

请添加图片描述

提示
  由于本题要将输入数据当做一个文本文件来处理,要逐行读取直到文件结束,C/C++、Java 语言的用户可以参考以下代码片段来读取输入内容。

请添加图片描述
请添加图片描述
请添加图片描述

题目分析(个人理解)

  1. 题目定义的规则分为区块和行内两个部分,对于输入的字符串,具体处理步骤为输入一行,处理一行,在整个区块输入结束或整个输入结束后才输出一个区块的转换结果。
  2. 第一步,先处理行内,行内若包含强调和超级链接,则按照题目中的规则转换强调和超级链接
  3. 第二步,处理区块儿区块一共有三种,包括‘#’开头的标题,‘*’号开头的无序列表和段落,一个区块可能有多行,所以在每次处理一行时都要判断此行是否是区块的第一行以便添加,不同的格式
  4. 关于输出:空行和输入结束标志着区块的结束可以输出结果了,在区块结束或整个输入结束才输出整个区块,代码中用preline保存每一个区块的前面的输入,每次处理一行时都可以根据preline判断这个区块的类型,以便输出对应的格式字符串,例如,若preline包含< ul >说明这是一个无序列表,输出的时候在最后补上\n</ ul >
  5. 更更更具体的步骤:对于输入,利用sys库标准输入,对每一行判断,到底是区块还是行内;如果是区块,判断是区块的具体的哪三个,如果是‘#’开头的标题,统计是几级标题(利用count函数),利用.split()方法以#切片,按照要求格式拼接即可。如果是 ‘* ’开头,此时有一个问题,鬼知道是不是第一行,如果是第一行则先加ul,再按照要求切片拼接字符串即可,用list_tag标记,设置默认值为Flase如果是第一行,加入ul后设置list_tag=True。 如果是是段落,还需判断是不是段落的第一行,同理于*开头的,我就不多赘述了。
  6. 行内处理好后存入一个temp[]空间,然后开始处理行内,注意:超链接和强调可以相互嵌套,使用while循环如果存在‘ _ ’就一直判断,先处理强调,强调不会出现套娃的现象,所以,只需要知道哪一段强调即可,首先用i去标记是‘_’是第几次出现,如果是第一次i=1则是强调开始的标志,第二次i=2,是结束的标志,然后按照强调的字符串的开始和结尾要求对字符串操作即可。
  7. 再处理超链接的情况,超链接也不会嵌套超链接,还是用while判断是否存在‘[’,存在则有超链接,超链接的题目要求就是里面Test的情况多一些,本质还是字符串的处理,还是用字符串的切片和拼接(用烂了都,人都麻了)
  8. 最后判断是段落结束还是无序列表结束,分别追加相应的标识即可。
  9. 上代码!!!
import sys
data=[]#记录转换好的文档
flag=False#标记段落是否是多行
list_tag=False#标记无序列表是否是多行
for line in sys.stdin:#利用sys库标准输入,line表示键盘输入的每行内容
#区块
    line=line.strip()#利用strip()方法去字符串头尾的空格
    if '#' in line:#标题
        count=line.count('#')
        temp=line.split('#')[-1].strip()#不要用空格分割,万一题目标题有空格呢
        temp="<h"+str(count)+">"+temp+"</h"+str(count)+">"
    elif '*' in line:#如果是无序列表
        if list_tag==False:
            data.append("<ul>")
            list_tag=True
        temp=line.split("*")[-1].strip()#用*分割
        temp="<li>"+temp+"</li>"
    else:#段落
        if line and flag==False:#首次出现的段落
            temp="<p>"+line
            flag=True#重标记
        elif line and flag==True:#中间出现的段落
            temp=line
        elif line=="" and flag==True:#段落结束,修改最后一个元素(加上</p>)
            data[-1]=data[-1]+"</p>"
            flag=False
            temp=""
        elif line=='' and list_tag==True:#无序列表结束
            data.append("</ul>")
            temp=""
            list_tag=False
        else:#回到初始状态
            temp=''
            flag=False
            list_tag=False
#行内,强调
    i=1#标记’_'是第一个还是第二个
    while '_' in temp:#强调可能有多个,可能有无限个所以用while
        index_1=temp.find('_')#使用find()函数返回第一个’_‘索引
        if i==1:#第一次出现
            temp=temp[:index_1]+'<em>'+temp[index_1+1:]#切片,拼接操作
            i=2
        else:#第二次出现(一对’_‘完成)
            temp=temp[:index_1]+'</em>'+temp[index_1+1:]
            i=1
#超链接
    while '[' in temp:#超链接可能有多个,可能有无限个所以用while
        i1=temp.find('[')
        i2=temp.find(']',i1+1)#从i1+1位置开始王后找']'
        i3=temp.find('(',i2+1)
        i4=temp.find(')',i3+1)
        temp=temp[:i1]+'<a href="'+temp[(i3+1):i4]+'">'+temp[(i1+1):i2]+"</a>"+temp[(i4+1):]#按照格式切片拼接即可
    data.append(temp)#转换好的追加写入data[]即可
if flag==True:#当以段落结束时
    data[-1]=data[-1]+'</p>'
if list_tag==True:#当以无序列表结束时
    data.append("</ul>")
for d in data:#按输出格式输出(没有空行)
    if d=='':
        continue
    print(d)

总结

请添加图片描述

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

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

相关文章

11-13 周一 同济子豪兄CNN卷积神经网络学习记录

11-13 周一 同济子豪兄CNN卷积神经网络学习记录 时间版本修改人描述2023年11月13日14:02:14V0.1宋全恒新建文档2023年11月13日19:05:29V0.2宋全恒完成 大白话讲解卷积神经网络的学习 简介 为了深入理解CNN&#xff0c;进行B站 同济子豪兄深度学习之卷积神经网络的学习. 主要内…

加速mvn下载seatunnel相关jar包

seatunnel安装的时候&#xff0c;居然要使用mvnw来下载jar包&#xff0c;而且是从https://repo.maven.apache.org 下载&#xff0c;速度及其缓慢&#xff0c;改用自己本地的mvn下载。 修改其安装插件相关脚本&#xff0c;复制install-plugin.sh重命名为install-plugin-mvn.sh …

【数据分享】我国独角兽企业数据(excel格式\shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平&#xff01;比如一个城市的金融企业较多&#xff0c;那这个城市的金融产业肯定比较发达&#xff1b;一个城市的制造业企业较多&#xff0c;那这个城市的制造业肯定比较发达。 本次我们为大家带来的…

论文导读 | 融合大规模语言模型与知识图谱的推理方法

前 言 大规模语言模型在多种自然语言处理相关任务上展现了惊人的能力&#xff0c;如智能问答等&#xff0c;但是其推理能力尚未充分展现。本文首先介绍大模型进行推理的经典方法&#xff0c;然后进一步介绍知识图谱与大模型融合共同进行推理的工作。 文章一&#xff1a;使用思维…

Python大神用的贼溜的九个技巧,超级实用~

文章目录 一、整理字符串输入二、迭代器&#xff08;切片&#xff09;三、跳过可对对象的开头四、只包含关键字参数的函数 (kwargs)五、创建支持「with」语句的对象六、用「slots」节省内存七、限制「CPU」和内存使用量八、控制可以/不可以导入什么九、实现比较运算符的简单方法…

Spring IOC - Bean的生命周期之实例化

在Spring启动流程文章中讲到&#xff0c;容器的初始化是从refresh方法开始的&#xff0c;其在初始化的过程中会调用finishBeanFactoryInitialization方法。 而在该方法中则会调用DefaultListableBeanFactory#preInstantiateSingletons方法&#xff0c;该方法的核心作用是初始化…

【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置

好像是一年前快两年了&#xff0c;笔者解析过glide的源码&#xff0c;也是因为觉得自己熟悉一些&#xff0c;也就没太关注过项目里glide的具体使用对当前业务的影响&#xff1b;主要是自负&#xff0c;还有就是真没有碰到过这样的数据加载情况。暴露了经验还是不太足够 有兴趣的…

【蓝桥杯选拔赛真题67】Scratch鹦鹉学舌 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch鹦鹉学舌 一、题目要求 编程实现 二、案例分析 1、角色分析

SQL-----STUDENT

【学生信息表】 【宿舍信息表】 【宿舍分配表】 为了相互关联&#xff0c;我们需要在表中添加外键。在宿舍分配表中添加用于关联学生信息表的外键 student_id&#xff0c;以及用于关联宿舍信息表的外键 dormitory_id&#xff1b; sql代码 -- 创建学生信息表 CREATE TABLE st…

如何利用黑群晖虚拟机和内网穿透实现公网远程访问

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

NLP在网安领域中的应用(初级)

NLP在网安领域的应用 写在最前面1. 威胁情报分析1.1 社交媒体情报分析&#xff08;后面有详细叙述&#xff09;1.2 暗网监测与威胁漏洞挖掘 2. 恶意软件检测2.1 威胁预测与趋势分析 3. 漏洞管理和响应4. 社交工程攻击识别4.1 情感分析与实时监测4.2 实体识别与攻击者画像构建4.…

超越任务调度的极致:初探分布式定时任务 XXL-JOB 分片广播

XXL-JOB 是一个分布式任务调度平台&#xff0c;支持分片任务执行。 1. 依赖引入 在项目中引入 XXL-JOB 的相关依赖。通常&#xff0c;你需要在项目的 pom.xml 文件中添加如下依赖&#xff1a; <dependency><groupId>com.xuxueli</groupId><artifactId&…

【02】Istio流量治理

2.1 Istio流量治理 Istio的流量路由规则使运维人员可以轻松控制服务之间的流量和API调用 Istio简化了诸如断路器&#xff0c;超时和重试之类的服务级别属性的配置&#xff0c;并使其易于设置重要任务&#xff08;如A/B测试&#xff0c;canary部署和基于百分比的流量拆分的分段部…

postswigger 靶场(CSRF)攻略-- 2.令牌验证

靶场地址&#xff1a; What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy (portswigger.net)https://portswigger.net/web-security/csrf 令牌(token)验证取决于请求方法 题目中已告知易受攻击的是电子邮件的更改功能&#xff0…

汽车展示服务预约小程序的效果

汽车/摩托车/电动车等是人们主要的交通工具&#xff0c;市场各品牌及经销店非常多&#xff0c;其行业可拓展性非常强&#xff0c;因此在线下经营的同时&#xff0c;线上也同样具备获客转化品牌传播等属性。 而品牌所遇的难题也非常明显&#xff0c;那就是线上不足&#xff0c;线…

【LIUNX】配置DNS服务器

【LIUNX】配置DNS A.安装bind bind-utilsB.修改named.conf配置文件C.生成并修改uos.com.db 文件1.复制模版文件named.localhost 到文件uos.com.db2.修改uos.com.db文件 D.重启named服务E.配置DNS服务器F.测试DNS服务器 A.安装bind bind-utils yum -y install bind bind-utilso…

青少年编程学习 等级考试 蓝桥杯/NOC/GESP等比赛资料合集

一、博主愚见 在当今信息技术高速发展的时代&#xff0c;编程已经成为了一种必备的技能。随着社会对于科技人才的需求不断增加&#xff0c;青少年编程学习正逐渐成为一种趋势。为了更好地帮助青少年学习编程&#xff0c;提升他们的技能和素质&#xff0c;博主结合自身多年从事青…

《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox

1、按钮组QButtonGroup 如果有多个单选按钮&#xff0c;可以统一放进一个按钮组。 图中有三个单选按钮放进了一个QGroupBox,并且设置了水平布局&#xff0c;现在要将这三个单选按钮放进一个按钮组&#xff0c;之前的想法是先把三个按钮加入按钮组&#xff0c;再把按钮组放进QG…

Redis键(Keys)

前言 在 Redis 中&#xff0c;键&#xff08;Keys&#xff09;是非常重要的概念&#xff0c;它们代表了存储在数据库中的数据的标识符。对键的有效管理和操作是使用 Redis 数据库的关键一环&#xff0c;它直接影响到数据的存取效率、系统的稳定性和开发的便利性。 本文将深入…

纯c语言模拟栈和队列(初学必看)

一、栈(Stack) 1.栈的概念及其结构 栈是一种特殊的线性表&#xff0c;在栈这个结构里&#xff0c;越先存进去的数据越难取出来。 这个结构就像是一个只有一端有打开的容器&#xff0c;越先放进去的球越在底部&#xff0c;想要把底部的球拿出来&#xff0c;就必须先把前面的求…