int()的基数为10的无效文字:'(1 + 1)(1 + 1)'

时间:2017-03-14 15:56:34

标签: python string recursion error-handling int

我正在编写一个递归函数,它将一个数字作为输入并根据输入返回一个字符串。

这是我的代码:

def sum_power2( n ): 

    n_int = int( n )

    if n_int == 0:

        return '1'

    else:

        return sum_power2( n_int * '(1 + 1)' )

最初代码导致错误代码为

    can't multiply sequence by non-int of type 'str'

当n未转换为' int'现在我收到了这个错误代码。请帮我解决一下,谢谢!

输入 sum_power2(2)输出应为&#39;((1 + 1)(1 + 1))&#39; < / p>

3 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,你想要sum_power2(n)返回n个字符串的副本(1 + 1),是吗?

在这种情况下,对于n> 1,递归方式是将字符串(1 + 1)附加到sum_power2(n-1)的输出。 (这需要一个特殊情况,当n = 0时只给1)

看起来像这样:

def sum_power2(n):
  if n == 0:
    return "1"
  elif n == 1:
    return "(1 + 1)"
  else:
    return sum_power2(n-1) + "(1 + 1)"

(另外,看起来你的论证是一个int,所以我省略了转换)

答案 1 :(得分:1)

您的主要问题是,您尝试将intstring组合投放到期望int的递归函数。 要使递归函数起作用,您需要将原始问题减少到基本情况和退出 我只是将 n 简化为 1 并退出并连接我们的结果,以便在遇到基本情况时返回。

如果您正在寻找,请告诉我。

**编辑**
工作代码: def sum_power2(n):

n_int = int( n )

if n_int == 0:
    return '1'
elif n_int == 1:
    return '(1 + 1)'
else:
    return '(1 + 1)' + sum_power2( n_int - 1 )

print sum_power2(2)

<强>结果:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
1
(1 + 1)
(1 + 1)(1 + 1)
(1 + 1)(1 + 1)(1 + 1)
>>> 

答案 2 :(得分:0)

def sum_power2( n ): 
    n_int = int( n )
    if n_int == 0:
        return '1'
    else:
        return n_int * '(1 + 1)'

>>> sum_power2(2) '(1 + 1)(1 + 1)'

您的错误发生是因为您致电sum_power2( n_int * '(1 + 1)' )