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

Python编码解码程序优化:解码时保留末尾为ub的字符

搞定解码时末尾"ub"误删的问题

嘿,我来帮你解决这个解码逻辑的小bug!咱们先理清楚核心需求:编码时给元音前加"ub",解码时要删掉这些编码出来的"ub",但句子末尾原本就有的"ub"(比如"club"的最后两位)必须保留。

先看看现有解码代码的问题:它会把所有"ub"都跳过,不管是不是编码时添加的,这就导致像"club"这类词解码后变成了"cl"。下面是修正后的完整代码,我会一步步给你讲改动点:

from pcinput import getString 

while True: 
    zin = getString("Give a sentence") 
    cd = getString("Coding or decoding (c/d)") 
    cd = cd.lower() 
    klinkers = ("eaiou") 
    nieuwe_zin = ""
    zin = zin.lower()
    
    if cd == "c":
        # 编码逻辑保持不变,改成直接遍历字符更简洁
        for char in zin:
            if char in klinkers:
                nieuwe_zin += "ub" + char 
            else:
                nieuwe_zin += char
        print(nieuwe_zin)
        break
        
    elif cd == "d":
        i = 0
        zin_length = len(zin)
        # 只遍历到倒数第三个字符,留最后两位单独处理
        while i < zin_length - 2:
            # 只有当"ub"后面跟着元音时,才跳过这两个字符(这是编码时额外加的)
            if zin[i:i+2] == "ub" and zin[i+2] in klinkers:
                i += 2
            nieuwe_zin += zin[i]
            i += 1
        
        # 处理最后两个字符:不管是不是"ub",直接保留
        if zin_length >= 2:
            nieuwe_zin += zin[-2:]
        elif zin_length == 1:
            nieuwe_zin += zin[-1]
            
        print(nieuwe_zin)    
        break
        
    else:
        print("Please enter C or D")

关键改动说明:

  • 编码逻辑优化:把原来通过索引遍历的方式改成直接遍历字符,代码更简洁易读,功能完全不变。
  • 解码逻辑拆分:
    1. 遍历范围限制在倒数第三个字符之前,这样不会提前碰最后两位。只有确认ub后面跟着元音时,才跳过这两个字符——这才是编码时为元音添加的ub。
    2. 单独处理最后两位:不管这两位是不是ub,都直接追加到结果里,像"club"这类词的末尾ub就会被保留。
  • 边界情况处理:考虑了句子长度小于2的情况(比如只有1个字符),避免出现索引错误。

测试示例:

  • 编码"club":因为"u"是元音,编码后变成clubub
  • 解码"clubub":会跳过中间编码生成的ub,保留末尾的ub,最终得到club
  • 解码"club":直接保留所有字符,结果还是club

这样就完美解决了末尾ub被误删的问题啦!

内容的提问来源于stack exchange,提问作者Luke Coopman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:30:43