3或5的倍数求和能否用elif语句实现?0/负数场景报错求解
问题分析与解决
你的代码报错原因很明确:当输入的number是0或者负数时,range(number)会生成空序列,循环根本不会执行,add_list从头到尾没被赋值过,最后return时自然会报错说找不到它的值。而且你写的if num < 0分支完全没用——因为循环里的num来自range(number),如果number≤0,循环根本不会跑,这个分支永远进不去。
当然可以用elif完成需求,关键是先处理好边界情况,同时保证add_list在任何场景下都有定义。
修正后的代码(用elif实现)
def solution(number): add_list = 0 # 提前初始化,确保所有路径都能拿到变量值 if number <= 0: return add_list for num in range(number): if num % 3 == 0 or num % 5 == 0: add_list += num elif num > 0: # 不是3/5倍数的正数,无需处理 pass return add_list
更简洁的版本(逻辑一致)
如果不需要特意处理非倍数的情况,也可以简化成这样,本质逻辑不变:
def solution(number): add_list = 0 if number <= 0: return add_list for num in range(number): if num % 3 == 0 or num % 5 == 0: add_list += num return add_list
原代码的核心问题
你之前把add_list = sum(my_list)放在了elif分支里,只有找到3/5的倍数时才会赋值。但如果输入的number≤0,循环不执行,add_list就从未被定义;哪怕number是正数,若出现极端无符合条件数的场景(虽然实际中0会被判定为3的倍数,但逻辑上仍有风险),也会触发同样的错误。所以提前初始化变量,或者在循环外统一计算求和,是解决问题的关键。
内容的提问来源于stack exchange,提问作者Ryrich
相关产品推荐
相关产品推荐

