2016-08-17 7 views
0

このコードを単純化して効率を上げることができますか?私のようなものは最高のバージョンではないようです。私は何を改善することができますか?ピラミッド数字のパターンの種類

 1 
    232 
    34543 
    4567654 
567898765 
678901109876 

これは私が作ったコードです:すべての

c = -1 

for y in range(1, 7): 
    print() 
    print((6-y) * " ", end="") 
    c += 1 

    for x in range(1, y+1): 
     print(y%10, end="") 
     y += 1 

    while y - c > 2: 
     print(y-2, end="") 
     y -= 1 

答えて

0

まず、私はあなたが本当に10のY値を印刷したくなかったことを推測しています。ベース10のリダクションを0にしたかったということです。ピラミッドベースに余分な文字があることに注意してください。

Do ループ内にあるときにループパラメータの値を変更しないでください。具体的には、yループの内のyを変更しないでください。

c;他の値から派生させることができます。

柔軟性を得るには、1つの概念(行制限)に依存する2つの定数(6と7)があります。ここで

は私のバージョンです:

row_limit = 7 

for y in range(1, row_limit): 
    print() 
    print((row_limit-y-1) * " ", end="") 

    for x in range(y, 2*y): 
     print(x%10, end="") 

    for x in range(2*(y-1), y-1, -1): 
     print(x%10, end="") 

print() 

は出力:

 1 
    232 
    34543 
    4567654 
567898765 
67890109876 

あなたは本当に物事をプッシュしたい場合は、文字列の連結と理解してループを短くすることができますが、それはそう難しくなってあなたのために読む。

for y in range(1, row_limit): 
    print() 
    print((row_limit-y-1) * " " + ''.join([str(x%10) for x in range(y, 2*y)]) + \ 
       ''.join([str(x%10) for x in range(2*(y-1), y-1, -1)]), end="") 

print() 

など、リスト内包化されたループの各々は

そして
[str(x%10) for x in range(y, 2*y)] 

、文字のこのリストはない格子間文字で接合されています。これは行の半分を形成する。行の後半は他のループ(カウントダウン)です。このすべての前で、適切な数のスペースを連結します。

率直に言って、私は最初のフォームを好んでいます。

0

これは私の実装です。

パイソン2

def print_triangle(n): 
    for row_num in xrange(1, n + 1): 
     numbers = [str(num % 10) for num in xrange(row_num, 2 * row_num)] 
     num_string = ''.join(numbers + list(reversed(numbers))[1:]) 
     print '{}{}'.format(' ' * (n - row_num), num_string) 

パイソン3

def print_triangle(n): 
    for row_num in range(1, n + 1): 
     numbers = [str(num % 10) for num in range(row_num, 2 * row_num)] 
     num_string = ''.join(numbers + list(reversed(numbers))[1:]) 
     print('{}{}'.format(' ' * (n - row_num), num_string)) 

入力

print_triangle(5) 
print_triangle(6) 
print_triangle(7) 

出力

1 
    232 
    34543 
4567654 
567898765 
    1 
    232 
    34543 
    4567654 
567898765 
67890109876 
     1 
    232 
    34543 
    4567654 
    567898765 
67890109876 
789