【问题标题】:Sum of the digits [closed]数字总和[关闭]
【发布时间】:2020-10-17 05:46:36
【问题描述】:

我想得到一个整数的位数之和,并找到了以下解决方案:

  1. sum(map(int,list(str(123))))

  2. sum(int(digit) for digit in str(123))

但是,当我运行它时,我收到以下错误:

TypeError: 'int' 对象不可调用

【问题讨论】:

  • 您是否将名称sum 设置为整数?
  • @khelwood:或者str,或者,在前一个例子中,list。关键是,这显然是一个名字阴影冲突;不要将变量命名为与内置变量相同的名称。如果这是一个您不想重新启动的交互式会话,请运行 del sumdel listdel str(忽略任何错误),您的代码应该可以正常工作。

标签: python python-3.x sum int typeerror


【解决方案1】:

与其他答案相反,您的代码都可以正常工作。

我认为您在代码中隐藏了某些内容。也许您使用了int 作为变量?

【讨论】:

    【解决方案2】:

    sum() 适用于可迭代对象。

    int(digit) for digit in str(123)
    

    这会返回一个生成器,并且应该可以正常工作,正如其他答案所说,看看这个answer

    下面也应该做这项工作:

    sum([int(digit) for digit in '123'])
    

    希望这会有所帮助!

    【讨论】:

    • sum(int(digit) for digit in str(123)) 是按预期工作的有效 Python。如果您的函数只有一个参数,那么您不需要使用圆括号/圆括号来编写生成器表达式。更多详情请查看PEP 289
    • 已编辑。我的错。
    【解决方案3】:
    sum(int(digit) for digit in str(123))
    

    上面的代码应该可以工作。

    但是你说你得到了错误,

    TypeError: 'int' 对象不可调用

    该错误表明您使用的是 int 而不是 str . 您是否为此使用了另一个变量? 例如,下面的代码应该会给你你提到的那个错误

    obj = 123
    sum(int(digit) for digit in obj)
    

    您必须确保obj 属于str 类型。

    【讨论】:

      【解决方案4】:

      sum() 在可迭代对象中工作。您需要创建一个包含您尝试添加的数字的列表。下面的代码应该做到这一点:

      sum([int(x) for x in str(123)])
      

      【讨论】:

      • sum(int(digit) for digit in str(123)) 是按预期工作的有效 Python。如果您的函数只有一个参数,那么您不需要使用圆括号/圆括号来编写生成器表达式。查看PEP 289了解更多详情。
      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      相关资源
      最近更新 更多