鱼C论坛

 找回密码
 立即注册
查看: 3443|回复: 12

[已解决]关于range()函数用法求助

[复制链接]
发表于 2023-2-27 01:11:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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循环?
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-27 07:33:47 From FishC Mobile | 显示全部楼层
j=2时不进去内循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-27 10:13:57 | 显示全部楼层
wp231957 发表于 2023-2-27 07:33
j=2时不进去内循环

好勒,感谢老哥帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-27 10:14:53 | 显示全部楼层
未泯 发表于 2023-2-27 09:18
第一个问题:for是先比较,再进入循环体,第一次循环 j 得到的值是2 那么接下来循环第二个for i 得到的值是 ...

就是说内外循环是一层一层递进的,好的,感谢老哥帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你说的“for是先比较,再进入循环体”是不对的,for 循环没有比较,它的本质是先通过 iter 获得迭代器对象,
然后通过 next 迭代出元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-27 13:59:58 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-2-27 13:27
你说的“for是先比较,再进入循环体”是不对的,for 循环没有比较,它的本质是先通过 iter 获得迭代器对 ...

那你这么说next方法中抛出 的StopIteration 异常用啥方式判断出用于结束 迭代器循环的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

但是 python 的 for 循环的本质还是得有所了解的,你在网上也能搜得到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你想知道 f ...

内部比较了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-27 14:47:48 | 显示全部楼层

都说没有比较了,你咋就这么轴呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-27 15:04:26 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-2-27 14:47
都说没有比较了,你咋就这么轴呢

你信我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-27 15:05:55 | 显示全部楼层

你能找到网上有相关的资料来证明我就信你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-5 15:16:51 | 显示全部楼层
一样的疑问,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 09:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表