You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

存在的问题

  1. 输入读取完全错误:代码仅读取了第一个整数n,完全没有读取后续需要处理的n个数字,所有逻辑都围绕n展开,完全偏离任务要求。
  2. 约数计算逻辑冗余且范围不合理:就算处理单个数字,当前遍历范围是range(2, n+1),但判断条件n % i == 0 and n / i !=1是找真约数(排除1和自身),写法冗余;同时遍历到n的话,n%n==0且n/n=1,这个值会被过滤,范围直接改成range(2, num)更高效。
  3. 字典使用逻辑错误:代码仅将第一个输入的n作为字典的唯一键,而任务要求是每个输入的数字作为键,对应自身的约数列表。
  4. 未按数字升序输出:原代码直接遍历字典项,无法保证输出顺序符合要求。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:25:42