我知道,關於素數已經有很多問題了,但我並沒有要求提供代碼。我只是想知道,什麼是錯的我的(我希望意見將幫助你理解,我在做什麼):使用python進行素數計算
from math import ceil
def isPrimeNumber (n, out='short'): #Checks, whether n is a prime number
answer = 'Yes'
for p in range(2, int(ceil(n**0.5))+1): #Checks all numbers lower than
#SQRT(n), if they are divisors of n
if n%p == 0: #If p is a divisor, n isn't prime
answer = 'No'
if out == 'verbose':
print 'Least divisor is', p
return False
break
if answer == 'Yes': #If there isn't a p, that is a divisor, n is prime
if out == 'verbose':
print 'No divisors except for 1 and', str(n)+'!'
return True
def primeNumbers (start = 1, stop = 1000, numbers = 0):
N = stop
if numbers == 0: #Calculates all prime numbers in N numbers in a row
#(N=1000 -> calculates all prime numbers in 1000 numbers,
#by default from 1 to 997)
primes = []
for i in range(start, N+1):
if isPrimeNumber(i) == True:
primes.append(i)
elif numbers == 1: #Calculates N prime numbers in a row
#(N=1000 -> calculates 1000 prime numbers)
primes = [start]
i = len(primes)
j = 1
while i <= N: #Stops, when we get N prime numbers - doesn't work!
n = max(primes) + 1
while j != 'stop':
if isPrimeNumber(n, out='short') == True:
primes.append(n)
i = i + 1
j = 'stop' #Stops nested cycle, when reached
#the first prime number
else:
n = n + 1
else:
print 'Wrong input! 3rd number in function call must be either 0 or 1'
return primes
功能isPrimeNumber()工作正常。當數字= 0時,函數primeNumbers也可以正常工作。但是,如果數量= 1,那麼,因爲它似乎,週期永不停歇的一個,我不能understan爲什麼...
作爲開始,您應該遵循PEP 8編寫更多可讀代碼。 – rubik
另外,不要使用「Yes」或「No」這樣的字符串,但更喜歡布爾值('True'和'False')。 – rubik
我想跟着它,但我剛剛開始編程,首先我想學習編寫工作代碼。但是謝謝你! 嗯,不知道,爲什麼我沒有在那裏使用布爾值,因爲我在同一個程序的不同地方使用它們......謝謝! – Phlya