目的是编写一个名为digit_sum的函数,该函数将正整数n作为输入,并返回所有该数字的总和。
例如:digit_sum(1234)应返回10,即1 + 2 + 3 + 4.
(假设你给出的数字总是正数。)
您的函数在digit_sum(1000)上失败。当它应该返回1时返回12.
如果我将dig = []置于def digit_sum上,则该过程发生了警告:" digit_sum(1000)结果为12而不是1" ,但我在我当地的记事本+ powershell上运行了这个程序,没关系,结果是对的。
之后我把dig = []放到第一行函数中,然后它正常工作。
我没有得到2分......
感谢大家帮助我......
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
答案 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])