故障键盘手机号录入纠错需求及Python错误代码修正问询
问题描述
数据录入员使用的键盘存在故障,0和1按键不稳定、时常失灵。录入手机号时,按键失灵会用小写字母l(land首字母,非大写I)替代1,小写字母o替代0。
要求:
- 接收10位输入字符串
- 统计0、1被字母替代的次数:
- 无替代时输出无错误
- 有替代时输出错误数量及修正后的正确手机号
测试用例
测试用例1
输入:987o35l7o4
输出:
3处错误 9870351704
测试用例2
输入:9874618291
输出:无错误
错误代码分析与修正
原代码存在多处语法与逻辑问题,以下是问题说明及修正后的代码:
原错误代码
n1 = input() n1 = n1.lower mistake = 0 if len(n1) == 10: for a in range(0,len(n1)): if a == "o" or a == "i": mistake += 1 print(mistake,"mistakes") elif a == 0 or a ==1: print("No mistakes") else: print("The input value must be a 10 digit")
错误点说明
- 语法错误:
n1 = n1.lower未调用字符串的lower()方法,正确写法为n1 = n1.lower() - 循环逻辑错误:
for a in range(0,len(n1))遍历的是索引而非字符,应直接遍历字符串每个字符 - 判断条件错误:把替代字符写成了
"i",实际需求是"l";判断数字时用了整数0/1,但字符是字符串类型,应使用"0"/"1" - 输出时机错误:循环内每次判断都打印结果,需遍历完成后统一输出;且
elif逻辑错误,不能遇到数字就直接输出无错误,需统计完所有错误后再判断 - 缺少修正逻辑:原代码未实现将
o替换为0、l替换为1的手机号修正功能
修正后的代码
# 获取输入并转为小写,兼容大写O/L的情况 input_str = input().lower() mistake_count = 0 corrected_phone = [] # 先检查输入长度是否符合要求 if len(input_str) != 10: print("输入必须是10位字符串") else: # 遍历每个字符,完成替换与错误统计 for char in input_str: if char == 'o': corrected_phone.append('0') mistake_count += 1 elif char == 'l': corrected_phone.append('1') mistake_count += 1 else: corrected_phone.append(char) # 拼接修正后的手机号 corrected_phone_str = ''.join(corrected_phone) # 根据错误数量输出结果 if mistake_count == 0: print("无错误") else: print(f"{mistake_count}处错误") print(corrected_phone_str)
代码说明
- 先将输入转为小写,确保大写
O/L也能被正确识别处理 - 优先检查输入长度,不符合要求直接提示错误
- 遍历字符时同步完成替换与错误统计,逻辑清晰高效
- 遍历结束后统一输出结果,符合需求中的输出规则
内容的提问来源于stack exchange,提问作者KRUSHANU BHATT
相关产品推荐
相关产品推荐

