何时需要在循环中使用else语句

时间:2018-04-03 05:42:29

标签: python python-3.x

我很困惑何时执行了else子句。我正在尝试编写一段代码来测试数字是否为素数。在我的" if"声明,当x%n == 0时,我打破了循环。 else语句仍然会运行吗?什么是if ... else ...的正确翻译,对于.... else,而...还是其他?我什么时候需要它?

def is_prime(x):
  if x<2:
    return False
  if x==2:
    return True
  for n in range(2,x):
    if x%n==0:
      return False
      break
    else:
      return True

4 个答案:

答案 0 :(得分:4)

如果循环退出而没有else语句,则会输入循环上的break子句。在for循环中,这通常意味着您遍历最终项目。在while循环中,它意味着while&#34; test&#34;失败。

一些有用的提示,可以避免混淆循环中else流的工作方式:

  • 如果循环在条件内突破,else就像if上的其他内容一样。
  • 如果while循环由于while&#34; test&#34;的失败而终止,您可以想象在最后一次迭代中用while替换if关键字。

执行else 的示例:

for x in 'abc':
    if x == 'z':
        break
else:
    # this will be executed, because we don't hit a break

for x in []:
    break
else:
    # this will be executed, because we don't hit a break

while False:
    break
else:
    # this will be executed, because we don't hit a break

执行else 赢得的示例:

for x in 'abc':
    if x == 'b':
        break
else:
    # this will not be executed, because we hit a break

n = 0
while True:
    if n > 10:
        break
    n += 1
else:
    # this will not be executed, because we hit a break

for x in 'abc':
    if x == 'b':
        return  # assuming we're inside a function here
else:
    # this will not be executed, because flow did not exit the loop
    # (`for:else` is not like `finally`!)

while True:
    pass
else:
    # this will not be executed, and your CPU is overheating

答案 1 :(得分:1)

使用for…elsewhile…else的原因是,当您在没有break语句的情况下从循环结束时,需要运行代码。通常这意味着您正在测试某些条件的每个值,成功时break但从未成功:

for idx, val in enumerate(lst):
    if val in good_vals:
        break
else:
    print("Couldn't find a good value")
    return None
print(f"Found good value {val} at position {idx}")
return do_something_with(idx)

但是在简单的情况下,就像上面那样 - 和你的一样 - 你总是可以重写一些事情来使else不必要:

for idx, val in enumerate(lst):
    if val in good_vals:
        print(f"Found good value {val} at position {idx}")
        return do_something_with(idx)
print("Couldn't find a good value")

答案 2 :(得分:1)

这个想法是你不需要在其他地方返回True,看看这个例子:

x = 9
for n = 2,8
when n = 2 the if statement will be 9%2==0 which is False so will return 
True on else statement.

正确的功能将如下所示

def is_prime(x):
    if x<2:
        return False
    if x==2:
        return True
    for n in range(2,x):
        if x%n==0:
            return False
            break
    return True

这是正确的形式,如果在你的整个for循环中没有返回False意味着该数字是素数,所以返回True。您也可以使用范围直到sqrt(x)而不是x。

答案 3 :(得分:0)

因为在else阻止你return True。当n = 2尝试x % n == 0而其结果为false时,会执行else block和return True

def is_prime(x):
    if x<2:
        return False
    if x==2:
        return True
    for n in range(2,x):
        if x%n==0:
          return False
    return True