我正在使用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))
答案 0 :(得分:0)
您的代码无效,因为您返回得太早了。
return关键字接受您提供的所有内容,并将其返回给函数的调用者。
在for循环的第一次迭代中,您要计算第一个数字的总和,然后将其返回。
EG: 数字是1234
所以for循环正在“ 1234”上迭代
所以“ 1234”的第一位是“ 1”
然后,您取1的总和(大声笑)
所以您将返回数字1
答案 1 :(得分:0)
在循环结束之前,您用return
中断了for循环。您需要存储累积和,然后在循环结束后返回它。
此外,您需要了解什么是Python中的“循环单线”。
让我们看看return
在您的第一段代码中是什么意思:
(sum(int(digit) for digit in str(number)))
我们可以将此行分为多个步骤:
此步骤可以这样完成
def get_digits_as_string(num):
return [digit for digit in str(num)]
运行上面的功能,您可以看到
>>> get_digits_as_string(12345)
['1', '2', '3', '4', '5']
我们只需将数组中的单个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]
int
的数组求和这等效于您的第一段代码
def digit_sum(num):
return sum([int(digit) for digit in str(num)])
如果您想了解更多有关Single Line for Loops的信息,请点击这里。 https://blog.teamtreehouse.com/python-single-line-loops
希望我的回答有帮助。