Python实现埃氏筛法输出质数到文本文件显示None问题求助
问题原因及修复方案
- 核心问题1:
print()函数的返回值固定为None,你将print(pr1)赋值给output变量,最终写入文件的自然只有None。同时你在循环中反复覆盖output的值,就算赋值逻辑正确也只会写入最后一个素数。 - 核心问题2:埃氏筛的逻辑实现混乱,标记非素数的逻辑、
pr1的自增位置、遍历输出素数的循环位置都存在错误,筛法本身无法正确生成素数列表。 - 核心问题3:函数名拼写错误,定义时为
SieveOfEratosthenes,调用时写为SieveOfErastothenes,程序运行会直接抛出名称错误。
修复后可运行代码
def SieveOfEratosthenes(): n = int(input("Enter a Number: ")) file = open("primes.txt", "w") prime = [True for i in range(n+1)] # 修正埃氏筛实现逻辑 pr1 = 2 while pr1 * pr1 <= n: if prime[pr1]: for i in range(pr1 * pr1, n+1, pr1): prime[i] = False pr1 += 1 # 收集所有素数统一写入 output_list = [] for pr in range(2, n+1): if prime[pr]: output_list.append(str(pr)) # 素数间用换行分隔,可按需调整分隔符 file.write('\n'.join(output_list)) file.close() if __name__ == '__main__': SieveOfEratosthenes()
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

