python中的for循环忽略if语句

时间:2021-03-08 04:11:52

标签: python

我是 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。提前致谢。

2 个答案:

答案 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.')

我不确定你是否完成了代码,似乎这是算法运行不正确。