老式手机短信字符映射代码优化:实现重复按键序列输出
老式手机短信按键重复次数映射问题解决
原代码实现了字符到老式手机按键数字的映射,但仅返回单个按键数字,无法满足字符对应按键重复次数的需求(例如输入"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()
关键修改点
- 修正语法错误:原pad字典中1对应的列表里
',''?'缺少逗号,导致代码运行报错,已补充修正。 - 统一值类型:将0对应的值从字符串
' '改为列表[' '],避免后续额外的类型判断逻辑。 - 生成重复按键数字:找到字符在对应按键列表中的索引后,用
str(key) * press_count生成对应重复次数的数字字符串,再转为整数加入结果列表。 - 优化循环效率:找到目标按键后添加
break跳出内层循环,无需遍历剩余按键。
测试输入"hello world",输出结果为:[44, 33, 555, 555, 666, 0, 9, 666, 777, 555, 3],完全符合需求。
内容的提问来源于stack exchange,提问作者iFrankenstein
相关产品推荐
相关产品推荐

