Python字典存储多数字约数代码输出为空,求问题排查与解决
代码问题分析与修正
任务要求
编写程序,先读取整数N,再读取N个整数。程序需使用值为列表的字典存储所有数字的约数,按数字升序输出每个数字的约数列表;无约数的数字不存入字典。
你的代码
from collections import defaultdict n = int(input()) ls = [] for i in range(2, n+1): if n % i == 0 and n / i != 1: ls.append(i) a = defaultdict(list) for divisor in ls: a[n].append(divisor) for key,value in a.items(): print(key, ':', value)
存在的问题
- 输入读取完全错误:代码仅读取了第一个整数
n,完全没有读取后续需要处理的n个数字,所有逻辑都围绕n展开,完全偏离任务要求。 - 约数计算逻辑冗余且范围不合理:就算处理单个数字,当前遍历范围是
range(2, n+1),但判断条件n % i == 0 and n / i !=1是找真约数(排除1和自身),写法冗余;同时遍历到n的话,n%n==0且n/n=1,这个值会被过滤,范围直接改成range(2, num)更高效。 - 字典使用逻辑错误:代码仅将第一个输入的
n作为字典的唯一键,而任务要求是每个输入的数字作为键,对应自身的约数列表。 - 未按数字升序输出:原代码直接遍历字典项,无法保证输出顺序符合要求。
修正后的代码
from collections import defaultdict # 读取需要处理的数字个数 total = int(input()) divisor_dict = defaultdict(list) for _ in range(total): current_num = int(input()) divisors = [] # 遍历寻找当前数字的真约数(排除1和自身) for i in range(2, current_num): if current_num % i == 0: divisors.append(i) # 仅当有真约数时存入字典 if divisors: divisor_dict[current_num] = divisors # 按键的升序排序后输出结果 for num in sorted(divisor_dict.keys()): print(f"{num}: {divisor_dict[num]}")
测试验证
输入示例:
3 12 6 13
输出结果:
6: [2, 3] 12: [2, 3, 4, 6]
完全符合任务要求。
内容的提问来源于stack exchange,提问作者ChioStar
相关产品推荐
相关产品推荐

