![](/img/trans.png)
[英]When running sys.stdout.write(), none is printed after what i want to print
[英]'None' is printed when I want 'True' for input 5
在此素數測試程序中,當我輸入素數而不是“ True”時,將打印“ None”。 如何獲得打印“ True”的字樣?
def main():
import math
def check_n(n):
n_s = int(math.sqrt(n))
for i in range(2, n_s):
if (n_s % i) == 0:
return False
break
else:
return True
def msg():
n = int(input('Enter a number, I will return True if it is a prime'))
return n
print(check_n(msg()))
main()
您需要將int(math.sqrt(n))
更改為int(math.sqrt(n)+1)
,因為range
一直運行到n_s-1
。 因此,如果輸入為5, range(2,int(math.sqrt(5)))
只是range(2,2)
,為空。
另外,您需要在for
循環之外使用return True
,否則您的代碼可能會在初期階段停止。 在return False
之后,您也不需要break
語句(該函數將永遠不會到達該行,因為如果輸入到if
語句,它將返回False
)。
最后,將if (n_s % i) == 0:
更改為if (n % i) == 0:
因為您需要檢查n
是否可被i
整除(而不是其平方根)。
這是一個更干凈的版本:
import math
def check_n(n):
n_s = int(math.sqrt(n)+1)
for i in range(2, n_s):
if (n % i) == 0:
return False
return True
def msg():
n = int(input('Enter a number, I will return True if it is a prime'))
return n
print(check_n(msg()))
第一:您的break語句是多余的。
第二:對於諸如3之類的值,永遠不會執行for循環,因為值n_s小於2,並且由於for循環未執行,因此python返回默認值None(未指定任何值時返回)。 因此,您的check_n(n)函數必須為
def check_n(n):
n_s = int(math.sqrt(n))
for i in range(2, n_s + 1):
if (n_s % i) == 0:
return False
return True
一線
check_n = lambda n : sum([i for i in range(2, int(math.sqrt(n)+1)) if n % i == 0]) == 0
不要把事情復雜化..
選擇小於9的范圍時,范圍是(2,2)或None
。因此,要解決您的第一個問題:將2加到n_s
(對於輸入3)
您的邏輯也有問題。
您的for
循環應檢查n
mod i
為0,而不是n_s
。
這應該工作:
def main():
import math
def check_n(n):
n_s = int(math.sqrt(n)+1)
for i in range(2, n_s):
if (n % i) == 0:
return False
return True
def msg():
n = int(input('Enter a number, I will return True if it is a prime'))
return n
print(check_n(msg()))
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.