破解藏头诗
藏头诗是一种将需要传递的内容隐藏在每句诗的第一个字,解密时只需要提取每句诗的第一个字,然后连在一起就可以获得传递的消息。古人经常使用藏头诗,隐晦地表达自己想说的话,既有诗意,又能传递信息。
例如《水浒传》中的一诗:
芦花丛中一扁舟,俊杰俄从此地游。
义士若能知此理,反躬难逃可无忧。
提取每句诗的第一个字,连成一句话就是:芦俊义反。
补充文件 acrostic_poetry.py
下 acrostic_poetry_decryption(poem)
函数中的 TODO 部分,使其实现我们需要的功能:
decryption_text
。None
。import redef acrostic_poetry_decryption(poem: str) -> str:"""TODO"""decryption_text : str = ''return decryption_text
# 样例 1
poem = "芦花丛中一扁舟,俊杰俄从此地游,义士若能知此理,反躬难逃可无忧。"; decryption_text = "芦俊义反"
# 样例 2
poem = " 芦花丛中一扁舟,俊杰俄从此地游。义士 若能知此理,反躬难逃可无忧。"; decryption_text = "芦俊义反"
# 样例 3
poem = "芦花丛中一扁舟,俊杰俄从此地游义士若能知此理,反躬难逃可无忧"; decryption_text = "芦俊反"
# 样例 4
poem = None; decryption_text = None
注意:最终实现效果以完全满足要求为准,而不是仅满足如上样例。
split()
方法,需要多次操作才能完成。如果分割标识符较多,不是明智之举。这里使用正则的字符串分割方法re.split()
.[]
用来表示一组字符,单独列出:[,。] 匹配 ‘,或’。’列表推导
简化代码编写。分别从正则分割后的列表中提取每段的首个字。因为有空字符串,所以还要在列表推导中加个if
判断。join
方法将列表拼接为字符串返回即可。代码如下:
import redef acrostic_poetry_decryption(poem: str) -> str:"""TODO"""# 过滤非str类型输入if not isinstance(poem, str):return None# 过滤空格符poem = poem.replace(' ', '')# 过滤空字符串if poem == "":return None# 利用正则以符号分组,提取每组的首个字符result = [x[0] for x in re.split('[,。]', poem) if x]decryption_text: str = ''.join(result)return decryption_text
题目来源:蓝桥 破解藏头诗