2011-04-06 111 views
0

請注意,這不是我的家庭作業!我只是想在同一時間理解Python(和數學,可悲)。我知道這個程序的最終目標是獲得1到20範圍內的素數列表,但是,一旦它達到「for x in range ...」行,我就會迷失方向,而教程不會沒有詳細解釋它。Python - 素數練習

可否請你用簡單的英語一步一步解釋該行for x in range (2,n),是什麼nfor x in range (2,n)

二)明確具體

一)什麼是X?底部是否是「n」?

c)n, x, n // x是什麼意思。請澄清//

感謝如果你能幫助

def isprime(n): 
    if n == 1: 
     print("1 is special") 
     return False 
    for x in range(2, n): 
     if n % x == 0: 
      print("{} equals {} x {}".format(n, x, n // x)) 
      return False 
    else: 
     print(n, "is a prime number") 
     return True 

for n in range(1, 20): 
    isprime(n) 
+4

值得指出的是,這是一個非常低效的算法。更好地將範圍行更改爲'範圍內的x(3,int(math.sqrt(n))+ 1,2)'。您需要'導入數學'並在2上添加另一個特例。這大大減少了必須完成的檢查次數。檢查過去的sqrt + 1是沒有意義的,因爲在那裏你只能找到逆矩陣(例如5×2而不是2×5)。特殊外殼2將檢查次數減半。例如檢查611953,減少檢查數量780倍。 – 2011-04-06 13:20:49

回答

7

一)

for x in range (2,n) 

是同樣喜歡

for (x = 2; x < n; x++) 
在其他一些語言

:一個循環,x被包括2和n-1之間的整數值。

B)

for x in range (2,n): 

n來自第一def isprime(n),是什麼這個功能以後調用。在這種情況下,從底部始終是相同的n

C)

print("{} equals {} x {}".format(n, x, n // x)) 

此寫入以下文本:A equals B x C其中AnBxCn/x四捨五入到最接近的較小整數。它是所謂的整數除法(如9 // 2 = 4

0

一個)X取值爲從2n-1(因爲range不包括上限)

b)否,它是相同的n如在方法定義(即方法參數)

C)整數除法

3

一)在提示符下試試這個:

help(range) 

它會告訴你該範圍(A,B)返回一個列表atarting作爲,結束在b-1,所以

range(2,10) 

[2, 3, 4, 5, 6, 7, 8, 9] 

在提示符處播放,輸入range(2,2)range(2,-1),range(2,3)並查看顯示結果。你會看到n == 1並不是唯一的特例。

現在,像for x in y這樣的東西遍歷y的元素,在你的情況下,它是一個列表。你還可以在提示進行驗證:

for x in range(2,10) : 
    print x 

b)中開始def isprime(n)塊是一個函數,用參數n。你可以把它叫做任何n:isprime(100)。在代碼的底部,您正在迭代range(1,20)(如果有疑問,請將其輸入到提示符中)並針對每個值(即1,2,3,4,...,19)調用isprime。

請注意,在此示例中,不需要創建並返回列表range,您可以使用xrange,這是一個生成器。在提示符中輸入help(xrange)...

+0

謝謝,我對Python很陌生。你能解釋提示是什麼以及如何使用它? – Leahcim 2011-04-06 13:30:50

+0

@Michael認真嗎?只需輸入'python'。 – 2011-04-06 13:44:12

+0

@Michael在Linux,Unix,MacOSX上你只需鍵入python。不知道你在Windows上做什麼,但我懷疑谷歌會知道。現在,除了編碼方面的事情之外,您可能需要考慮針對此問題的更高效的算法,例如,請參閱http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – juanchopanza 2011-04-06 13:51:00