首页 > 解决方案 > 条件返回查询

问题描述

为什么下面的程序是正确的?它检查列表是否1,2,3存在序列。现在,该else语句是否应该不与if行而不是for行缩进。只要我把它放在下面if,这个程序的其他测试就会出错。请帮忙解释一下。

def array123(nums):
  for x in range(len(nums)-2):
    if nums[x]==1 and nums[x+1]==2 and nums[x+2]==3:
      return True
  else:
    return False

array123([1, 1, 2, 3, 1])

标签: pythonpython-3.x

解决方案


从这里开始:https ://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

4.4. break 和 continue 语句,以及循环上的 else 子句#

循环语句可能有一个 else 子句;它在循环通过耗尽可迭代(with for)或条件变为假(with while)而终止时执行,但在循环由 break 语句终止时不执行。下面的循环就是一个例子,它搜索素数:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

(是的,这是正确的代码。仔细观察:else 子句属于 for 循环,而不是 if 语句。)

当与循环一起使用时,else 子句与 try 语句的 else 子句相比与 if 语句有更多的共同点:try 语句的 else 子句在没有异常发生时运行,循环的 else 子句在没有中断时运行发生。有关 try 语句和异常的更多信息,请参阅处理异常。


推荐阅读