字符串掩码加密算法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:
问题分析与优化方案
核心问题
- 缺少return语句:函数没有返回值,调用后
ans为None,直接触发断言失败——这是最关键的问题。 - 替换规则错误:字典中
j映射为"1",不符合需求的9,会导致相关用例出错。 - 循环逻辑冗余:每次替换都执行打印,导致多次输出,且没有生成最终结果返回。
- 变量名不规范:使用
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
相关产品推荐
相关产品推荐

