2016-04-22 58 views
0

我想列出一个数字范围,我正在使用“for i in range(start,stop,step)”。我在范围内(开始,停止,步骤)Python 3

def range(): 
    P=36 
    for i in range(P+1,0,-1): 
     P=P-4 
     print(P) 

我想列出数字降到0,但它一直到-112。

我发现,如果我这样做,虽然:

def test(): 
    P=36 
    for i in range(P+1,28, -1): 
     P=P-4 
     print(P) 

这将现在0.1 停止可能有人请解释为什么它这一点,并不会真的在0停下来?对不起,我是新来的,我很困惑。我也想上市就能结果进行事后称,像结果串联起来,形成一个多边形线,但不能简单地写

list(P) 

,而不是print(P)

+0

你的第一个例子应该引发TypeError,因为你用你的自定义函数覆盖'range',所以它会自动调用它自己,并且这不起作用,因为不同参数号。在第二个例子中,缩进被打破了。 –

回答

0

发生了什么事是使用范围,在开始时创建一个从36到0的列表,并为37次循环做一次。如果您在循环中更改循环次数,您的var P将不再影响循环次数。

在你的第一个情况下,你将有36-37*4 = -112

在你的第二个情况下,你有你的循环执行9次这就是为什么你会得到0 36 -9*4 = 0 :)

尝试使用的xrange应该为每个值循环,我认为它会停在0

2

要创建36列表0中的4个步骤倒计时,您只需使用内置的range功能直接:

l = list(range(36,-1,-4)) 
# result: [36, 32, 28, 24, 20, 16, 12, 8, 4, 0] 

停止值为-1,因为循环从起始值(包括)运行到停止值(不包括)。如果我们使用0作为停止值,则最后的列表项将是4.

或者如果您更喜欢for循环,例如,因为你想打印里面的变量:

for P in range(36,-1,-4): 
    print(P)