問題を見て反復的なアプローチを使用する場合(私が推奨するように)。探しているのは、ループ内のすべての int に正確に 3 を追加することではないことがわかります。
ピラミッドの半分を正しく理解することから始めましょう。これを行うには、単純なループが必要です。(これを Python で実行して、疑似コードのようにします):
def pyramid(rows):
for row_num in range(1,rows+1):
print '*' * row_num
これにより、5 に対して次の出力が得られます。
*
**
***
****
*****
私たちはそこまでの道のりを進んでいます。今実際に必要なのは、反対側のピラミッドの中央から始まる鏡像です。
まず、行番号の 2 倍より常に 1 少ないという事実を見れば、1 行あたりの星の数を計算できます。(1,3,5,7など)
これにより、次のコードが得られます。
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
print '*' * num_stars
次の出力が生成されます。
*
***
*****
*******
*********
現在、欠けているのはアライメントだけです。各行が適切にインデントされるために必要なスペースの数を計算するために、パターンをもう一度見ることができます。この場合、線を中央に配置するには、行ごとに 1 ずつ減少する値だけ各線をオフセットする必要があるようです。
最初の行はその前に 4 つのスペースが必要であり、2 行目は 3 つというように始まります。行数そのもの。
このパターンから、出力をオフセットするために必要なスペースの数は、実際には行数からrow_numを引いたものに等しいことがわかります。これにより、次のコードが得られます。
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
offset = rows - row_num
print (' ' * offset) + ('*' * num_stars)
これで最終結果が得られます。
*
***
*****
*******
*********
そして...完成です!
簡潔にするために、このコード例では Python を使用しました。低レベル言語を使用しているため、文字列を生成するために文字を乗算する機能はありません。
多くの人は「ネストされたループを書いてください」と言うでしょう。私は、高等言語に必要な機能を模倣する関数を作成するのが最善だと考えています。
文字列の乗算を実行する関数を作成できれば、同じコードを 2 回使用できます。
Python に文字列乗算が組み込まれていない場合は、次のような関数を簡単に作成できます。
def multiply_char(char,number_of_times):
s = ''
for i in range(number_of_times):
s += char
return s
これで、この割り当てでその関数を 2 回使用できるようになり、入れ子になったループ (関数呼び出しでは発生しない後で読みやすさを向上させる) を使用せずにコードをきれいに保つことができます。
頭の中でこれらの小さなプログラムを分解する方法は、良いコードを書くための戦いの半分です。先生は、あなたに問題を分析して、より小さな部分に分解させようとしています。何かを実行するコードから開始し、機能的に完了するまで反復することをお勧めします。
ハッピーコーディング!