Python实现海盗文转换时如何保持单词末尾标点位置不变
海盗文转换代码修复方案
问题原因
原代码没有对单词的字母部分和末尾标点做拆分,直接对完整单词执行首字母移动逻辑,导致标点被错误插入到转换后的文本中间,不符合预期输出要求。
解决思路
- 预先定义需要识别的标点集合:
.,:;?! - 对每个拆分后的单词,从后向前遍历分离出末尾的连续标点,以及前面的纯字母内容
- 仅对纯字母内容执行转换逻辑:首字母移到末尾,拼接后缀
arg - 转换完成后,将之前分离的标点拼接在转换后内容的末尾
- 所有单词处理完成后用空格拼接得到最终结果
修复后代码
def pirate(s): # 定义需要处理的标点集合 punctuations = '.,:;?!' word_list = s.split(' ') result = [] for word in word_list: # 查找字母和标点的分割索引 split_pos = len(word) while split_pos > 0 and word[split_pos - 1] in punctuations: split_pos -= 1 # 拆分字母部分和末尾标点 letters_part = word[:split_pos] punct_part = word[split_pos:] # 转换字母部分 converted_letters = letters_part[1:] + letters_part[0] + 'arg' # 拼接后加入结果 result.append(converted_letters + punct_part) return ' '.join(result) print(pirate('Hello! how are, you!!'))
运行结果
输入测试用例Hello! how are, you!!时,输出为:elloHarg! owharg reaarg, ouyarg!!,完全符合预期。
内容的提问来源于stack exchange,提问作者Serenity
相关产品推荐
相关产品推荐

