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

您可能看到引号只是因为交互式 shell 向您显示了一个str类型的东西。尝试

>>> print printPattern(3)

它实际上将打印模式,而不仅仅是返回它(或者,在 python 3 中,print(printPattern(3))用作函数)。

于 2013-02-15T09:30:01.010 回答
2

您的函数正在构建一个字符串并返回它。当在交互式 shell 中运行并调用函数时,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 不优化递归调用,并且递归限制非常低(调用堆栈默认限制为一千左右的高度)。

于 2013-02-15T09:31:31.870 回答