Python实现Ubbi Dubbi转换时bub子串移位拼接问题求助
ubbi_dubbi单词转换函数修复实现
原有代码问题
- 基础转换逻辑失效:遍历原字符串索引时反复给
new_word赋值,之前插入的"ub"会被覆盖,包含多个元音的单词无法正确转换;嵌套循环的写法还会导致字符串长度和遍历索引不匹配 - "bub"子串判断逻辑写反:
new_word in "bub"是判断转换后的完整字符串是否是"bub"的子串,和实际判断需求完全相反 - 移位拼接逻辑未完成,不需要手写循环逐字符查找子串,Python字符串内置的
find()方法可以直接返回子串起始索引
实现逻辑
- 基础规则转换:逐字符遍历输入单词,辅音直接保留,元音字符前插入"ub",用列表逐段拼接避免索引错位问题
- "bub"移位处理:定位转换后字符串中"bub"的起始位置,如果存在该子串,将「从字符串开头到"bub"子串末尾」的整段内容切下,拼到剩余字符串的后面
- 返回最终处理结果
注意:Python中字符串是不可变对象,逐字符拼接时用列表存储片段最后再join,比反复拼接字符串效率更高,也能避免遍历原字符串索引带来的长度不匹配问题
完整可运行代码
def ubbi_dubbi(word): # 完成基础元音前加ub的转换 converted_parts = [] for c in word: if c in "aeiou": converted_parts.append(f"ub{c}") else: converted_parts.append(c) converted = ''.join(converted_parts) # 处理bub移位逻辑 bub_index = converted.find("bub") if bub_index != -1: # 切分移动段和剩余段,重新拼接 move_section = converted[:bub_index + 3] rest_section = converted[bub_index + 3:] return rest_section + move_section return converted # 测试用例 print(ubbi_dubbi('cat')) print(ubbi_dubbi('up')) print(ubbi_dubbi('upside')) print(ubbi_dubbi('umbrella')) print(ubbi_dubbi('tummy')) print(ubbi_dubbi('banana')) print(ubbi_dubbi('butter')) print(ubbi_dubbi('hubbub')) print(ubbi_dubbi('tube'))
内容的提问来源于stack exchange,提问作者Daniel Klave
相关产品推荐
相关产品推荐

