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
代码关键步骤解释
- 变量初始化:
divisor从1开始(最小的正除数),total设为0(初始无任何除数累加)。 - 边界处理:当输入数字小于1时直接返回0,避免无效计算。
- 循环逻辑:
while divisor < number确保只遍历到目标数字的前一个数,不会包含数字自身;每次判断当前除数是否能整除目标数字,能整除则累加到total,之后除数自增1。 - 结果返回:最终返回累加得到的所有符合条件的除数之和。
内容的提问来源于stack exchange,提问作者Prearea
相关产品推荐
相关产品推荐

