それでは、1 行ずつ見ていきましょう。自分がコンピューターであると考えてみましょう。
n = int(raw_input("How many rows? "))
ユーザーが入力したものを取得し、それを整数に変換して、結果を に保存しn
ます。
for row in xrange(n):
をループしていますがxrange(n)
、これは多かれ少なかれ と同じです[0, 1, 2, 3, 4]
(ただしxrange
、一度に完全なリストを保存しないため、メモリ効率が向上します)。これで、未来を見るときはいつでも、現在row
の数字のいずれかに置き換えなければならないことがわかりました。
for col in xrange(row+1):
この行は最後の行と似ています。nowは、 からに格納されている値col
まで数えたリスト内の値の 1 つです。したがって、が外側のループのこの反復にある場合、内側のループは 3 回実行されます。1 回目は、2 回目、3 回目は と等しくなります。(これらの値のそれぞれについて、はそのままです。これは、外側のループが反復を通過するときにのみ変化するためです。)0
row
row
2
col
0
1
2
col
row
2
row
print "*",
これは、 が*
実際に印刷される場所です。ここで注意が必要なのは、行末のコンマです。print
コンマのないステートメントは、何かを出力してから次の行に移動します。コンマを追加すると、基本的に行が出力されますが、改行の代わりに行の後にスペースが追加されます ( \n
)。したがって、この行は値ごとに呼び出されるため、各col
値の*
1 行に とそれに続くスペースが出力されcol
ます。
print
これは col ループ内ではないことに注意してください。このステートメントは、改行を出力するだけです。ここでの考え方は*
、次の行の s が前の行ではなく新しい行に追加されるように、各行が印刷された後に新しい行を印刷することです。これprint
がなければ、すべての星が 1 行に印刷されます。
したがって、各row
値について、このプログラムは s のrow+1
数を*
1 行に出力します。
質問の編集に応じて:
col
紛らわしい名前であることがわかりました。印刷中の現在の列番号ですcol
。これをより明確に確認するには、 に置き換えてみてください。以下を取得する必要があります。*
print "*",
print col,
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
( は を生成しますが、 は をrange(3)
生成することを思い出してください。)[0,1,2]
range(3+1)
[0,1,2,3]