问题描述
我正在尝试创建一个函数,该函数将测试数字是否为质数,然后返回True或False。我是Python的入门者,因此请使您的代码尽可能简单。这是我到目前为止尝试过的(仅返回True):
def isPrime(x):
x = int(x)
for i in range(2,x):
if(x % i == 0):
x == False
else:
x == True
return x
print(isPrime(input("Enter a prime number.")))
解决方法
您差不多做到了,只需要这样更改即可:
def isPrime(x):
x = int(x)
for i in range(2,x):
if x % i == 0:
return False
return x >= 2
print(isPrime(input("Enter a prime number.")))
编辑:如@MarkRansom所指出的,当i
变量达到x
的平方根时,可以安全地假定不再有除数:
from math import sqrt
def isPrime(x):
x = int(x)
for i in range(2,int(sqrt(x)) + 1):
...
,
我相信您程序的最简单形式是:
def isPrime(x):
if x > 1:
for i in range(2,x):
if x % i == 0:
return False
return True
return False
print(isPrime(int(input("Enter a number: "))))
但这并不像它可能的那样有效。为了做得更好,我们将2(和所有偶数)作为一种特殊情况,只允许除数覆盖从3到我们要测试的数字的平方根的奇数。我们可以避免的分裂越多,进展就越快。
即使进行了优化,最终还是使用Eratosthenes筛子将击败这种方法。
,当您键入此内容时,我相信您的意思如下:
def isPrime(x):
x = int(x)
for i in range(2,x):
if (x % i) == 0:
x = False
else:
x = True
return x
print(isPrime(input("Enter a prime number.")))
## Which runs as follows in python IDLE:
>>> def isPrime(x):
x = int(x)
for i in range(2,x):
if (x % i) == 0:
x = False
else:
x = True
return x
>>> print(isPrime(input("Enter a prime number.")))
Enter a prime number.11
True
>>> print(isPrime(input("Enter a prime number.")))
Enter a prime number.100
False
我知道刚开始时,我犯了很多打字错误。 通过重新阅读代码和大量练习,我逐渐变得更好。
这是我写你任务的方式。
def isPrime(h):
h = int(h)
test = None
for x in range(2,h):
if (h%x) == 0:
test = False
print(f"{test},the number {h} is not a prime!")
break
else:
test = True
print(f"{test}ly,the number {h} is a prime!")
## Then I'll run the call to the function in python IDLE as:
>>>
>>> isPrime(input("Enter a number.\n"))
Enter a number.
11
Truely,the number 11 is a prime!
>>>
>>> isPrime(input("Enter a number.\n"))
Enter a number.
110
False,the number 110 is not a prime!
>>>
对我来说最重要的一件事情是:
- 阅读其他代码(和文档!)
- 然后在IDLE中玩他们的代码
- 重复上述