明天也喜欢 发表于 2023-2-27 01:11:45

关于range()函数用法求助

# 10以内素数
for j in range(2, 10):
    for i in range(2, j):
      if j % i == 0:
            print(j, '=', i, '*', j // i)
            break
    else:
      print(j, '是一个素数')

第一个问题: 第一个for 第一次循环 j 得到的值是2 那么接下来循环第二个for i 得到的值是2
再进入分支语句 if 中时 j % i 的值是0,为啥显示2=2*1,而显示2是素数。
第二个问题 :进入第二遍循环的时候 j 得到的值是3 那么 此时 i 得到的值是不是也是3呀(不是右边取不到吗)
第三个问题:第一个for循环是把2到10(含2不含10)之间数取完再去执行第二个for循环?

wp231957 发表于 2023-2-27 07:33:47

j=2时不进去内循环

未泯 发表于 2023-2-27 09:18:22

第一个问题:for是先比较,再进入循环体,第一次循环 j 得到的值是2 那么接下来循环第二个for i 得到的值是2,条件是for i in range(2,2) ,条件为fales不进入循环体,直接else: print(j, '是一个素数')
第二个问题 :进入第二遍循环的时候 j 得到的值是3 那么 此时 i 得到的值是2
第三个问题:是内层i循环2到 j循环完之后,j加一继续循环2到j,直到J到10

明天也喜欢 发表于 2023-2-27 10:13:57

wp231957 发表于 2023-2-27 07:33
j=2时不进去内循环

好勒,感谢老哥帮助

明天也喜欢 发表于 2023-2-27 10:14:53

未泯 发表于 2023-2-27 09:18
第一个问题:for是先比较,再进入循环体,第一次循环 j 得到的值是2 那么接下来循环第二个for i 得到的值是 ...

就是说内外循环是一层一层递进的,好的,感谢老哥帮助

isdkz 发表于 2023-2-27 13:27:21

未泯 发表于 2023-2-27 09:18
第一个问题:for是先比较,再进入循环体,第一次循环 j 得到的值是2 那么接下来循环第二个for i 得到的值是 ...

你说的“for是先比较,再进入循环体”是不对的,for 循环没有比较,它的本质是先通过 iter 获得迭代器对象,
然后通过 next 迭代出元素

未泯 发表于 2023-2-27 13:59:58

isdkz 发表于 2023-2-27 13:27
你说的“for是先比较,再进入循环体”是不对的,for 循环没有比较,它的本质是先通过 iter 获得迭代器对 ...

那你这么说next方法中抛出 的StopIteration 异常用啥方式判断出用于结束 迭代器循环的。

isdkz 发表于 2023-2-27 14:06:06

未泯 发表于 2023-2-27 13:59
那你这么说next方法中抛出 的StopIteration 异常用啥方式判断出用于结束 迭代器循环的。

当然是 for 循环内部自动处理了呀,它遇到 StopIteration 就结束循环,而不是将其抛出,

你想知道 for 循环是怎么处理 StopIeration 的就得看 python 的源代码了,这不是就学习语言本身需要关心的事情,

但是 python 的 for 循环的本质还是得有所了解的,你在网上也能搜得到

未泯 发表于 2023-2-27 14:46:12

isdkz 发表于 2023-2-27 14:06
当然是 for 循环内部自动处理了呀,它遇到 StopIteration 就结束循环,而不是将其抛出,

你想知道 f ...

内部比较了

isdkz 发表于 2023-2-27 14:47:48

未泯 发表于 2023-2-27 14:46
内部比较了

{:5_90:}都说没有比较了,你咋就这么轴呢

未泯 发表于 2023-2-27 15:04:26

isdkz 发表于 2023-2-27 14:47
都说没有比较了,你咋就这么轴呢

你信我

isdkz 发表于 2023-2-27 15:05:55

未泯 发表于 2023-2-27 15:04
你信我

你能找到网上有相关的资料来证明我就信你

yaoyao爱鸡腿 发表于 2023-5-5 15:16:51

一样的疑问,感谢
页: [1]
查看完整版本: 关于range()函数用法求助