如何在Python中关联质数检测器与自定义数组并分类质数与非质数
解决方案
1. 关联数组遍历与质数检测
你已经完成了数组生成和质数检测的核心代码,只需要遍历生成的整数数组,对每个元素调用质数检测函数,再根据结果分类存入两个数组即可。这里可以把isprime函数的返回值改成布尔值,让逻辑判断更简洁(也可以保留原字符串返回,对应调整判断逻辑)。
完整实现代码
# 定义目标范围 r1, r2 = 2, 100 # 生成范围内整数数组的函数 def createList(r1, r2): return list(range(r1, r2 + 1)) # 质数检测函数,返回布尔值便于逻辑判断 def isprime(n): if n == 2 or n == 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 w = 2 while i * i <= n: if n % i == 0: return False i += w w = 6 - w return True # 生成目标数组 createdList = createList(r1, r2) # 初始化分类数组 prime_numbers = [] non_prime_numbers = [] # 遍历数组完成分类 for num in createdList: if isprime(num): prime_numbers.append(num) else: non_prime_numbers.append(num) # 输出测试结果 print("质数数组:", prime_numbers) print("非质数数组:", non_prime_numbers)
如果要保留原isprime返回字符串的写法,遍历部分修改为:
for num in createdList: check_result = isprime(num) if check_result == "Prime": prime_numbers.append(num) else: non_prime_numbers.append(num)
2. 构建本地质数/非质数数据库
可以用Python内置的sqlite3模块搭建本地数据库,无需额外安装依赖,实现数据的持久化存储与复用:
数据库操作代码示例
import sqlite3 # 连接数据库(文件不存在则自动创建) conn = sqlite3.connect('prime_db.db') cursor = conn.cursor() # 创建存储表:记录数字和质数标识 cursor.execute(''' CREATE TABLE IF NOT EXISTS number_classification ( id INTEGER PRIMARY KEY AUTOINCREMENT, number INTEGER UNIQUE NOT NULL, is_prime BOOLEAN NOT NULL ) ''') # 将分类数据插入数据库(忽略已存在的数字) for num in prime_numbers: cursor.execute('INSERT OR IGNORE INTO number_classification (number, is_prime) VALUES (?, ?)', (num, True)) for num in non_prime_numbers: cursor.execute('INSERT OR IGNORE INTO number_classification (number, is_prime) VALUES (?, ?)', (num, False)) # 提交更改并关闭连接 conn.commit() conn.close() # 测试数据库查询 def query_numbers(is_prime): conn = sqlite3.connect('prime_db.db') cursor = conn.cursor() cursor.execute('SELECT number FROM number_classification WHERE is_prime = ?', (is_prime,)) result = cursor.fetchall() conn.close() return [item[0] for item in result] # 输出查询结果 print("数据库中的质数:", query_numbers(True)) print("数据库中的非质数:", query_numbers(False))
运行后会在本地生成prime_db.db文件,后续可以直接查询该文件获取已分类的数据,无需重复计算。
内容的提问来源于stack exchange,提问作者Will Bass
相关产品推荐
相关产品推荐

