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

字符串掩码加密算法Python代码调试求助:断言不通过问题

字符串掩码加密算法代码优化问题

加密规则

  • 步骤1:将输入字符串排序,示例输入zebra,输出升序排列的aberz(注:原描述写“降序排序”但示例为升序,代码逻辑以示例为准)
  • 步骤2:按规则替换指定字符:
    • a → 0,j → 9,o → 14,z → 25
    • 示例:aberz替换后得到0ber25
  • 步骤3:在字符串开头添加前缀sym,最终输出sym0ber25

现有代码及问题

我编写的Python代码无法通过断言检查,请求优化,同时询问是否需要添加return语句:

def exercise_8(word):
    strword = list(word)
    sortedWord=''.join(sorted(strword, reverse= True))
    dict = {"a": "0", "j":"1","o":"14","z":"25"}
    num = sortedWord[::-1]
    for i in dict:
        num = num.replace(i, dict[i])
        print(f"sym{num}")

运行报错信息

sym0berz
sym0berz
sym0berz
sym0ber25
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-17-f9c4c7f1d71c> in <module>
      1 ans = exercise_8("zebra")
----> 2 assert ans=="sym0ber25"
      3 
      4 ans = exercise_8("banana")
      5 assert ans=="sym000bnn"

AssertionError: 

问题分析与优化方案

核心问题

  1. 缺少return语句:函数没有返回值,调用后ans为None,直接触发断言失败——这是最关键的问题。
  2. 替换规则错误:字典中j映射为"1",不符合需求的9,会导致相关用例出错。
  3. 循环逻辑冗余:每次替换都执行打印,导致多次输出,且没有生成最终结果返回。
  4. 变量名不规范:使用dict作为变量名,覆盖了Python内置的dict类型,易引发潜在问题。

优化后的代码

def exercise_8(word):
    # 按示例完成排序(降序后反转实现升序)
    sorted_word = ''.join(sorted(word, reverse=True))[::-1]
    # 修正替换规则,使用规范变量名
    replace_map = {"a": "0", "j": "9", "o": "14", "z": "25"}
    # 批量替换指定字符
    encrypted_str = sorted_word
    for char, target in replace_map.items():
        encrypted_str = encrypted_str.replace(char, target)
    # 添加前缀并返回最终结果
    return f"sym{encrypted_str}"

验证测试

运行以下代码可通过断言检查:

ans = exercise_8("zebra")
assert ans == "sym0ber25"

ans = exercise_8("banana")
assert ans == "sym000bnn"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:25