for i in range(start,stop,step) Python 3

6

我想列出一系列数字,使用的是"for i in range(start,stop,step)"。

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

我想把数列从大到小列出来,但实际上它一直列到了-112。

我发现如果这样做:

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

现在它会停留在0。有人能解释一下为什么会这样,而不是真的在0处停止吗?很抱歉,我是新手,我非常困惑。我还希望将结果列出以便后续参考,例如将结果串联在一起形成线和多边形,但不能简单地写成。
list(P)

使用print(P)的替代方法


你的第一个示例应该会引发 TypeError 错误,因为你正在用自定义函数覆盖 range,所以它会递归调用自身,但由于参数个数不同,这样是行不通的。而在你的第二个示例中,缩进出现了问题。 - Byte Commander
2个回答

9

要创建一个从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)

0
发生的情况是使用range函数,从36到0创建一个列表,并进行37次循环。如果您在循环中更改变量P,则其不再影响循环次数。
在第一种情况下,您将得到36-37*4 = -112 在第二种情况下,您的循环执行了9次,这就是为什么您得到0 36 -9*4 = 0 :)
尝试使用xrange函数,它应该为每个循环创建一个值,并且我认为它会在0处停止。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接