【问题标题】:invalid literal for int() with base 10: '(1 + 1)(1 + 1)'基数为 10 的 int() 的无效文字:'(1 + 1)(1 + 1)'
【发布时间】:2017-08-05 01:40:02
【问题描述】:

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

这是我的代码:

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) 的输入,输出应为 '((1 + 1)(1 + 1))'

【问题讨论】:

  • int 不会评估您在字符串中写入的内容,它只是尝试将其转换为 int 而不进行任何其他操作。如果您想要做的就像您在那里展示的那样简单,那么使用 eval 函数可能是一种方法,即使通常不建议使用它 - 我不知道为什么,欢迎任何人澄清.
  • sum_power2(3) 应该返回什么?
  • @PM2Ring 抱歉回复晚了,但我不能确切地告诉你 sum_power2(3) 应该返回什么,因为括号的数量让我感到困惑,但我可以告诉你 sum_power2(4) 返回正好 '((((1+1)+(1+1))+((1+1)+(1+1)))+(((1+1)+(1+1))+(( 1+1)+(1+1))))'

标签: python string recursion error-handling int


【解决方案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 )

打印 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)
>>> 

【讨论】:

  • 这对所有事情都非常有效,但是 0。如果 n_int == 0 它应该返回 '1' 但使用你的代码,如果返回 '1' 则 sum_power2( 2 ) 的输出是 '( 1 + 1)(1 + 1)1'
  • 关闭,但你需要为 0 的 arg 返回 '1'。你可以摆脱 n_int 的东西,这只是因为 OP 对如何解决问题感到困惑。你可以假设 n 是一个 int。
  • 修复它的简单方法是有两个基本情况,1 和 0。
  • 是的,注意到了——离开了几米,看起来有人打了我。没问题,工作至上。
  • @Anil_M 很接近了!您的代码为输入 sum_power2(2) 返回 '(1+1) + (1+1)',但它应该返回 '((1 + 1)(1 + 1))'
【解决方案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 ,所以我省略了转换)

【讨论】:

  • 这可以正常工作,但有一个小问题也许你可以帮助我。 sum_power2(2) 的输入返回 '(1+1)(1+1)' 但期望 '((1+1)+(1+1))'
  • 看起来 OP 想要额外的括号......或者更多。
  • sum_power(3) 返回((1+1)(1+1)(1+1)) 还是((1+1)((1+1)(1+1)))
  • @HalfTau 有点混乱,但是 sum_power(3) 应该返回 (((1+1)+(1+1))+((1+1)+(1+1))) +(((1+1)+(1+1)))
  • @beginner_coder 嗯?那么为什么sum_power2(2) 应该返回'((1 + 1)(1 + 1))',而不是'((1 + 1)+(1 + 1))'
【解决方案3】:
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)' )

【讨论】:

  • 谢谢,但重点是我应该使用递归函数!
  • 不能使用递归函数,因为当n_int = int( n )'(1 + 1)'值时,你不能将它转换为int。
  • 在我转换它之前,虽然我会得到错误“不能将序列乘以'str'类型的非整数”
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2016-04-18
  • 2020-11-21
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多