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

老式手机短信字符映射代码优化:实现重复按键序列输出

老式手机短信按键重复次数映射问题解决

原代码实现了字符到老式手机按键数字的映射,但仅返回单个按键数字,无法满足字符对应按键重复次数的需求(例如输入"hello world"需返回[44,33,555,555,666,0,9,666,777,555,3])。以下是修改后的代码及说明:

修改后的代码

def search(n):
    lis = []
    # 修正原字典的语法错误,补充缺失的逗号
    pad = {
        1: ['.', ',', '?', '!', ':'],
        2: ['A', 'B', 'C'],
        3: ['D', 'E', 'F'],
        4: ['G', 'H', 'I'],
        5: ['J', 'K', 'L'],
        6: ['M', 'N', 'O'],
        7: ['P', 'Q', 'R', 'S'],
        8: ['T', 'U', 'V'],
        9: ['W', 'X', 'Y', 'Z'],
        0: [' ']  # 统一为列表格式,避免类型判断
    }
    for char in n:
        upper_char = char.upper()
        for key, values in pad.items():
            if upper_char in values:
                # 获取字符在按键列表中的位置,索引+1即为重复次数
                press_count = values.index(upper_char) + 1
                # 生成重复对应次数的数字,转为整数后加入结果
                lis.append(int(str(key) * press_count))
                break  # 找到对应按键后跳出循环,提升效率
    return lis


def main():
    m = input("Enter String: ")
    print(search(m))

main()

关键修改点

  1. 修正语法错误:原pad字典中1对应的列表里',''?'缺少逗号,导致代码运行报错,已补充修正。
  2. 统一值类型:将0对应的值从字符串' '改为列表[' '],避免后续额外的类型判断逻辑。
  3. 生成重复按键数字:找到字符在对应按键列表中的索引后,用str(key) * press_count生成对应重复次数的数字字符串,再转为整数加入结果列表。
  4. 优化循环效率:找到目标按键后添加break跳出内层循环,无需遍历剩余按键。

测试输入"hello world",输出结果为:[44, 33, 555, 555, 666, 0, 9, 666, 777, 555, 3],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:50:22