知道一個數字是不是質數的方法是: 如果 n 不是質數,那麼 n 一定有一個小於等於 n 的因數。 所以我們可以用下面的程式判斷輸入的 n 是否為質數: 接著回到原題:
這代表我們要做四件事:
前兩件事很簡單: n = int(input('Input a number: ')) # 得到輸入值 n。 for i in range(2, n + 1): # 產生 2 到 n 的數字。 pass # TODO: 做 3. 和 4. 第三件事其實就是我們前面的那個函式。所以我們直接用它: n = int(input('Input a number: ')) # 得到輸入值 n。 for i in range(2, n + 1): # 產生 2 到 n 的數字。 i_is_prime = is_prime(i) # 判斷 i 是否為質數。 第四件事情要用一個 if 來做: n = int(input('Input a number: ')) # 得到輸入值 n。 for i in range(2, n + 1): # 產生 2 到 n 的數字。 i_is_prime = is_prime(i) # 判斷 i 是否為質數。 if i_is_prime: # 如果是,印出來。 print(i) 這樣就完成了。 完整的程式: def is_prime(n): for i in range(2, n): if n % i == 0: # 整除,i 是 n 的因數,所以 n 不是質數。 return False return True # 都沒有人能整除,所以 n 是質數。 n = int(input('Input a number: ')) # 得到輸入值 n。 for i in range(2, n + 1): # 產生 2 到 n 的數字。 i_is_prime = is_prime(i) # 判斷 i 是否為質數。 if i_is_prime: # 如果是,印出來。 print(i) 循環結構如果我們需要在程式中重複執行一個動作,就可以使用循環結構。其中分為兩種,一種是for-in循環,另一種是while循環,另外也會提到break與continue。 for-in循環當我們需要把某個變數放到某個範圍中重複做運算時,就可以用for循環,寫法如下: ''' 程式在執行的時候會把範圍中的元素依序代到x,然後去跑底下的程式,直到範圍內的元素被用完,程式就會停止。舉例來說: sum=0 一開始設定sum為0,把range中的數字0~10,依序代入x,然後去跑底下的程式,印出x,然後sum加1,迴圈結束後,印出sum,因為從0~10總共跑了11次,所以會印出11。 While循環如果一開始不知道要循環多少次的話,就可以用While循環,設定一個條件,當符合條件時,就會不停重複執行程式,寫法如下: ''' while後面接的可以是布林值,或是直接寫出邏輯運算,若True則執行循環,若False則循環結束,例如: sum=0 當sum小於10,就會跑一次裡面的程式,x乘上2並且sum加1,sum會從0開始加到9,總共10次,所以x也會乘2總共10次,最後會得到x等於2048,sum等於10。 break與continue如果在循環中使用break關鍵字,循環會被中斷,而若使用continue則會跳過這次循環不執行,所以我們可以設定條件,如果符合某些條件,循環會被跳過或是中斷,這樣循環就可以更加靈活,舉個例子: import randomanswer = random.randint(1, 100) 上面的猜數字例子用random模組中取1~100之間的隨機一個數作為答案,然後用while True直接開啟循環,每猜一次counter就會加1,然後用if判斷大小,如果猜對了就用break中斷循環,最後印出總共猜了多少次,如果大於7次的話就印出「太遜了」。 不過我自己也有另外寫了一個土法煉鋼的猜數字來玩: sum=0 不過這樣的話可能要一個人出題目另一個人猜,所以說比較土法煉鋼的猜數字。 練習範例範例一 輸入正整數判斷是否為質數from math import sqrtnum = int(input('請輸入正整數: ')) 另外一個有趣的找質數例子:輸入一數字 n,印出 2 到 n 之間的質數。''' 範例二 列印三角形圖案''' |