簡體   English   中英

當我在這里將 2 作為輸入並在 function 中使用 else 時,它返回 non 但我刪除了 else 部分並使用沒有縮進的 return 它工作正常

[英]when I take 2 as an input here and use else in function it returns non but i remove the else part and use return without indentation it works properly

當我輸入 2 作為輸入時,我收到的 None 為 output。為什么會這樣? 我的代碼是:

def prime_number(x):
    if x<2:
        return False
    for i in range(2, x):
        if x%i==0:
            return '{} is not a prime number'.format(x)
        else:
            return "Your number is a prime number"

num = int(input("Enter a number to check whether it is prime or not"))
print(prime_number(num))

在你的代碼中

for i in range(2, x)

是空的。 您要求的范圍從 2 開始,遞增 1,直到大於 1。這將返回一個空列表。 您需要調整代碼以適應 2 超出范圍 (2,x) 的獨特情況。 明確聲明 2 是質數是最簡單的:

def prime_number(x):
    if x<2:
        return False
    elif x == 2:
        return "Your number is a prime number"
    else:
        for i in range(2, x):
            if x % i == 0:
                return '{} is not a prime number'.format(x)
        else:
            return "Your number is a prime number"

num = int(input("Enter a number to check whether it is prime or not"))
print(prime_number(num))

在 for 循環中使用range() function 時,循環將從開始值迭代到結束value - 1 如果最終值為 2,則迭代到 1。

在您的情況下,范圍是(2,x) 如果x的值變為2 ,則范圍為(2, 2) 這意味着從2開始,結束范圍是1 所以沒有迭代 這就是為什么您得到 output 作為none的原因。

這是因為range() function 生成了一個數字序列,但不包括最終值。 如果您需要包含2作為最終值,則需要將最后一個值遞增為x+1

對於素數程序,您不應將最后一個值添加為數字。 因為一個數可以被自己整除。 實際問題是您在代碼中登錄。 您需要添加一個Flag變量來確定一個數是否為素數。

num = 2

flag = False

if num == 1:
    print(num, "is not a prime number")
elif num > 1:
    # check for factors
    for i in range(2, num):
        if (num % i) == 0:
            # if factor is found, set flag to True
            flag = True
            # break out of loop
            break

    # check if flag is True
    if flag:
        print(num, "is not a prime number")
    else:
        print(num, "is a prime number")

暫無
暫無

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

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