【Python實作】判斷使用者輸入的數字是否為質數?

這篇用 Python 練習判斷一個數字是否為質數。過程中會用到 try/exceptif/elsefor 迴圈、取餘數,以及一個常見的小技巧:只檢查到根號 n。

📘 Python 自學|判斷是否是質數

練習目的

這次的練習目標是熟悉 Python 的流程控制與迴圈判斷。

  • 練習 for 迴圈。
  • 練習 if/else 判斷。
  • 練習 try/except 處理輸入錯誤。
  • 練習用 % 判斷是否能整除。

題目

讓使用者輸入一個正整數,並判斷這個數字是否為質數。

質數的定義:
大於 1,且只能被 1 和自己整除的正整數。

🧪 完整程式碼

下面是完整的 Python 程式碼。

# 程式開始 try: n = int(input("請輸入一個整數:")) except ValueError: print("請輸入正確的數字") exit() if n <= 1: print("不是質數") else: is_prime = True for x in range(2, int(n**0.5) + 1): if n % x == 0: is_prime = False break print("是質數" if is_prime else "不是質數") # 程式結束

🔎 程式說明

接著把程式拆成幾段來看,會比較容易理解整個判斷流程。

1. 使用 try/except 確認輸入是否正確

try: n = int(input("請輸入一個整數:")) except ValueError: print("請輸入正確的數字") exit()

這一段的目的是確認使用者輸入的是可以轉成整數的內容。

  • input() 會取得使用者輸入的文字。
  • int() 會嘗試把輸入內容轉成整數。
  • 如果使用者輸入的是文字,例如 abc,就會發生 ValueError
  • 發生錯誤時,程式會印出 請輸入正確的數字,然後用 exit() 結束程式。
小提醒:這裡的寫法是 except,不是 execpt。Python 關鍵字拼錯,程式就會直接報錯。

2. 先排除小於等於 1 的數字

if n <= 1: print("不是質數") else: is_prime = True

質數必須是大於 1 的正整數,所以:

  • 1 不是質數。
  • 0 不是質數。
  • 負數也不是質數。

因此,如果 n <= 1,就可以直接印出 不是質數

如果數字大於 1,就先假設它是質數,設定:

is_prime = True
is_prime 是一個布林變數。
一開始先假設它是 True,如果之後找到可以整除的數,再把它改成 False

3. 用 for 迴圈檢查是否能被整除

for x in range(2, int(n**0.5) + 1): if n % x == 0: is_prime = False break

這一段是整個程式的核心。

它會從 2 開始檢查,一路檢查到 根號 n 左右。

為什麼只檢查到根號 n?

如果一個數字 n 可以被分解成兩個因數:

n = a × b

那麼 ab 不可能都大於根號 n。

換句話說,如果在 2根號 n 之間都找不到可以整除的數,那後面也不需要再檢查了。

這是一個常見的效率優化。
不需要從 2 一路檢查到 n - 1,只要檢查到 根號 n 就可以省下很多時間。

range(2, int(n**0.5) + 1) 是什麼意思?

range(2, int(n**0.5) + 1)
  • 2:從 2 開始檢查,因為 2 是最小的質數。
  • n**0.5:計算 n 的平方根。
  • int(n**0.5):把平方根轉成整數。
  • + 1:因為 Python 的 range() 不包含結束值,所以要加 1。

例如 n = 9,根號 9 是 3。 如果沒有加 1,range(2, 3) 只會檢查 2,不會檢查 3。

但 9 可以被 3 整除,所以要寫成:

range(2, int(n**0.5) + 1)

4. 如果找到可以整除的數,就不是質數

if n % x == 0: is_prime = False break

n % x 是取餘數。

如果 n % x == 0,代表 n 可以被 x 整除。

只要找到一個除了 1 和自己以外還能整除的數,就表示這個數字不是質數。

  • 找到可整除的數:把 is_prime 改成 False
  • 使用 break 離開迴圈,因為已經確定不是質數了。
Python 的布林值要寫成 TrueFalse,第一個字母要大寫。
寫成 truefalse 會出錯。

5. 最後輸出結果

print("是質數" if is_prime else "不是質數")

這一行使用了 Python 的一行 if/else 寫法。

意思是:

  • 如果 is_primeTrue,就印出 是質數
  • 否則就印出 不是質數

🧭 執行流程整理

用一張表整理整個判斷流程,會更清楚。

步驟 程式做什麼 目的
1 讀取使用者輸入 取得要判斷的數字。
2 用 try/except 檢查輸入 避免輸入文字造成程式錯誤。
3 判斷 n 是否小於等於 1 先排除一定不是質數的情況。
4 從 2 檢查到根號 n 確認是否有其他因數。
5 找到因數就 break 已確定不是質數,提早結束迴圈。
6 輸出判斷結果 顯示「是質數」或「不是質數」。

🔢 測試範例

可以用幾個數字測試看看結果是否正確。

輸入 判斷 原因
1 不是質數 質數必須大於 1。
2 是質數 2 是最小的質數。
3 是質數 只能被 1 和 3 整除。
4 不是質數 可以被 2 整除。
9 不是質數 可以被 3 整除。
17 是質數 沒有其他整數可以整除。

✅ 小結

這個質數判斷範例雖然不長,但一次練到了很多 Python 基礎觀念。

  • try/except:處理使用者輸入錯誤。
  • if/else:判斷不同情況。
  • for 迴圈:依序檢查可能的因數。
  • % 取餘數:判斷是否能整除。
  • break:找到答案後提早離開迴圈。
  • n**0.5:用平方根減少不必要的檢查次數。
簡單記法:
判斷質數時,不需要一路檢查到 n - 1
只要從 2 檢查到 根號 n,如果都不能整除,就可以判斷它是質數。

留言

這個網誌中的熱門文章

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新