Python创建除数对应区间倍数字典的代码错误排查求助
代码问题列表
- 变量命名不规范,使用了
list、dict这两个Python内置类型名作为自定义变量名,会覆盖内置方法引发潜在问题。 - 所有除数共享同一个结果列表:在循环外初始化了全局的空列表,遍历所有除数时都往同一个列表里追加数据,且字典中存储的是该列表的引用,导致所有除数对应的列表值都是同一个、内容混杂了所有符合条件的数字。
- 字典键不符合要求:遍历除数时用索引
i作为字典键,而非要求的除数本身。 - 内层循环逻辑错误:每遇到一个无法被当前除数整除的数字,就直接把字典对应的键值设为空列表,会覆盖之前已经存入的符合条件的数字。
修正后的代码
def create_divisors_dict(divisors, lower, upper): res_dict = {} # 直接遍历每个除数,不需要用索引 for divisor in divisors: # 每个除数单独初始化一个空列表存储匹配结果 match_list = [] for num in range(lower, upper + 1): if num % divisor == 0: match_list.append(num) # 遍历完当前除数的所有区间数字后,再存入字典 res_dict[divisor] = match_list return res_dict print(create_divisors_dict([1, 2, 5], 2, 4))
运行后输出结果和预期完全一致:
{1: [2, 3, 4], 2: [2, 4], 5: []}
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

