Python for循环追加列表元素无法正确输出单个结果列表的问题
问题说明
你的代码有两处基础逻辑问题:
- 打印语句位置错误:你把
print放在了循环内的条件分支里,每追加一个符合条件的元素就会打印一次当前列表。x=100时第一次追加2100打印[2100],第二次追加4200打印[2100,4200],自然会输出两行结果。 - 函数缺少返回值:Python函数如果没有写显式
return语句,执行完成后默认返回None,你把print移到函数外时拿到None,就是因为调用函数没有获取到内部构建的列表对象。
另外注意不要用list做变量名,这是Python内置列表类型的保留名称,用作变量会覆盖原生列表的构造方法,属于不规范的编码习惯。
修复代码
把打印逻辑移到循环全部执行完成之后,加上return语句返回最终构建的列表即可:
def inrange(x): result = [] for num in range(1000, 5001): if num % x == 0 and num % (x + 5) == 0: result.append(num) print(result) return result inrange(100)
运行后会直接输出你预期的[2100, 4200],如果需要在函数外部使用这个列表,用变量接收函数返回值即可,比如res = inrange(100),不会再拿到None值。
可选效率优化
实际上不需要遍历区间内的所有数字:能同时被x和x+5整除的数,一定是两者最小公倍数的倍数,可以通过最大公约数快速计算最小公倍数,直接生成目标列表,减少不必要的循环判断:
import math def inrange(x): # 计算x和x+5的最小公倍数 common_divisor = math.gcd(x, x + 5) common_multiple = x * (x + 5) // common_divisor # 找到区间内第一个符合条件的数 first = ((1000 + common_multiple - 1) // common_multiple) * common_multiple # 以最小公倍数为步长直接生成列表 result = list(range(first, 5001, common_multiple)) print(result) return result
内容的提问来源于stack exchange,提问作者Crimzon Fiasco
相关产品推荐
相关产品推荐

