1

ユーザーから一連の有効な入力を取得し、ネストされたループを使用して逆三角形を描画するプログラムを作成する必要があります。

私はなんとか三角形を解くことができましたが、逆三角形に苦労しています。*行の長さを使用せずに*の単一の文字を印刷するだけで逆三角形を描画する方法について誰かが私にヒントを与えることができますか?

グローバル定数

L = 10

行番号を取得する

rows = int(input ( 'Enter a number of rows: ' ) )

行は10未満または100を超えることはできません

while rows < 10 or rows > 100:
    if rows < L:
        print( 'The number is too Low.' )
    else:
        print( 'The number is too high.' )
    rows = int(input ( 'Enter the correct value: ' ) )

三角形を表示する

for r in range(rows):
    for c in range(r + 1):
        print('*', end='')
print()
4

1 に答える 1

1

これは、クラスで一度やらなければならなかった質問と非常に似ていますが、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

お知らせ下さい :)

于 2013-03-26T08:54:17.683 に答える