簡體   English   中英

檢查一個數是否為質數

[英]checking whether a number is prime

我正在嘗試創建一個 for 循環,遍歷范圍內的數字並檢查它們是否可整除。 這是我的代碼:

user_input = input("pick a number")

for i in range(1, int(user_input)):
    if int(user_input) % i == 0 and i != 1 and i != int(user_input):
        print("Your number is prime")
    else:
        print("your number is not prime")

即使對於素數,第二個條件也會繼續執行。 我究竟做錯了什么?

當您使用 for 循環時,您正在迭代range(1, int(user_input))的次數,因此您的if/else會一遍又一遍地執行,並且在每次迭代中都會打印一些內容。 相反,您只想在完成后打印。

要實現這一點,您需要使用 boolean True/False 變量來跟蹤數字是否為質數,並在for循環中相應地設置它。

user_input = input("pick a number")

is_prime = True
for i in range(2, int(user_input)):
    if int(user_input) % i == 0 :
        is_prime = False
        break #break out of the for loop since the number isn't prime

if is_prime:
   print("Your number is prime")
else:
   print("your number is not prime")

其他一些小的變化:

  1. 刪除條件and i != 1因為超過1的任何迭代都將無法通過此測試並且您想檢查迭代中的每個數字
  2. 刪除條件and i != int(user_input)因為在你的迭代中你永遠不會達到這個數字range()不包括最高數字。
  3. 一旦我們確定數字不是素數,就添加一個break ,這樣我們就不會浪費迭代來檢查它是否更不是素數。

您的代碼范圍存在一些問題,應該是 2 而不是 1。一旦條件滿足,就添加一個 break 語句。

user_input = input("pick a number")
user_input  = int(user_input)

for i in range(2, user_input)::  #for i in range(2, int(user_input /2)+1) also works
    if (user_input  % i) == 0:    
        print("Your number is prime")
        break
else:
    print("Your number is not a prime")

更簡單的方法

user_input = int(input("pick a number"))
result = all(user_input % i for i in range(2, user_input))

if result:
     print("Your number is prime")
else:
     print("Your number not a is prime")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM