-4

このコードはなぜですか?

n = int(raw_input("How many rows? "))
for row in xrange(n):
    for col in xrange(row+1):
        print "*",
    print

この結果を表示しますか(n = 5の場合)?

*
* *
* * *
* * * *
* * * * *

編集-私はそれがどのように段階的にこのフォームを取得するのか理解していません。colは列の数を意味しますか?列の入力が(rows + 1)であっても、列の数が行の数と等しいため、意味がありません。

4

2 に答える 2

3

それでは、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 回目は と等しくなります。(これらの値のそれぞれについて、はそのままです。これは、外側のループが反復を通過するときにのみ変化するためです。)0rowrow2col012colrow2row
  • 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]

于 2012-09-08T05:47:24.910 に答える
1

your code tels it to do that.let's say n=5. then you jump into the for loop. The first time thorugh the var row is 0. therefore, when you start the second for loop for the columns, you write xrange(row+1). Well, if row is 0, then row + 1 = 1. so It will display one star.and kicks out to the first for loop. ok, second iteration, the variable row becomes one. therefore, row + 1 = two, so when you enter the second for loop again, it will loop until hit hits two. then start over again, and the process repeats itself until you have 5 rows, each with enough columns to fulfill that row + 1 columns. Just follow the code one step at a time.

于 2012-09-08T05:18:51.287 に答える