簡體   English   中英

在Python中,編寫一個腳本來確定用戶輸入的數字是否為素數

[英]In Python, write a script that determines whether or not a user-inputted number is a prime number

編寫一個腳本,確定用戶輸入的數字是否為素數,並打印“您輸入的數字是素數”或“您輸入的數字不是素數”,具體取決於您的腳本找到的數字。

我的代碼在一些測試用例中失敗了,我不知道為什么。 我在這里看到一些涉及計算sqrt的答案,但我不明白為什么這會有益。

num= int(input())

if num == 0 or num ==1:
    print('The number you inputted is not a prime number.')
while num < 0:
    break
if num > 0:
    for i in range(2,num):
        if num%i==0:
            print('The number you inputted is not a prime number.')
            break
        else:
            print('The number you inputted is a prime number.')
            break

當我嘗試使用一些測試用例時,代碼總是正確的,但它並沒有通過我的作業。

你的邏輯錯了; 只有在條件計算結果為True時才應該中斷,因為你需要測試所有數字,最多為num ** 0.5 (代碼中num ** 0.5 num )。 9是您的代碼評估為素數的非素數的示例。

你想要這樣的東西:

prime = True
if num > 0:
    for i in range(2,num):
        if num % i == 0:
            prime = False
            break

    if prime:
        print(f'{num} is a prime number.')

    else:
        print(f'{num} is not a prime number.')

通過在開始時將prime設置為True並且僅在找到因子時將其更改為False ,我們可以在評估i所有值的條件之后判斷數字是否為素數。

問題出現在下面的邏輯中:

for i in range(2,num):
    if num%i==0:
        print('The number you inputted is not a prime number.')
        break
    else:
        print('The number you inputted is a prime number.')
        break

要查看問題發生的位置,請嘗試使用您的代碼檢查9是否為素數。 你的for循環執行以下操作:

  1. i = 2
  2. if num % i == 0 ,則不是素數,中斷。
  3. else ,素數,休息。

這意味着您的for循環保證在i==2處停止。 換句話說,根據此算法,您對素數的定義是“任何奇數”。

要解決這個問題,你需要找到一種方法來允許循環在所有剩余的可能除數之間進行迭代,而不會在第一次迭代后中斷。

我會在那里停下來,讓你有機會看看你是否可以自己解決問題。 如果你不能取得任何進展,請告訴我,我會另外提示。

暫無
暫無

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

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