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

求助:修正随机数约数写入Q1.txt的Python代码

修正随机数约数写入文件的问题

你的代码只写入最后一个约数的核心原因是:文件写入操作放在了循环外部,循环结束后变量i的值等于随机数本身,因此仅将这个值写入了文件,前面找到的所有约数都没有被保存。

下面提供几种修正方案,兼顾正确性和效率:

方案1:循环内逐行写入约数

直接在找到约数的循环里写入文件,使用with语句自动管理文件资源(避免手动关闭文件的疏漏):

import random

random_number = random.randint(10, 10000)
print("Random number:", random_number)

# 以写入模式打开文件,循环内逐个写入约数
with open('Q1.txt', mode='w') as f:
    for i in range(1, random_number + 1):
        if random_number % i == 0:
            print(i)
            f.write(f"{i}\n")  # 每个约数单独占一行,提升可读性

方案2:先收集所有约数再一次性写入

先把所有约数存入列表,再批量写入文件,减少IO操作次数,效率更高:

import random

random_number = random.randint(10, 10000)
print("Random number:", random_number)

divisors = []
for i in range(1, random_number + 1):
    if random_number % i == 0:
        divisors.append(str(i))
        print(i)

# 将所有约数用换行符连接后写入文件
with open('Q1.txt', mode='w') as f:
    f.write('\n'.join(divisors))

额外优化:快速查找约数

如果随机数接近10000,暴力循环到random_number会较慢,可以通过平方根优化约数查找逻辑,同时避免平方数的重复约数:

import random
import math

random_number = random.randint(10, 10000)
print("Random number:", random_number)

divisors = set()
# 仅循环到随机数的平方根,同时收集成对的约数
for i in range(1, int(math.isqrt(random_number)) + 1):
    if random_number % i == 0:
        divisors.add(i)
        divisors.add(random_number // i)

# 转成排序后的列表,保证输出顺序和原逻辑一致
divisors = sorted(divisors)
print('\n'.join(map(str, divisors)))

with open('Q1.txt', mode='w') as f:
    f.write('\n'.join(map(str, divisors)))

内容的提问来源于stack exchange,提问作者yarpa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:13:25