codecademy Practice使完美的digit_sum

时间:2016-06-21 15:34:13

标签: python

目的是编写一个名为digit_sum的函数,该函数将正整数n作为输入,并返回所有该数字的总和。

例如:digit_sum(1234)应返回10,即1 + 2 + 3 + 4.

(假设你给出的数字总是正数。)

https://www.codecademy.com/zh/courses/python-intermediate-en-rCQKw/0/4?curriculum_id=4f89dab3d788890003000096#

您的函数在digit_sum(1000)上失败。当它应该返回1时返回12.

如果我将dig = []置于def digit_sum上,则该过程发生了警告:" digit_sum(1000)结果为12而不是1" ,但我在我当地的记事本+ powershell上运行了这个程序,没关系,结果是对的。

之后我把dig = []放到第一行函数中,然后它正常工作。

我没有得到2分......

  1. " dig = []"之间的区别是什么?功能内/外
  2. 如果" dig = []"在函数外部是错误的,为什么我可以在我的本地成功运行....?
  3. 感谢大家帮助我......

    dig=[]
    def digit_sum(n):
        u=str(n)
        for i in u:
            dig.append(i)
            s=0
            for number in dig:
                int(number)
                s=s+int(number)
        return s
    

4 个答案:

答案 0 :(得分:1)

因此内部/外部之间的差异是 locality 。当您将dig放在外面时,您将创建一个全局列表。从那里,你经常追加到那个 - 列表永远不会被清除!因此,如果我运行digit_sum(1234),我会正确地获得10.如果我此后立即运行digit_sum(1000)dig==['1','2','3','4','1','0','0','0'],那么这将添加所有这些并且陷入困境。

如果您在函数中执行dig = [] ,它会创建一个新的本地列表 - 每次都不会更改它,它会&#39 ;每个轮换的新空列表。

你有时正确地获得它的原因是因为该功能具有副作用,因此呼叫顺序和呼叫历史很重要。尽量避免功能的副作用 - 要么不改变列表,要么复制列表>如果要分配新列表(或只是使用新列表,请更改副本> return副本。)

答案 1 :(得分:1)

def digit_sum(n):
  n = str(n)
  total = 0
  for i in n:
    total += int(i)
  return total

答案 2 :(得分:0)

类似的东西:

def digit_sum(n):
    dig=0 # this is the result os the sum
    number=str(n) #transform the number into string so we can iterate 
    for i in range(len(number)):
        dig=dig+int(number[i]) #transform the char to int
    return dig #return the sum

我取数字(例如123)并将其转换为字符串,这样我就可以得到字符串的长度(数字的数字)。然后我只需添加它们(在将它们转换为整数后)并返回结果

dig=[]表示您声明的数组变量不是您想要的。如果在函数中声明它意味着当函数结束时,变量"消失了#34;,你将无法回调它。它只存在于函数中。如果它在函数之前,则变量存在于程序的末尾。

你的aptenpt是不正确的。您希望使用数字填充数组,然后将它们相加。实际上,当您为数组dig分配一个数字时,您正在求和。例如,123将总和:1然后1 + 2然后1 + 2 + 3

答案 3 :(得分:0)

之前的回答没问题。 只是为了集中注意力,以便您可以避免将来出现错误: 当你写:

u=str(n)
    for i in u:
        dig.append(i)

你不要将数字的数字附加到挖掘中。相反,你添加数字0,1,2,3 ......等等。确切地说,这些数字可能是。因为For循环从字符串的开头到结尾迭代,列表等,而单词For之后的变量只是一个计数器 - 从0开始到结束于对象的结尾。 这就是为什么Hearner的答案是正确的: 数字[i]的总和不是i。

for i in range(len(number)):
    dig=dig+int(number[i])