我很困惑何时执行了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
答案 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…else
或while…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