求助:修正随机数约数写入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
相关产品推荐
相关产品推荐

