你再掐我试试 发表于 2020-5-23 22:34:08

关于遍历循环与else的一个问题

今天看一段代码,楞是没有看懂。主要是两个return给我看傻了,求高手给我说道说道。

#Prime
def is_prime(n):
    for i in range(2,n):
      if n%i == 0:
            return False
    return True
sum = 0
for i in range(2,100):
    if is_prime(i):
      sum += i
print(sum)


我自己把它改了一下,改成了遍历循环加else,就感觉好懂很多。
#Prime
def is_prime(n):
    for i in range(2,n):
      if n%i == 0:
            break
    else:
      return True
sum = 0
for i in range(2,100):
    if is_prime(i):
      print(i)
      sum += i
print(sum)

liuzhengyuan 发表于 2020-5-23 22:36:14

python 函数中一遇到 return 这个函数就不执行了
不管 return 之后还有没有代码,只要遇到return 之后的代码就不执行了
也就是说当函数 return False 时,就不会再执行后面的return True 了
如果几次循环下来,没有 成功 return False 那么就 return True

Twilight6 发表于 2020-5-23 22:40:40

本帖最后由 Twilight6 于 2020-5-23 22:45 编辑

def is_prime(n):
    for i in range(2,n):# 循环遍历 2~n-1位数

      if n%i == 0:      # 判断 n 是否被 i 整除
            return False# 若被整除 则返回 False 已经有返回值则不在执行以后的代码

    return True# 若 for循环 n-1次都没有被 i 整除过 就会执行这个
要注意的是 第二个return 是在for循环外的 ,也就是说 第二个return 要等循环结束才有可能被执行,而且循环过程中 不能被 i 整除

因为在循环中一被 i 整除 就会返回False ,就终止了不执行之后的代码了

其实是和你正解改后的for循环代码是一样的 你可以略微按照你的代码来理解答案的代码是可行的,但是:
for i in range(2,n):
      if n%i == 0:# 这里判断整除就直接break ,但是你的函数返回值是 None而答案的代码返回值是 False
            break
    else:
      return True

青出于蓝 发表于 2020-5-23 22:43:04

本帖最后由 青出于蓝 于 2020-5-23 22:46 编辑

return就是返回值啊,如果余数为0,可以整除,返回False。否则返回True

青出于蓝 发表于 2020-5-23 22:44:22

%是求余数,range是个函数(初始,结束,步长),+=是计数。
还有什么不好理解得吗{:10_257:}

你再掐我试试 发表于 2020-5-24 11:24:13

感谢大家,我懂了!最佳我按时间顺序给了哦,还望其他几位见谅。
页: [1]
查看完整版本: 关于遍历循环与else的一个问题