Python:素数和范围()

时间:2014-04-30 18:12:45

标签: python python-3.x range iteration

我正在学习python并正在研究这个问题: Python - Prime Number exercise 这是我的问题: 当n = 2时,范围将为(2,n),换句话说,范围在2和2-1之间= 1.

   for x in range(2, n):
      if n % x == 0:
        print("{} equals {} x {}".format(n, x, n // x))
        return False
   else:
      print(n, "is a prime number")
      return True

一个。它会是2%2吗?

湾如果数字是偶数,则会打印

  

A等于B x C

一旦条件为真,循环就会中断,还是会完成循环?

℃。循环外的其他东西?如果声明对应怎么办? (我知道它是if n % x == 0:)但是看起来好像它在循环之外? 我试图运行它,并理解,但后来我感到困惑。

3 个答案:

答案 0 :(得分:3)

for .. else confusion

您似乎对else循环中的for感到困惑。

你不是唯一一个。

在Python中,for循环可能在末尾else部分,它在所有循环完成后执行,除非有break语句。是的,它不是很直观。

因此,您应将else部分作为for循环的最后一部分阅读。

def looptest(loops=5):
    for i in range(loops):
        print "i", i
        if i == 3:
            print "in if"
            return
    else:    
        print "in else of the loop"

并尝试使用循环== 5:

>>> looptest(5)
i 0
i 1
i 2
i 3
in if

对于循环次数2我们不期望返回,我们将遍历循环的else

>>> looptest(2)
i 0
i 1
in else of the loop

注意,return必须在函数内,尝试在控制台上返回会导致错误。

范围(2,2)== []

尝试使用Python控制台:

>>> range(2, 2)
[]

返回

返回结束当前功能或在整个模块中运行。因此,在return之后,代码的同一部分中不再执行任何代码(例如tryfinally,上下文管理器等,但这与您的代码无关)。

答案 1 :(得分:1)

一个。不,range(2,2)是Python中的空集。

湾一旦条件为真,包含循环的函数将返回,循环将不会完成。这是因为return调用是if语句的一个级别。

℃。我很确定您希望elsefor对应。如果else循环正常终止(即没有for),Python就会使用... else语法来执行break子句的内容。

换句话说,我认为你想要这个:

for x in range(2, n):
        if n % x == 0:
            print("{} equals {} x {}".format(n, x, n // x))
            return False
else:
     print(n, "is a prime number")
     return True

编辑:

当然,我可以解释整个循环。这个想法是这样的:对于两个和n之间的每个数字,检查该数字是否是x的因子。如果是,则n不是素数,我们杀死循环。但是,如果我们一直到循环结束,我们知道n是素数,因为它没有2和n之间的因子。然后,else子句启动,并打印出该数字为素数。

答案 2 :(得分:1)

看看这个功能:

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

迭代每个可能的选项并不一定是最好的选择;请记住,范围永远不会超过数字的平方根。

另外值得注意的是,您的输出只会打印第一组因子。