鱼C论坛

 找回密码
 立即注册
查看: 264|回复: 4

为什么range函数倒着读取写step=-1,不显示结果

[复制链接]
发表于 2024-4-14 01:51:23 | 显示全部楼层 |阅读模式

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

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

x
如下代码,没有正确的打印i
for i in range(-4,0,-1):
     print(i)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-14 01:51:31 | 显示全部楼层
这是因为使用`range`函数时,当指定了`step`为负数时,起始值应该比结束值小。但是在你的代码中,起始值为-4,而结束值为0,这样的话`range`函数就无法生成任何数字了。

要解决这个问题,你可以将起始值和结束值互换一下,代码如下:
for i in range(0, -5, -1):
    print(i)

这样就能按照倒序的方式打印出-1、-2、-3、-4这些数字了。记住,当使用负数的步长时,起始值要比结束值大。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-14 09:59:40 | 显示全部楼层
本帖最后由 星许Sky 于 2024-4-14 10:01 编辑

内部机制就是这样的。
在Python中文文档中有这么一段话:
如果 step 为负值,确定 range 内容的公式仍然为 r[i] = start + step*i,但限制条件改为 i >= 0 且 r[i] > stop.
如果 r[0] 不符合值的限制条件,则该 range 对象为空。

你使用的语句是这样的
for i in range(-4,0,-1):
     print(i)

其生成的列表第一个元素-4+-1*0=-4,-4<0,就已经不符合条件,所以直接返回空列表。
才疏学浅,如有错误,还请指正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-14 13:19:03 | 显示全部楼层
-4 + k(-1) 不可能到 0 好吧

你要改成:

for i in range(-4,0,1):
     print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-15 14:18:56 | 显示全部楼层
本帖最后由 jackz007 于 2024-4-15 14:26 编辑
for i range(a, b, step) :
        如果 step < 0,必须满足 a >b,在本例中,step = -1 < 0,而 a = -4,b = 0,a > b 的条件没有得到满足,这就是问题所在。
        【修改方法】,只要 a、b 位置互换即可。
for i in range(0, -4, -1):
     print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 14:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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