Python UnboundLocalError:变量'sbang'未赋值即引用问题排查
解决UnboundLocalError并实现数组代表数值加1保留前导零的功能
错误原因分析
你遇到的UnboundLocalError是因为空数组输入时,for循环完全不会执行,sbang变量从未被赋值,但后续代码直接引用了它。除此之外,你的代码还有两处逻辑问题:
- 循环内重复赋值
sbang,完全冗余; - 前导零的判断条件
len(sbang) > 2完全不符合需求,会导致短数组的前导零丢失。
修复后的代码
def up_array(arr): # 空数组直接返回None if not arr: return None # 检查所有元素是否在0-9范围内 for num in arr: if num < 0 or num > 9: return None # 将数组转为字符串,计算加1后的数值 num_str = ''.join(map(str, arr)) new_num_str = str(int(num_str) + 1) # 补前导零,确保结果长度与原数组一致 target_length = len(arr) new_num_str_padded = new_num_str.zfill(target_length) # 转回数组返回 return [int(c) for c in new_num_str_padded]
代码说明
- 空数组处理:空数组无法代表有效数值,直接返回
None; - 合法性检查:遍历数组,只要有元素小于0或大于9,立即返回
None; - 数值加1:将数组转为字符串后转整数加1,再转回字符串;
- 保留前导零:使用
zfill(target_length)自动补前导零,确保结果数组长度和原数组一致(比如[0,1]加1后得到[0,2]);如果加1后位数增加(比如[9,9]→100),则直接返回更长的数组,符合数值进位逻辑。
测试案例验证
- 输入
[0,1]→ 返回[0,2](保留前导零) - 输入
[9,9]→ 返回[1,0,0](进位后长度增加) - 输入
[0,0,5]→ 返回[0,0,6](保留多位前导零) - 输入
[-1,2]→ 返回None(非法负数) - 输入
[10,1]→ 返回None(元素超出0-9范围) - 输入
[]→ 返回None(空数组)
内容的提问来源于stack exchange,提问作者brom
相关产品推荐
相关产品推荐

