1

以下の再帰コードについて助けが必要です。コードは、すべての n に対して * の後に i を出力することを想定しています。基本ケースが正しくない可能性があり、それが出力の文字列引用符の原因である可能性があることに気付きましたが、基本ケースを 0 または n を返すように設定しようとすると、整数を変換できないというエラーが表示されます。文字列を暗黙的に指定します。

def printPattern(n):  

    if n == 0:
        return('')
    else:
        return('*' + printPattern(n-1) + 'i')

私の出力:

>>> printPattern(3)  
'***iii'

必要な出力 (文字列引用符なし):

>>> printPattern(3)  
***iii

何か案は?ここで間違ったロジックを使用していますか? コードで別のパスを使用する必要がありますか、それとも出力をフォーマットして文字列の引用符を削除できますか?

4

2 に答える 2

2

関数は文字列を作成して返しています。対話型シェルで実行して関数を呼び出すと、Python はrepr要素の表現 ( ) を出力します。文字列の場合、repr引用符が含まれます。

結果を出すしかありませんprint

代わりに、関数で印刷を行いたい場合は、関数を変更する必要があります。最も簡単な方法は、内部のプライベート関数を使用して文字列を作成し、最後に print ステートメントを使用することです。

def printPattern(n):
    def buildPattern(n):
        if n == 0:
            return('')
        else:
            return('*' + buildPattern(n-1) + 'i')
    print(buildPattern(n))

ところで、Python は再帰呼び出しを最適化せず、再帰制限がかなり低いため、おそらくその関数に再帰を使用したくないでしょう (呼び出しスタックはデフォルトで 1000 程度の高さに制限されています)。

于 2013-02-15T09:31:31.870 に答える
2

対話型シェルが型を表示しているため、引用符が表示される可能性がありますstr。試す

>>> print printPattern(3)

これは、パターンを返すだけでなく、実際にパターンを出力print(printPattern(3))します (または、python 3 では関数として使用します)。

于 2013-02-15T09:30:01.010 に答える