[英]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.