captaindai 发表于 2024-4-14 01:51:23

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

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

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

星许Sky 发表于 2024-4-14 09:59:40

本帖最后由 星许Sky 于 2024-4-14 10:01 编辑

内部机制就是这样的。
在Python中文文档中有这么一段话:
如果 step 为负值,确定 range 内容的公式仍然为 r = start + step*i,但限制条件改为 i >= 0 且 r > stop.
如果 r 不符合值的限制条件,则该 range 对象为空。
你使用的语句是这样的
for i in range(-4,0,-1):
   print(i)
其生成的列表第一个元素-4+-1*0=-4,-4<0,就已经不符合条件,所以直接返回空列表。
才疏学浅,如有错误,还请指正。

isdkz 发表于 2024-4-14 13:19:03

-4 + k(-1) 不可能到 0 好吧

你要改成:

for i in range(-4,0,1):
   print(i)

jackz007 发表于 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)

某一个“天” 发表于 2024-8-3 13:00:16

当指定了step为负数时,起始值应该比结束值小。
有两种修改方法:
1.for i in range(-4, 0, 1):
   print(i)
2.for i in range(0, -4, -1):
   print(i)
页: [1]
查看完整版本: 为什么range函数倒着读取写step=-1,不显示结果