bugfix> python > 投稿

Iv`eは、2つのforループのみを使用して、Pythonで次のピラミッドを作成するように求められました。

1

2 4

3 6 9

4 8 12 16

5 10 15 20 25

6 12 18 24 30 36

7 14 21 28 35 42 49

8 16 24 32 40 48 56 64

9 18 27 36 45 54 63 72 81

私のプログラムと同じように2つのforループのみを使用するより短い方法はありますか?

for x in range(1, 10):
    for y in range(0, 1):
        print ('1')
    print("2 4")
    for u in range(1, 2):
        for v in range(0,1):
            print("3 6 9")
        print("4 8 12 16")
    for t in range(1, 2):
        for s in range(0, 1):
            print("5 10 15 20 25")
    print("6 12 18 24 30 36")
    for r in range(1, 2):
        for q in range(0, 1):
            print("7 14 21 28 35 42 49")
    print("8 16 24 32 40 48 56 64")
    for p in range(0,1):
        print("9 18 27 36 45 54 63 72 81")

回答 3 件
  • これをもっとコードレビューするつもりです...

    最初の行 for x in range(1,10):  コードのシーケンスを9回(10-1)繰り返すループを作成することを示しています。

    プログラミングでは、 range(1,10) と言う代わりに、カウントは0から始まります。 、あなたは range(0,9) と言うことができます  またはさらに range(9)

    これにより、読みやすくなります(10-1を計算するよりも9を速く読みます)

    このメインループ内に、多くのforループを追加しました... for y in range(1,2): 。これは、2-1が1であるため、1回インデントされたコードを反復処理することを意味します。したがって、このforループは無関係であり、単に print('1') を使用できます。 。

    上記を考慮してコードを簡素化すると、次のようになります。

    for x in range(9):
        print("1")
        print("2 4")
        print("3 6 9")
        print("4 8 12 16")
        print("5 10 15 20 25")
        print("6 12 18 24 30 36")
        print("7 14 21 28 35 42 49")
        print("8 16 24 32 40 48 56 64")
        print("9 18 27 36 45 54 63 72 81")
    
    

    それはすでにはるかに良くて読みやすいものではありません。これをpythonに入力すると、与えたコードと同じ結果が生成されます。これは計算上は同じであるためですが、メソッドには上記のような不要なステップがあります。

    これをさらに一歩進めて.. コードはこの「ピラミッド」を9回印刷します。このピラミッドを一度印刷したいと思うので、最初のforループを削除する必要があります。 forループにしたいのは、印刷されるものです。その背後にあるパターン、リレーションシップがあるため、これを行うためのforループを作成できます。これは、より一般的な場合のユーザビリティを作成するのにも役立ちます。 (つまり、9、18、27までこれを行う代わりに、n * 1、n * 2、n * 3 [ループの対象のチェックヒント]まで行うことができます)。

    これがお役に立てば幸いです。わからないことがあればコメントしてください!

    編集: 私はランダムなコーディングをしていましたが、同じ結果を作成する非常にきちんとした方法を見つけました(かなり混乱していますが)、ただ共有したいだけです...

    for k in [[(j+1)*i for j in range(i)] for i in range(1,11)]:
        print k
    
    

  • for i in range(1,10):
        for j in range (1,i+1):
            print(i*j)
    
    

    ただし、これによりすべての数値が新しい行に出力されます。すべてを同じ行に保持し、リストなどを印刷したくない場合は、代わりに文字列に追加します。

    for i in range(1,10):
        x = ''
        for j in range(1,i+1)
            x=x+str(i*j)+' ' 
        print(x.strip())
    
    

  • 4行、本当に:

    for x in range(1, 10):
        for y in range(x, x ** 2 + 1, x):
            print (y, end = ' ')
        print('\n')
    
    

    これは start を利用します 、 stop  および step  パラメータを生成します:

    1 
    2 4 
    3 6 9 
    4 8 12 16 
    5 10 15 20 25 
    6 12 18 24 30 36 
    7 14 21 28 35 42 49 
    8 16 24 32 40 48 56 64 
    9 18 27 36 45 54 63 72 81
    
    

    余分な改行を削除するには、 print('\n') を変更するだけです   print() への声明 。

あなたの答え