所以我检查了你链接到的 Python the Hard Way 网站上的问题......我认为他实际上只是要求你使用 for 循环和范围重写他的原始脚本,在这种情况下你可以做这样的事情:
numbers = []
for i in range(6):
print "at the top i is", i
numbers.append(i)
print "numbers now", numbers
print "finally numbers is:"
for num in numbers:
print num
如果你运行它,你会得到这样的输出:
$ python loops.py
at the top i is 0
numbers now [0]
at the top i is 1
numbers now [0, 1]
at the top i is 2
numbers now [0, 1, 2]
at the top i is 3
numbers now [0, 1, 2, 3]
at the top i is 4
numbers now [0, 1, 2, 3, 4]
at the top i is 5
numbers now [0, 1, 2, 3, 4, 5]
finally numbers is:
0
1
2
3
4
5
要回答有关增量语句的问题,如果有必要,请尝试以下操作:
for i in range(6):
print "at the top i is", i
numbers.append(i)
i += 2
print "numbers now", numbers
print "at the bottom i is", i
print "finally numbers is:"
for num in numbers:
print num
你会得到这样的输出:
$ python loops.py
at the top i is 0
numbers now [0]
at the bottom i is 2
at the top i is 1
numbers now [0, 1]
at the bottom i is 3
at the top i is 2
numbers now [0, 1, 2]
at the bottom i is 4
at the top i is 3
numbers now [0, 1, 2, 3]
at the bottom i is 5
at the top i is 4
numbers now [0, 1, 2, 3, 4]
at the bottom i is 6
at the top i is 5
numbers now [0, 1, 2, 3, 4, 5]
at the bottom i is 7
finally numbers is:
0
1
2
3
4
5
你看到这里发生了什么吗?请记住,range 函数会生成这样的列表:
range(6) -> [0, 1, 2, 3, 4, 5]。
这是 Python 的 for 语句知道如何迭代的东西(他们称这些类型的东西为可迭代的)。无论如何,变量 i 每次迭代都绑定到 range(6) 中的一项(即列表 [0, 1, 2, 3, 4, 5])。即使你在 for 循环中对 i 做了什么,它也会被反弹到可迭代的下一个项目。所以这个增量语句绝对没有必要。在这种情况下,它只是将 2 添加到 i 中,但无论如何它都会像正常的每次迭代一样反弹。
好吧,毕竟,这是我在更改您的特定代码时使用的选项,每次将迭代器从使用 while 循环更改为使用带范围的 for 循环。
我认为您通过浏览您链接到的在线书籍的前几章已经涵盖了函数,但是如果您之前没有看过递归,它可能会有点令人困惑。再次调用函数之前的 if 语句是为了防止当前值超过范围内的值,这会给你一个关于超出最大递归深度的错误(python 这样做是为了防止堆栈溢出错误我很确定)。
最后一点,你可以用 range:
range(0, 10, 2) -> [0, 2, 4, 6, 8]来做这样的事情
,我在下面使用它:
def my_loop(max, current=0, increment=1, numbers=[]):
for x in range(current, max, increment):
print "at the top, current is %d" % current
numbers.append(current)
increment = int(raw_input("Increase > "))
current += increment
print "numbers is now: ", numbers
print "at the bottom current is %d" % current
break
if current < max:
my_loop(max, current, increment, numbers)
else:
print "no more iterating!"
max = int(raw_input("Type in max value for the loop > "))
my_loop(max)
我不认为我会真的这样做,但至少这是一个有趣的尝试。