2017-05-01 4 views
0

私は再帰的な三角形の割り当てのためにこのコードを書いています。私は、コードを調整して新しい文字列を1つの文字列に変換するという課題に取り組んできました。私はそれを返すために取得したいと思い再帰的python三角形が新しい行で結合されました

def triangle(n): 
    if n <= 0: 
     return "" 
    p = triangle(n-1) 
    p = p + "*" 
    print(p) 
    return p 

triangle(5) 

"* \ nは** \ nは*** \ nは**** \ nは*****"

私は持っています私が必要とする変更を行うのは苦労します。

+0

'\ n'をそのまままたは改行して印刷しますか? –

答えて

0

Pythonで文字列を掛けることができます(繰り返し連結)。

def triangle(n): 
    return '\n'.join(['*'*i for i in range(1,n+1)]) 
+0

私の答えはあなたの変更に影響を受けています^ _ ^素敵な仕事 – naomik

1

文字列を返すだけの場合は、関数からprint呼び出しを削除する必要があります。余談として、一般的に再帰関数を書くとき、あなたは/文字列の末尾に\n

def triangle (n): 
    if n == 0: 
    return "" 
    else: 
    return triangle (n - 1) + ("*" * n) + "\n" 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# ***** 
# 

これは結果んが、しかし、変数の再割り当てを避ける必要がありますすることができます。あなたはこれを避けるしたい場合n == 1

def triangle (n): 
    if n == 0: 
    return "" 
    elif n == 1: 
    return "*" 
    else: 
    return triangle (n - 1) + "\n" + ("*" * n) 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# *****   

は、そうでない場合は、別の方法は、三角形の行のリストを作成し、各列の間に改行を挿入するために"\n".joinを使用するときは、追加のケースを記述する必要があります

def triangle (n): 
    def aux (acc, n): 
    if n == 0: 
     return acc 
    else: 
     return aux (["*" * n] + acc, n - 1) 
    return "\n".join(aux([], n)) 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# ***** 
+0

ありがとうございました。私は補助ヘルパーについていくつかの読書をしなければならないように見える。 – wazawai

+0

@wazawaiそれは非常に一般的なものです。単純に言えば、*補助*関数は、特定のタスクを完了するために別の関数によってのみ使用される関数です。ユーザーが補助関数を手動で呼び出すことは望ましくありません。 'aux'は' triangle'の* inside *で定義されているので、 'triangle'だけがそれを使うためのアクセス権を持っています – naomik

関連する問題