为什么我在范围(0,10,-1):不打印任何东西

时间:2017-01-11 22:48:55

标签: python for-loop

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

为什么上面的程序什么都不打印,我希望它打印至少0 根据 “for i in range(start,end,iterator)”定义,它计算第一个元素,然后使用迭代器来获取下一个元素。 因此理论上,示例代码片段应首先取0并打印出来,然后将下一个元素评估为-1,这不是0-10,那么它应该挽救

4 个答案:

答案 0 :(得分:2)

使用否定" step",python继续产生 1 元素,而当前值大于end。在这种情况下,您从0开始。 0不大于或等于10,因此python已完成,并且没有任何结果。

1 这当然是一种简化 - range在python3.x上返回一个range对象,它是一个可索引的序列类型,所以它不会#39 ;确切地说yield,但基本思路是一样的......

答案 1 :(得分:2)

range()调用没有评估第一个元素,如果range()为负数且step,则Python的start + i * step函数不会返回任何内容不大于stop。对于您的示例,start = 0 + 0 * -1不大于stop = 10,因此您的range调用会返回空列表,而您的for循环无需迭代。

$ python -c 'print(range(0,10,-1))'
[]

range()' s documentation

  

范围(停止)

     

范围(开始,停止[,步骤])

     

这是一个多功能函数,用于创建包含算术进度的列表。它最常用于for循环。参数必须是普通整数。如果省略step参数,则默认为1.如果省略start参数,则默认为0.完整表单返回普通整数列表[start,start + step,start + 2 * step,...] 。如果step为正,则最后一个元素是最大的start + i * step小于stop;如果step为负数,则最后一个元素是最小的start + i * step大于stop。 step不能为零(否则引发ValueError)。例如:

答案 2 :(得分:0)

range中的第三个参数是step

在范围内,您可以将step设为12等。

当您提供-1时,它不会执行reverse

如果要打印相反的订单,可以尝试

>>> range(10)[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

答案 3 :(得分:0)

在Python中,范围函数使用参数range(StartingValue, EndingValue, Step),您遇到的问题是您为StartingValue小于EndingValue的情况分配了一个否定步骤。由于这种情况,它永远不会进入循环,因为已经达到并超过了结束值。

要解决此问题,只需反转前两个值:for I in range(10,0,-1)。可以把它想象成一句话,比如FOR each ITEM in the RANGE of 10 to 0 decreasing by 1