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