首页 > 解决方案 > 使用 for 循环的 Python 双重打印

问题描述

我对编码很陌生,如果这是一个愚蠢的问题,我很抱歉。我在 Python 中遇到了这个 for 循环的问题:

for n in (2, (k / 2)):
    if k % n == 0:
        print ("Yes")
    else:
        print ("No")

问题是我得到了两个打印件,有时是相互矛盾的打印件,例如3、25、35YesNo其他数字。

我的目的是检测素数。

顺便说一句,我使用 PyCharm。

谢谢你。

标签: pythonfor-loop

解决方案


语法for n in (a, b)不会nvalues 之间循环a, a+1, a+2, ..., b,它实际上是n取值a,然后b作为语法(a, b)定义一个您迭代的元组。

您几乎肯定在寻找range()返回可迭代的函数,您可以在 for 循环中对其进行迭代,以便n将值范围从ato b(不包括b)。

所以:

for n in range(2, int(k / 2)):

请注意,我们还必须将结果转换为整数,int()因为范围不接受浮点数(小数)


至于使素数测试起作用,您不想一直循环到数字的一半,您只需要向上到数字的平方根即可。此外,每当您找到一个除数时,您都可以退出循环print('no')break但是当一个数字不能除掉主要候选人时,您就不能print('yes'),因为可能存在您尚未检查的除数​​。所以我们只有print('yes')for-loop不提前打破它的情况下完成它。这是最容易实现的功能:

def is_prime(k):
    if k <= 1:
        return False
    for n in range(2, int(k ** 0.5) + 1):
        if k % n == 0:
            return False
    return True

然后我们可以看到它有效:

>>> is_prime(2)
True
>>> is_prime(3)
True
>>> is_prime(4)
False
>>> is_prime(5)
True
>>> is_prime(6)
False
>>> is_prime(7)
True
>>> is_prime(8)
False
>>> is_prime(9)
False
>>> is_prime(10)
False
>>> is_prime(11)
True

推荐阅读