2017-10-26 3 views
1

文字列として回文をとり、それを特定の視覚的表現で表示する再帰関数を書きたいと思っていました(写真参照)。誰も私はどのように印刷された行の先頭にスペースを含めることができますので、プリントアウト全体が "ミラー化"されているか教えてください。私のものは完全に歪んでいる。 私に手伝ってくれてありがとう!回帰関数を持つ回文の視覚的表現を印刷するにはどうすればよいですか?

これは私のプリントが

This is how my print looks like

のように見え、これは私はそれが

And this is what I want it to look like

ように見えるしたいのか。これは、プリントアウトから私のコードである方法です:

def print_palindrome(p): 
    if len(p) <= 1: 
     print(p) 
    else: 
     print(len(p)*" " + p[0] + len(p)*" " + p[-1]) 
     return print_palindrome(p[1:-1]) 

print_palindrome("murder for a jar of red rum") 
+0

問題は、あなたが行の先頭にスペースが間違った番号を印刷するように、pはrecussive呼び出しに短くなるということです。

はここにあなたのコードに私の修正です。最初の 'len(p)*" "を'(40-len(p)/ 2)*に変更することができます。 "" '40は定数で、ページ幅の半分、文字列。 – Jasen

+0

提案をありがとう!私はちょうどそれを試して、私に次のエラーメッセージが表示されます:TypeError: '浮動小数点型'の非intでシーケンスを掛けることができません...他のアイデア? – NiJo

答えて

0

あなたがどのラインに入っているかを示すために再帰的な関数のカウンタを使用します。

def print_palindrome(p): 
    print_palindrome_rec(p, 0) 

def print_palindrome_rec(p, i): 
    if len(p) <= 1: 
     print(i*" " + p) 
    else: 
     print(i*" " + p[0] + (len(p)-2)*" " + p[-1]) 
     print_palindrome_rec(p[1:-1], i+1) 

print_palindrome("murder for a jar of red rum") 
+0

パーフェクト、それは動作します。ありがとう、gonutz! – NiJo

関連する問題