これは、クラスで一度やらなければならなかった質問と非常に似ていますが、Cで実装していました。実際、今戻ってPythonで再実装し、違いを確認するのは非常にクールです。
私たちが授業で抱えていた問題は非常に似ていました。これを機能させるための私のPythonコードは次のとおりです。
while True:
rows = input('Enter the number of rows: ')
if 3 <= rows <= 33:
break
else:
continue
padding = ' '*rows
while rows > 0:
print(padding[rows:] + '*'*rows)
rows = rows - 1
-逆三角形の輪郭を印刷するために、以下を変更しました。
# print the outline of an inverted triangle:
height = rows
# inner padding for min height (3)
inner_buffer = [0, 1, 3]
while len(inner_buffer) <= rows:
inner_buffer.append(inner_buffer[-1]+2)
while height > 0:
outer_padding = ' '*(rows - height)
if height == 1:
print(outer_padding + '*')
else:
inner_padding = ' '*(inner_buffer.pop()-2)
print(outer_padding + '*' + inner_padding + '*')
height = height - 1
これをコーディングしたいというよりエレガントなものが必要ですが、私たちが正しい方向に進んでいるかどうかを確認するためのハックです。
以下の新しいリビジョン:-定義された正三角形または逆三角形を生成する関数
def get_rows():
while True:
rows = input('Enter the number of rows: ')
if 3 <= rows <= 33:
return rows
def triangle(rows, regular=False, invert=True):
if invert:
height = -1 * rows
else:
height = 0
# inner padding for min height (3)
inner_buffer = [0, 1, 3]
while len(inner_buffer) <= rows:
inner_buffer.append(inner_buffer[-1]+2)
level = 0
while level <= rows:
outer_padding = ' '*(rows - abs(height))
if height == 0:
print(outer_padding + '*')
else:
inner_padding = ' '*( inner_buffer[ abs(height) ] )
print(outer_padding + '*' + inner_padding + '*')
height += 1
level += 1
お知らせ下さい :)