我正在嘗試在 Python 中生成一個 for 回圈,該回圈應該將任何數字分類為素數/非素數。建議的命令是:
def prime_checker(number):
is_prime = True
for n in range(2, number):
if number % n == 0:
is_prime = False
if is_prime == True:
print("It is a prime number.")
else:
print("It is not a prime number.")
上面建議的命令效果很好。但是,我想將引數生成為is_prime = bool()(即沒有標準值),并且只有在此之后,該函式才會分類is_prime為“真”或“假”。原因是我不喜歡使用標準引數生成變數的想法。相反,我更喜歡首先生成填充有缺失值的變數,然后才用正確的引數填充它們。我試過這個命令,但它只會輸出“它是一個素數。”:
def prime_checker(number):
is_prime = bool()
for n in range(2, number):
if number % n == 0:
is_prime = False
else:
is_prime = True
if is_prime == True:
print("It is a prime number.")
else:
print("It is not a prime number.")
我想知道是否有人知道為什么上面的命令只會輸出“It is a prime number”。
uj5u.com熱心網友回復:
我不確定你為什么不喜歡這個想法,它在 python(以及一般編程)中非常標準并且經常使用。無論如何,你能寫的最接近的東西是:
is_prime = None
這在 python 中相當于宣告一個變數而不賦值。
uj5u.com熱心網友回復:
這是因為您正在檢查回圈中的每個數字并is_prime從中分配。這意味著唯一真正重要的比較是最后一個。即將number - 1始終確定它列印出來的內容。
同樣,您的更改確實具有默認值。bool()將默認為False
uj5u.com熱心網友回復:
我的最終命令是:
def prime_checker(number):
is_prime = None
if number <2:
is_prime = False
print(f"{number} is not prime")
else:
for n in range(2,number):
if number % n == 0:
is_prime = False
if is_prime == False:
print(f"{number} is not prime")
else:
is_prime = True
print(f"{number} is prime")
感謝所有在這篇文章中發表評論的人!當然歡迎任何其他意見。
uj5u.com熱心網友回復:
這是因為你的第二個功能
else:
is_prime = True
在for回圈中。因此,如果它發現對于 的一個值來說它不是質數n,那么下一次迭代(n 1)可能會使其is_prime等于True。
例如,如果您正在測驗數字 4:
- 它可以被 2 整除,所以設定
is_prime為False - 它不能被 3 整除,所以設定
is_prime為True
您需要break在發現它不是素數后添加 a,這樣它就不會嘗試繼續檢查其他數字。
無論如何,這樣做is_prime = bool()會將其設定為。False
最后,只是一個附加組件,有更快的方法來檢查素數:
import math
def is_prime(number):
if number <= 2:
print(number, "is prime!")
return True
for i in range(3, math.floor(math.sqrt(number)) 1, 2):
if number%i == 0:
print(number, "is prime!")
return True
print(number, "is not prime!")
return False
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457685.html
