Python新手求助:如何实现返回布尔值的质数判断函数?
判断质数的简单Python实现(新手友好版)
嘿,作为纯新手能自己动手写函数尝试解决问题,真的超棒!咱们先聊聊你代码里的几个小问题,再给你两个简单的正确实现——一个最基础好懂的,一个稍微优化过的~
你的代码里的小问题
- 你在循环里用了
x == False/x == True,这是比较操作,不是赋值或者返回结果,而且你把原本要判断的数字x改成了布尔值,会打乱后续的循环逻辑 return x放在循环外面,但循环里已经把x改成了True/False,这不是正确的返回方式——应该在发现能整除的数时直接return False,循环结束后再return True- 没处理边界情况:比如小于2的数(0、1、负数)都不是质数,这些情况要先单独判断
版本1:最基础好懂的实现(适合新手理解)
这个版本逻辑直白,完全贴合质数的定义——大于1的自然数,除了1和自身外没有其他因数:
def isPrime(x): # 先把输入转成整数(处理用户输入的字符串) x = int(x) # 小于等于1的数都不是质数 if x <= 1: return False # 从2开始,到x-1逐个检查能不能整除x for i in range(2, x): # 如果找到能整除的数,说明不是质数,直接返回False if x % i == 0: return False # 循环跑完都没找到能整除的数,说明是质数,返回True return True # 调用函数并打印结果 print(isPrime(input("Enter a number to check if it's prime: ")))
这个版本的逻辑解释:
- 先把用户输入的字符串转成整数,避免类型错误
- 先排除所有小于等于1的数,因为它们不符合质数的定义
- 循环从2开始到x-1,逐个检查是否能整除x:只要找到一个能整除的,立刻返回False(不用继续循环了,节省时间)
- 如果循环结束都没找到能整除的数,就说明这个数是质数,返回True
版本2:稍微优化的实现(更快)
如果要判断的数很大,版本1的循环会跑很久,我们可以做两个小优化:
- 除了2之外,所有偶数都不是质数,先直接排除
- 只需要检查到x的平方根就够了(因为如果x有一个大于平方根的因数,那对应的另一个因数肯定小于平方根,我们已经检查过了)
def isPrime(x): x = int(x) if x <= 1: return False # 2是唯一的偶质数 if x == 2: return True # 偶数(除了2)直接返回False if x % 2 == 0: return False # 只检查奇数,从3到x的平方根,步长为2 for i in range(3, int(x**0.5) + 1, 2): if x % i == 0: return False return True print(isPrime(input("Enter a number to check if it's prime: ")))
这个版本比基础版快很多,尤其是判断大数的时候,但逻辑和基础版是一致的,新手可以先掌握基础版,再慢慢理解优化点~
内容的提问来源于stack exchange,提问作者Olivia Scruton
相关产品推荐
相关产品推荐

