2017-07-18 59 views
-1

我試過使用該代碼這個問題的工作:找到第1000黃金(蟒蛇)

def nthprime(n): 

    cnt=1 
    count=0 
    while(cnt==n): 
     for i in range(3,): 
      for j in range(2, i): 
       if i % j != 0: 
        count = count + 1 
      if count == (i - 2): 
        cnt = cnt + 1 
      return I 

print(nthprime(1000)) 

誰能告訴我什麼是錯我的代碼?它只會一直返回「無」。

+0

什麼是'I'在'回報我'?它已經初始化了嗎? – arif

+0

你正在通過我假設「xth」素數。但是,除非n = 1,否則while循環將始終失敗。 – gutelfuldead

+0

由於函數永遠不會進入最外層循環('while'),它將返回'None'。根據傳遞給函數的參數,進入該循環的條件是'cnt == n',但'cnt'被初始化爲'0','n'爲'1000'。所以條件永遠不會滿足,函數返回'None'。更好的算法是[Eratosthenes的篩選](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) – arif

回答

2

您的代碼會更容易理解,如果你在兩個功能

def is_prime(i): 
    if i == 2: return True # 2 is a prime number 
    for j in range(2,i): # you could stop sooner (optimize) 
    if i % j == 0: return False 
    return True 

def nthprime(n): 
    i = 1 
    count = 0 
    while count < n: 
    i += 1 
    if is_prime(i): count += 1 
    return i 

for n in (1,2,3,4,5,6,7,8,9,10,100,1000): 
    print(n, nthprime(n)) 

當我運行它,我得到它分割(在python2,加from __future__ import print_function

1 2 
2 3 
3 5 
4 7 
5 11 
6 13 
7 17 
8 19 
9 23 
10 29 
100 541 
1000 7919  
0

你的代碼有幾個問題,正如arif指出的,我沒有初始化,while循環將永遠不會運行,因爲cnt == n不會有效等等。而不是完美的代碼,我已經略微如何做你想做的修改例如:

def nth_prime_number(n): 
    prime_list = [2] 
    num = 3 
    while len(prime_list) < n: 
     for p in prime_list: 
      if num % p == 0: 
       break 
     else: 
      prime_list.append(num) 
     num += 2 
    return prime_list[-1] 

print(nth_prime_number(1000)) 

你可以看看下面這個例子和自己的代碼來了解你在哪裏錯之間的差異。