我是 Python 新手,我不明白为什么我的 for 循环忽略 if 语句并说每个数字都是质数。我的代码是这样的。
def prime_number(number):
sqrt_prime = math.sqrt(number)
for x in (2,sqrt_prime-1):
if isinstance((number/x), int) and x <= sqrt_prime-1:
con_num = str(number)
print(con_num,end=' ');print('is not a prime number.')
break
else:
con_num = str(number)
print(con_num,end=' ');print('is a prime number.')
它可能更精简,只是想知道为什么它不是为 isinstance 输出 true 或者 x 小于或等于数字的 sqrt - 1。提前致谢。
答案 0 :(得分:0)
如果这是 python 3.x,那么它忽略它是有道理的。
number/x
将始终返回浮点数而不是整数。因此,isinstance((number/x), int)
始终为 False。
答案 1 :(得分:0)
问题是
isinstance((number/x), int)
。
类型总是 float
如果你检查它们
print(type(number/x))
更正: 改成
if isinstance((number/x), int) and x <= sqrt_prime-1:
到
if number % x == 0 and x <= sqrt_prime-1:
另一个问题是编码:
def prime_number(number):
sqrt_prime = math.sqrt(number)
flg = 0
for x in (2,sqrt_prime-1):
if number % x == 0 and x <= sqrt_prime-1:
con_num = str(number)
print(con_num,end=' ');print('is not a prime number.')
flg = 1
break
if flg==0:
con_num = str(number)
print(con_num,end=' ');print('is a prime number.')
我不确定你是否完成了代码,似乎这是算法运行不正确。