【问题标题】:Sum of Digits in an Integer?整数中的数字总和?
【发布时间】:2019-01-27 18:03:19
【问题描述】:

我正在使用 Python 进行作业,但不理解我的代码存在的问题。

根据 Stack Overflow 上的其他答案,答案似乎是:

def digit_sum(number):

    return (sum(int(digit) for digit in str(number)))

我的代码(如下)不起作用。为什么不呢?

def digit_sum(number):
    for digit in str(number): 
        return sum(int(digit))

【问题讨论】:

  • 当你给它return关键字时,函数的标准行为是什么?
  • 第一个版本首先将所有单个数字转换为整数类型,然后求和。而在第二个版本中,您将 return 语句放在 for 循环中。因此,一旦您将第一个数字转换为整数,您的函数就会将控件返回到进行函数调用的位置。

标签: python loops sum integer digits


【解决方案1】:

在循环结束之前,您使用 return 打破了 for 循环。您需要存储累计和,然后在循环结束后返回。

此外,您需要了解 Python 中的“单行循环”是什么。 让我们看看你的第一个代码块中的return 是什么意思:

(sum(int(digit) for digit in str(number)))

我们可以把这条线分成多个步骤:

1 以字符串形式获取数字数组

这一步可以这样完成

def get_digits_as_string(num):
    return [digit for digit in str(num)]

运行上面的函数就可以看到

>>> get_digits_as_string(12345)
['1', '2', '3', '4', '5']

2 将字符串数组转换成整数数组(也是一行)

我们只需将数组中的单个 string 元素键入 int

def get_digits_as_int(num):
    return [int(digit) for digit in str(num)]

如果你运行它,你会得到:

>>> get_digits_as_int(12345)
[1, 2, 3, 4, 5]

3 对int的数组求和

这相当于你的第一个代码块

def digit_sum(num):
    return sum([int(digit) for digit in str(num)])

如果您想了解更多关于单行循环的信息,这里有一篇很有帮助的帖子: https://blog.teamtreehouse.com/python-single-line-loops

希望我的回答有帮助。

【讨论】:

    【解决方案2】:

    您的代码不起作用,因为您返回得太早了。

    return 关键字接受你给它的任何东西并将它返回给函数的调用者。

    在 for 循环的第一次迭代中,您计算​​第一个数字的总和,然后返回它。

    例如: 编号为 1234

    所以 for 循环正在迭代“1234”

    所以“1234”的第一个数字是“1”

    然后你取 1 的总和(不管这意味着什么,哈哈)

    所以你会返回数字 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      相关资源
      最近更新 更多