每次迭代都在Python'for loop'中开始更改范围

时间:2017-08-01 17:47:07

标签: python python-2.7 for-loop

我是一个新手和学习python(使用2.7)。我正在尝试一些简单的脚本来测试python如何处理不同类型的循环。

我的问题是:如果将起点分配给变量,python可以在每次迭代时更改“范围”函数的起点吗?以下是我的代码示例:

def build(n, period):
    n2 = n
    for digit in range(int(n2), 20):
        print "At the top i is %d" % n
        digit += period
        numbers.append(digit)

        print "Numbers now:", numbers
        print "At the bottom i is %d" % digit

        print "The Numbers:"
        n2 += period

        for num in numbers:
            print num


key = raw_input("Press 1 to call function \"build\", press any other key to quit.")
if key == "1":
    i = raw_input("What integer is our start value?")
    amt = raw_input("What is the common difference?")
    numbers = [int(i)]
    build(int(i),int(amt))

else:
    quit()

我试图在函数内使用第二个局部变量'n2',这样我就可以保持'n'的初始值不变,然后重新定义每次迭代的范围。附加列表中的第一个数字按公共差异移动,但之后它总是以+1整数为步。我可以通过'while'循环轻松实现这一点,但是如果可以使用'for'循环来实现这一点,我会很好奇吗?

2 个答案:

答案 0 :(得分:1)

range在您的for循环开始时调用该函数时创建一个固定列表。您可以将for循环的顶部视为将n2分配给该列表的下一个元素,无论您在循环中执行什么操作。如果要更改范围的周期,请使用第三个参数:

range(n, 20, period)

将按大小period的步长移动到范围内,而不是步长为1的步骤。

答案 1 :(得分:0)

它不会以您期望的方式工作。表达式range(int(n2), 20)仅在for循环开始时被评估一次。你不能以这种方式改变for循环的范围。

您可以修改的是range函数中的step参数,但它不会改变您的起点 - 它只定义迭代过程中的下一个元素。