2

私は次のような結果になるプログラムを書くことになっています:

*     *
 *   *
  * *
   *

通常のコードを作成しましたが、スペースを組み込む方法がわかりません。

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

アドバイス?

4

4 に答える 4

2

行内のいくつかの領域にラベルを付けましょう:

startSpaces   *   middleSpaces   *   endSpaces

特定の行について、startSpaces+ 1 + middleSpaces+ 1 +endSpacesを定数に等しくしたい。この定数は2*(i+t) + 1

行 1t=0の前にスペースがあり*
、最後の行の前t=iにスペースがあります*(ここでは元iの を使用していますが、再帰によって変更されることがわかっています)

startSpacesのパターンを見つけることができますか?それで適切なパターンが得middleSpacesられendSpacesますか?

行を1つだけで処理できるようにするには、追加のelse ifケースが必要になることに注意してくださいi==1*


これは、問題の解決に大きく近づくのに十分なはずです。宿題だと思いますので、解決しません。行き詰まった場合は、さらに手がかりを求めてください。

于 2013-05-03T22:42:57.887 に答える
2

@kharaziの答えに基づいて構築します(これは、子供の頃のプログラミングに興奮した初期のGWBasicプログラミングを思い出させるためです):

def triangle(i, leftShape='*', rightShape='*', bottomShape='*', spaceShape=' ', t = 0):
    if i <= 0:
        print ((t+1)*spaceShape)+bottomShape+((t+1)*spaceShape)
    else:
        print (spaceShape*(t + 1))+leftShape+(spaceShape*(i*2-1))+rightShape+(spaceShape*(t + 1))
        triangle(i-1, leftShape, rightShape, bottomShape, spaceShape, t+1)

if __name__== '__main__':
    triangle(3)
    triangle(3, '\\', '/')
    triangle(3, '\\', '/', '~')
    triangle(5, '╚╗', '╔╝', '╚╦╝')
    triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
    triangle(-2)

次の出力が生成されます。

triangle(3)
 *     *
  *   *
   * *
    *

triangle(3, '\\', '/')
 \     /
  \   /
   \ /
    *

triangle(3, '\\', '/', '~')
 \     /
  \   /
   \ /
    ~

triangle(5, '╚╗', '╔╝', '╚╦╝')
 ╚╗         ╔╝
  ╚╗       ╔╝
   ╚╗     ╔╝
    ╚╗   ╔╝
     ╚╗ ╔╝
      ╚╦╝

triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
|╚╗|||||||||╔╝|
||╚╗|||||||╔╝||
|||╚╗|||||╔╝|||
||||╚╗|||╔╝||||
|||||╚╗|╔╝|||||
||||||╚╦╝||||||

triangle(-2)
 *
于 2013-05-04T00:05:45.453 に答える
2

試す:

def triangle(i, t = 0):
    if i == 0:
        print (t+1) *' '+ '*'

    else:
        print ' ' * (t + 1)+ '*' + ' ' * (i * 2 - 1) + '*'
        triangle(i - 1, t + 1)

triangle(5)

このコードは次のように表示されます:

 *         *
  *       *
   *     *
    *   *
     * *
      *
于 2013-05-03T23:13:29.003 に答える
1

これには for ループを使用する必要があります。再帰は機能しますが、常に使用するのは最善の方法ではありません。これは私がしたことです:

def GioTri(i):

foo = i - 1
bar = 0

for i in range(i-1):


    print ' ' * bar + "*" + " " * (foo*2 - 1) + "*" + " " * bar
    foo = foo - 1
    bar = bar + 1


print " " * bar + "*" + " " * bar 

この結果は次のようになります。

*     *
 *   * 
  * *  
   *   
于 2013-05-04T00:58:54.017 に答える