输入以0开头的6位数字触发IndexError,求幸运数字判断代码修复
修复以0开头的6位数字输入的IndexError问题
错误信息:
IndexError: string index out of range even though the point exists in the given string
程序需求:接收6位数字输入,若前三位数字之和与后三位数字之和相等,判定为幸运数字。
现有代码对非0开头的6位数字正常运行,但处理以0开头的6位数字时触发上述错误。
原代码:
a = int(input()) n = str(a) m = (n[0]), (n[1]), (n[2]) s = (n[3]), (n[4]), (n[5]) if str(sum(int(x) for x in m)) == str(sum(int(x) for x in s)): print('Lucky') else: print('Regular')
错误原因
当输入以0开头的6位数字(如012345),执行int(input())会自动去掉前导0,得到12345,转成字符串后长度仅为5,此时访问n[5]会超出字符串索引范围,触发IndexError。
修复方案
直接读取输入的原始字符串,不转换为整数,保留前导0;可选增加输入合法性校验,确保输入是6位数字。
修改后的代码:
n = input().strip() # 可选:校验输入是否为6位数字 if len(n) != 6 or not n.isdigit(): print('请输入6位数字') else: sum_first = int(n[0]) + int(n[1]) + int(n[2]) sum_last = int(n[3]) + int(n[4]) + int(n[5]) print('Lucky' if sum_first == sum_last else 'Regular')
代码说明
- 用
input().strip()获取原始输入字符串,完整保留前导0,保证字符串长度符合要求。 - 新增的校验逻辑可避免用户输入非6位或非数字的情况,提升程序健壮性。
- 直接计算前后三位数字的和,写法更简洁,避免不必要的类型转换。
内容的提问来源于stack exchange,提问作者closedcntr
相关产品推荐
相关产品推荐

