每次迭代在Python'循环'中更改范围开始

问题描述:

我是一个新手和学习python(使用2.7)。我正在尝试一些简单的脚本来测试python如何处理不同类型的循环。每次迭代在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'循环来完成这个循环,我很好奇吗?

+0

如果你正在寻找其他循环,你可以使用'while'循环 - 'n2

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

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

+0

你将如何获得索引越界? –

range在您for循环开始时调用该函数的那一刻创建一个固定列表。您可以将for循环的顶部想象为将n2分配给该列表的下一个元素,而不管您在循环中做什么。如果你想改变的范围内的期间,使用第三个参数:

range(n, 20, period) 

规模将period的措施,通过范围内移动的大小为一步骤操作。