2016-06-21 31 views
0

其目的是編寫一個名爲digit_sum的函數,它將一個正整數n作爲輸入並返回所有該數字的數字之和。codecademy Practice Practices Perfect digit_sum

例如: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)上失敗。它返回12時,它應該返回1.

如果我把dig = []上高清數字__sum,課程發生「digit_sum(1000)結果是12而不是1」的報警,但我跑這個程序在我本地的記事本+ PowerShell中,沒關係,結果是正確的。

之後,我把dig = []放到函數的第一行,然後它正常工作。

我沒拿到2分....

  1. 什麼之間的區別 「挖= []」 內/外功能
  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 

回答

1

所以內部/外部的區別是地方。當您將放在外面時,您將創建一個全局列表。從那裏,你不斷追加到 - 清單永遠不會被清除!所以如果我運行digit_sum(1234),我可以正確地得到10.如果我立即運行digit_sum(1000),dig==['1','2','3','4','1','0','0','0']然後再添加所有這些並且搞亂。

如果你挖= [] 的功能,它會創建一個新,當地列表 - 它沒有被每一次改變,這是每旋轉1周新的空單。

你正確得到它的原因有時是因爲該函數有副作用,所以調用順序和調用歷史很重要。儘量避免功能的副作用 - 或者不要更改列表,或者複製列表>更改該副本>return複製副本,如果您要分配新列表(或只是使用新列表)。

+0

好的....我知道了......上次旋轉的結果將留在全局變量...........非常感謝! – NoDinner

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=[]表示您聲明的數組變量不是您想要的。如果在函數中聲明它,則意味着當函數結束時,變量「消失」,您將無法再回調它。它只會存在於函數中。如果它在函數之前,則該變量存在於程序的最後。

你的錯誤是不正確的。你想用數字填充你的數組,然後求和它們。事實上,當你給你的數組分配一個數字時,你正在求和。例123將總結:1然後1 + 2然後1 + 2 + 3

+0

因此,實際上,如果我把函數外掏,最後一次結果會留在挖吧? – NoDinner

+0

正是因爲在函數外聲明的變量不會在功能 – Hearner

+0

的結束而終止好的......完全理解...... thx這麼多人 – NoDinner

0

以前的答案是好的。 只是爲了focuse你的注意力,讓你可以在將來避免的錯誤: 當你寫:

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

你沒有數的數字追加到挖。相反,你可以添加數字0,1,2,3 ......等等。確切地說,他們可能是這個數字。因爲For循環從一個字符串的開始到結尾迭代,所以列表等等,而單詞For之後的變量只是一個計數器 - 從0開始到結束於對象結束。 這就是爲什麼Hearner的答案是正確的: 數字[i]的總和不是我的。

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

是的。非常感謝您耐心的回答......愉快的週末 – NoDinner