Python程序if条件不生效 计算1到m中与n整除/非整除数的和差
代码问题根因
- 累加变量
sum1、sum2的初始化位置错误:你把两个变量的初始赋值放在了for循环内部,每次遍历新的数值i时,两个变量都会被重置为0,最终仅会保留最后一个i的计算结果,问题和if判断逻辑本身无关。
修复后的循环实现
n = int(input("num ")) m = int(input("limit ")) sum1 = 0 sum2 = 0 for i in range(1, m+1): if i % n == 0: sum1 += i else: sum2 += i print(f"{sum1} and {sum2}") print(abs(sum2-sum1))
封装为函数的高效实现(无需循环)
如果要满足「函数接收n、m为入参返回差值」的要求,可以直接用等差数列求和公式计算,避免遍历,在m数值很大时性能优势明显:
def get_diff(n: int, m: int) -> int: # 1到m的总和 total = m * (m + 1) // 2 # 能被n整除的数是首项为n、公差为n的等差数列,共k项 k = m // n sum_divisible = n * k * (k + 1) // 2 sum_not_divisible = total - sum_divisible return abs(sum_not_divisible - sum_divisible) # 调用示例 n = int(input("num ")) m = int(input("limit ")) print(get_diff(n, m))
内容的提问来源于stack exchange,提问作者aby jacob
相关产品推荐
相关产品推荐

