2014-11-02 56 views
-1

來總結一個字符串的數字我看過這個問題,但是我嘗試了其他的方法來運行這個失敗的程序,幫助我弄清楚爲什麼我的方法是錯誤的。使用類型(int)

def sumDigits(s): 
     """Assumes s is string. If s is 'a2b3dc' it return 5""" 
     a=0 
     for i in string: 
      if type(i) == int: 
        a=a+1 
     return a 

sumDigits('ab23sdf'); 

此方法返回零。爲什麼?

+1

由於未定義局部變量'string',因此您應該得到'NameError'。另外,您不需要分號來結束Python語句。 – 2014-11-02 06:31:45

+0

使用'a = a + int(i)'。那麼它將返回5 – Hackaholic 2014-11-02 06:37:31

+0

你想要* count *的數字(因爲你使用'a = a + 1'建議,或* sum *的數字(因爲你的函數的名字暗示)? – 2014-11-02 06:41:33

回答

0

改爲使用isdigit。

i.isdigit() 

當你遍歷你也可以得到一個字符串的字符串,你需要檢查,如果給定chararacter是一個數字。

其次字符串變量是未定義的,您應該使用s代替。

0

"2"仍然是一個字符串,而不是一個整數:

>>> type("2") 
<class 'str'> 
>>> type(2) 
<class 'int'> 

使用isdigit()代替:

>>> "2".isdigit() 
True 

然後,你需要在「數字」轉換爲實際的整數,然後才能將它們添加:

def sumdigits(s): 
    return sum(int(c) for c in s if c.isdigit()) 
0

首先,字符串應該設置爲s。接下來,該類型將始終是具有上述的字符串。嘗試使用ascii值代替。

0
sum(int(x) for x in 'ab23sdf' if x.isdigit()) 

輸出:

5 

我檢查x是數字或不使用isdigit,INT(X)將x轉換爲整數。總和功能會給你數字的總和。如果數字在分數中,則將int替換爲float

+0

您可以刪除不必要的列表理解,然後您的解決方案與我的相同... :) – 2014-11-02 06:42:36

+0

最好在這裏添加一個註釋,如果數字分數爲'ab2.5sd0.5f' - 這會給出12而不是3. – 2014-11-02 06:52:54

+0

如果數字在分數中需要使用浮點數 – Hackaholic 2014-11-02 06:53:53