【Python CheckiO 题解】Between Markers
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。
CheckiO 官网:https://checkio.org/
我的 CheckiO 主页:https://py.checkio.org/user/TRHX/
CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise
题目描述
【Between Markers】:给定一个字符串和两个标记字符(第一个和最后一个标记),找到两个标记符之间包含的子字符串。初始标记和最终标记始终不同;如果这两个标记在字符串中都不存在,则返回原字符串;如果没有初始标记,则应将第一个字符视为字符串的开头;如果没有最终标记,则最后一个字符应视为字符串的结尾;如果最终标记位于初始标记之前,则返回一个空字符串。
【链接】:https://py.checkio.org/mission/between-markers/
【输入】:三个参数,都是字符串,第二个和第三个参数是初始标记和结束标记
【输出】:字符串
【范例】:
between_markers('What is >apple<', '>', '<') == 'apple'
between_markers('No[/b] hi', '[b]', '[/b]') == 'No'
解题思路
利用 find()
方法查找原字符串中是否有标记字符,注意,由于 find()
方法会返回字符串出现的索引位置,而要提取标记字符之间的字符串,初始标记的位置就要加上他的长度,具体分四种情况:
有初始标记、有结束标记:利用切片,返回初始标记和结束标记之间的字符串;
无初始标记、无结束标记:返回原字符串;
有初始标记、无结束标记:利用切片,返回初始位置到字符串最后位置的字符串;
无初始标记、有结束标记:初始位置置零,利用切片,返回初始位置到结束标记之间的字符串
代码实现
def between_markers(text: str, begin: str, end: str) -> str:"""returns substring between two given markers"""start = text.find(begin)finish = text.find(end)if start != -1 and finish != -1:start += len(begin)return text[start:finish]elif start == -1 and finish == -1:return textelif start != -1 and finish == -1:start += len(begin)return text[start:]elif start == -1 and finish != -1:start = 0return text[start:finish]if __name__ == '__main__':print('Example:')print(between_markers('What is >apple<', '>', '<'))# These "asserts" are used for self-checking and not for testingassert between_markers('What is >apple<', '>', '<') == "apple", "One sym"assert between_markers("<head><title>My new site</title></head>","<title>", "</title>") == "My new site", "HTML"assert between_markers('No[/b] hi', '[b]', '[/b]') == 'No', 'No opened'assert between_markers('No [b]hi', '[b]', '[/b]') == 'hi', 'No close'assert between_markers('No hi', '[b]', '[/b]') == 'No hi', 'No markers at all'assert between_markers('No <hi>', '>', '<') == '', 'Wrong direction'print('Wow, you are doing pretty good. Time to check it!')
大神解答
大神解答 NO.1
import redef between_markers(text: str, begin: str, end: str) -> str:"""returns substring between two given markers"""try:start = text.index(begin) + len(begin)except ValueError:start = 0try:finish = text.index(end)except ValueError:finish = len(text)return text[start:finish]
index()
方法检测字符串中是否包含子字符串,如果指定了开始和结束范围,则检查是否包含在指定范围内,该方法与 find()
方法一样,只不过如果子字符串不在原字符串中会报一个异常。
大神解答 NO.2
def between_markers(text: str, begin: str, end: str) -> str:"""returns substring between two given markers"""return text[(lambda x,y: 0 if x == -1 else x + y)(text.find(begin), len(begin)):(lambda x,y: y if x == -1 else x)(text.find(end), len(text))]
大神解答 NO.3
def between_markers(text: str, begin: str, end: str) -> str:start = text.find(begin) + len(begin) if begin in text else Nonestop = text.find(end) if end in text else Nonereturn text[start:stop]
【Python CheckiO 题解】Between Markers相关推荐
- 【Python CheckiO 题解】Between Markers (simplified)
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- Python CheckiO 题解系列 丨 博客目录索引
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...
- 【Python CheckiO 题解】Army Battles
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Date and Time Converter
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Largest Rectangle in a Histogram
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Roman Numerals
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Probably Dice
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Multicolored Lamp
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
- 【Python CheckiO 题解】Time Converter (12h to 24h)
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...
最新文章
- Swift2.1 语法指南——类型转换
- 在redhat9上安装firefox
- lnmp一键安装调优,lnmp,memcache,全文检索
- java睡眠后继续执行_Java线程只能有千个,而Go的Goroutine能有上百万个
- 03_Android项目中读写文本文件的代码
- Android中获取网络图片的三种方法
- 数组拼接时中间怎么加入空格_【题解二维数组】1123:图像相似度
- iangularjs 模板,AngularJS模板中的三元运算符
- 2021计算机应用基础统考,2021年度计算机应用基础统考练习题及答案.doc
- 手把手带你手写SpringMVC,剑指优秀开源框架灵魂
- 看懂Oracle执行计划(转载)
- Mr.J--初识Vue.js(两大特性示例)
- atom常用的插件整理
- [zz]为小米创建虚拟机路由器
- linux 从github拉取更新_2020年的GitHub年度报告,我看出了这些不一样的点
- 3DMax环境贴图无法正常显示的一种解决方法
- Spotfire 聚合筛选 会污损行数据
- 10分钟免费邮箱:10minutemail
- BZOJ 2286 SDOI2011 消耗战 倍增LCA+单调栈
- android 获取本地图片路径
热门文章
- 今天觉得自己好像比较紧张
- PHP编写命令行脚本和后台运行程序的注意事项
- linux 识别文件类型,技术|Linux 中 7 个判断文件系统类型的方法
- Python中曲率与弯曲的转换_1000R曲率更具沉浸感!三星T55曲面显示器评测
- java classpath bat_tomcat启动批处理——setclasspath.bat | 学步园
- Java设计模式笔记(1)单例模式
- 机器学习基于skcilearn tensorflow电子书_Tensorflow机器学习模型的跨平台上线
- atom配置python环境_python与excel有段情之二:python的安装和环境配置
- python 异步 生产者 消费者_python 线程通信 生产者与消费者
- python爬取小说出现乱码_详解Python解决抓取内容乱码问题(decode和encode解码)