You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python While循环练习题求助:求数字除自身外所有除数之和

求数字除自身外所有除数之和的正确解法

你的代码错误点

  • 初始化错误:total初始值设为1是错误的,应该从0开始累加,否则会默认多加一个1,导致结果异常(比如sum_divisors(36)时,循环未执行直接返回初始值1)。
  • while循环条件错误:number // divisor == 0逻辑完全错误,只有当divisor > number时整数除法结果才为0,这意味着循环几乎不会执行(仅sum_divisors(3)因巧合蒙对结果)。题目明确要求循环在divisor小于number时运行,正确条件应为divisor < number。

正确代码实现

def sum_divisors(number):
    # 初始化变量:divisor从最小正除数1开始,total初始为0用于累加
    divisor = 1
    total = 0

    # 处理非正数字的边界情况
    if number < 1:
        return 0 

    # 循环遍历所有小于number的正整数
    while divisor < number:
        if number % divisor == 0:
            total += divisor
        # 每次循环后除数递增1
        divisor += 1

    # 返回所有符合条件的除数之和
    return total


print(sum_divisors(0)) # 输出0
print(sum_divisors(3)) # 输出1
print(sum_divisors(36)) # 输出55
print(sum_divisors(102)) # 输出114

代码关键步骤解释

  1. 变量初始化:divisor从1开始(最小的正除数),total设为0(初始无任何除数累加)。
  2. 边界处理:当输入数字小于1时直接返回0,避免无效计算。
  3. 循环逻辑:while divisor < number确保只遍历到目标数字的前一个数,不会包含数字自身;每次判断当前除数是否能整除目标数字,能整除则累加到total,之后除数自增1。
  4. 结果返回:最终返回累加得到的所有符合条件的除数之和。

内容的提问来源于stack exchange,提问作者Prearea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:05:22