You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Ubbi Dubbi转换时bub子串移位拼接问题求助

ubbi_dubbi单词转换函数修复实现

原有代码问题

  • 基础转换逻辑失效:遍历原字符串索引时反复给new_word赋值,之前插入的"ub"会被覆盖,包含多个元音的单词无法正确转换;嵌套循环的写法还会导致字符串长度和遍历索引不匹配
  • "bub"子串判断逻辑写反:new_word in "bub"是判断转换后的完整字符串是否是"bub"的子串,和实际判断需求完全相反
  • 移位拼接逻辑未完成,不需要手写循环逐字符查找子串,Python字符串内置的find()方法可以直接返回子串起始索引

实现逻辑

  1. 基础规则转换:逐字符遍历输入单词,辅音直接保留,元音字符前插入"ub",用列表逐段拼接避免索引错位问题
  2. "bub"移位处理:定位转换后字符串中"bub"的起始位置,如果存在该子串,将「从字符串开头到"bub"子串末尾」的整段内容切下,拼到剩余字符串的后面
  3. 返回最终处理结果

注意: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:54:28