だから私はあなたがリンクしたPythontheHardWayのウェブサイトで質問をチェックしました...彼は実際には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(6)-> [0、1、2、3、4、5]。
これは、Pythonのforステートメントが反復する方法を知っているものです(これらのタイプのものを反復可能と呼びます)。とにかく、変数iは、反復ごとにrange(6)内の1つの項目(つまり、リスト[0、1、2、3、4、5])にバインドされます。forループ内でiに何かを行っても、iterableの次の項目にリバウンドされます。したがって、incrementステートメントは絶対に必要ありません。この場合、iが何であれ2を追加するだけですが、反復ごとに通常のようにリバウンドされます。
さて、これが、whileループの使用から範囲付きのforループの使用に毎回イテレータを変更するオプションを使用して、特定のコードを変更する際の私の亀裂です。
リンクしたオンラインブックの前の章を一瞥するだけで機能をカバーできたと思いますが、少し混乱する前に再帰を見たことがない場合は。関数を再度呼び出す前のifステートメントは、現在の値が範囲内の値を超えないようにすることです。これにより、最大再帰深度を超えたというエラーが発生します(Pythonは、スタックオーバーフローエラーを防ぐためにこれを行います。 )。
範囲を使用して次のようなことを実行できる最後のポイント:
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)
私は実際にこのようにすることはないと思いますが、少なくとも興味深いテイクです。