1

整数を取り、その数の行からなるアスタリスク三角形を返す再帰関数を作成する必要があります。asterisk_triangle

例として、これは 4 行のアスタリスク三角形です。

     *
    **
   ***
  ****

私はこの機能を試しました:

def asterix_triangle(depth):
            rows = [ (depth-i)*' ' + i*2*'*' + '*'   for i in range(depth-1) ]
            for i in rows:
            print i

そして、次の機能:

def asterisk_triangle(rows=n):
    pyramid_width = n * 2
    for asterisks in range(1, pyramid_width, 2):
        print("{0:^{1}}".format("*" * asterisks, pyramid_width))

そして、どちらも機能しませんでした。関数をテストするために作成することになっていtests.pyますが、たとえばエラーが発生します

Traceback (most recent call last):
  File "C:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05 _test.py", line 19, in <module>
    from lab05 import *
  File "C:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05.py", line 22
    print i
        ^
4

3 に答える 3

3

ブロック内のすべてのステートメントは、ブロックの先頭から少なくとも 1 つのスペースでインデントする必要があります。コード内の print ステートメントは、forそれが含まれているブロックに対してインデントされていないため、エラーが発生します。

これを試して:

def asterix_triangle(depth):
        rows = [ (depth-i)*' ' + i*'*' + '*'   for i in range(depth) ]
        for i in rows:
            print i

どちらが得られますか:

>>> asterix_triangle(4)
    *
   **
  ***
 ****

編集:

あなたの希望する出力は、三角形の両方の半分を持つことであることに気付きました。その場合は、文字列の右側に同じものを追加して、文字列をミラーリングします。

def asterix_triangle(depth):
        rows = [ (depth-i)*' ' + i*'*' + '*' + i*'*'  for i in range(depth) ]
        for j in rows:
            print j

出力:

>>> asterix_triangle(4)
    *
   ***
  *****
 *******
于 2013-03-21T22:36:17.913 に答える
2

ピラミッドを再帰的に行う必要がある場合は、おそらく次のようなことを行う必要があります。

def asterix_triangle(i, t=0):
    if i == 0:
        return 0
    else:
        print ' ' * ( i + 1 ) + '*' * ( t * 2 + 1)
        return asterix_triangle(i-1, t + 1)

asterix_triangle(5)

アイデアは、2 つの変数を使用することです。i関数が呼び出されるたびに1回減算され、サイクルを終了するために使用されます。もう 1 つの変数は、増分を増加させるために使用されます。次に、 を使用iして、スペースtの数と星の数を出力します。

出力は次のようになります。

      *
     ***
    *****
   *******
  *********
于 2013-03-21T22:33:54.920 に答える