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

Python实现字符串除末尾4位替换为#报IndexError如何解决

错误原因
  • 核心触发点是代码中使用了固定长度的全局字符串c做索引取值:全局定义的c = "3656013700"长度固定为10,当maskify函数的入参cc长度超过10时,循环到i>=10时访问c[i]就会超出c的索引范围,抛出越界错误。
  • 额外的逻辑错误:
    • 全局变量a是根据初始化时的cc(长度10)计算得到的固定值5,当函数入参cc长度变化时,这个判断阈值完全不匹配。
    • 用while做长度<=4的判断属于逻辑误用,仅需要单次条件判断,不需要循环逻辑。
    • 函数内部取值应该用入参cc,而非全局定义的c,二者内容可能完全不一致。
修复方案

优化后的可运行代码

def maskify(cc):
    # 长度小于等于4直接返回原字符串
    if len(cc) <= 4:
        return cc
    # 前半段替换为#,保留最后4位
    return '#' * (len(cc) - 4) + cc[-4:]

# 测试用例
print(maskify("3656013700")) # 输出:######3700
print(maskify("1234")) # 输出:1234
print(maskify("123456789")) # 输出:#####6789

改动说明

  • 移除了所有冗余的全局变量,所有逻辑在函数内部完成,避免全局值污染导致的逻辑错误。
  • 替换错误的while循环为if条件判断,符合业务需求。
  • 简化了替换逻辑,不需要逐位遍历赋值,直接通过字符串切片和乘法即可完成需求,性能和可读性都更高。
  • 完全基于入参cc做计算,不再依赖全局固定值,适配任意长度的输入字符串。

内容的提问来源于stack exchange,提问作者Juan Felipe Gama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:09:00