【Python CheckiO 题解】Between Markers
CheckiO 是面向初學(xué)者和高級(jí)程序員的編碼游戲,使用 Python 和 JavaScript 解決棘手的挑戰(zhàn)和有趣的任務(wù),從而提高你的編碼技能,本博客主要記錄自己用 Python 在闖關(guān)時(shí)的做題思路和實(shí)現(xiàn)代碼,同時(shí)也學(xué)習(xí)學(xué)習(xí)其他大神寫的代碼。
CheckiO 官網(wǎng):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】:給定一個(gè)字符串和兩個(gè)標(biāo)記字符(第一個(gè)和最后一個(gè)標(biāo)記),找到兩個(gè)標(biāo)記符之間包含的子字符串。初始標(biāo)記和最終標(biāo)記始終不同;如果這兩個(gè)標(biāo)記在字符串中都不存在,則返回原字符串;如果沒有初始標(biāo)記,則應(yīng)將第一個(gè)字符視為字符串的開頭;如果沒有最終標(biāo)記,則最后一個(gè)字符應(yīng)視為字符串的結(jié)尾;如果最終標(biāo)記位于初始標(biāo)記之前,則返回一個(gè)空字符串。
【鏈接】:https://py.checkio.org/mission/between-markers/
【輸入】:三個(gè)參數(shù),都是字符串,第二個(gè)和第三個(gè)參數(shù)是初始標(biāo)記和結(jié)束標(biāo)記
【輸出】:字符串
【范例】:
between_markers('What is >apple<', '>', '<') == 'apple' between_markers('No[/b] hi', '[b]', '[/b]') == 'No'解題思路
利用 find() 方法查找原字符串中是否有標(biāo)記字符,注意,由于 find() 方法會(huì)返回字符串出現(xiàn)的索引位置,而要提取標(biāo)記字符之間的字符串,初始標(biāo)記的位置就要加上他的長(zhǎng)度,具體分四種情況:
有初始標(biāo)記、有結(jié)束標(biāo)記:利用切片,返回初始標(biāo)記和結(jié)束標(biāo)記之間的字符串;
無初始標(biāo)記、無結(jié)束標(biāo)記:返回原字符串;
有初始標(biāo)記、無結(jié)束標(biāo)記:利用切片,返回初始位置到字符串最后位置的字符串;
無初始標(biāo)記、有結(jié)束標(biāo)記:初始位置置零,利用切片,返回初始位置到結(jié)束標(biāo)記之間的字符串
代碼實(shí)現(xiàn)
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() 方法檢測(cè)字符串中是否包含子字符串,如果指定了開始和結(jié)束范圍,則檢查是否包含在指定范圍內(nèi),該方法與 find() 方法一樣,只不過如果子字符串不在原字符串中會(huì)報(bào)一個(gè)異常。
大神解答 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]總結(jié)
以上是生活随笔為你收集整理的【Python CheckiO 题解】Between Markers的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP连接sql seaver数据库
- 下一篇: 浦发万用随借金是什么 浦发万用随借金好用