2016-03-06 37 views
2

任務是查找整數中的奇數個數。奇數位數python

count_odd_digits(n): 

給定一個非負整數,計算它的奇數個數。

例如:

count_odd_digits(123450) → 3 #digits 1,3, and 5 are odd 

我到目前爲止有:

def count_odd_digits(n): 

    ans = 0 
    for i in str(n):  
     if int(n) %2 == 1: 
      ans += 1 
     elif n[i]==0: 
      return None 

但我還是沒有我的測試中,什麼是我的代碼的問題呢?

+1

這聽起來像一個家庭作業問題。 –

+0

你正在做'int(n)'而不是'int(i)'。另外,你的'elif'語句是完整的,完全是無稽之談。 – TigerhawkT3

+0

爲了澄清,第一次代碼到達'elif',它會檢查'123450 ['2']'是否等於零。這就是單字母變量名稱被忽視的原因。 – TigerhawkT3

回答

5

你有幾個問題:

  • elif n[i] == 0: return None是完全無用的。你永遠不想返回None;你只是想繼續。既然你所做的一切都在繼續,它可以被刪除。

  • if int(n) % 2 == 1正在測試錯誤的東西。您要檢查int(i),而不是int(n)

更改碼本:

def count_odd_digits(n): 
    ans = 0 
    for i in str(n): 
     if int(i) % 2: 
      ans += 1 
    return ans 

這將是更容易使用的發電機表達式:

def count_odd_digits(n): 
    return sum(int(i) % 2 for i in str(n)) 
+1

或只是'sum(int(i)%2 for str in(n))' – Felk

+0

@Felk:很好的建議!我編輯過。 – zondo

+1

@zondo不錯。我來這裏是爲了「強制性的一班」。但我看到你在那裏。呵呵。 :) +1 – idjaw

1

更改INT(N)爲int(I)

def count_odd_digits(n): 
    ans = 0 
    for i in str(n):  
     if int(i) %2 == 1: 
      ans += 1 
    return ans 
+0

@ MSeifert對不起,如果你這麼認爲。但是,這根本不是故意的。我只是想給出最合適的答案。 – kartikmaji

1

return None部分將立刻終止你的函數。您也應該將i轉換爲integer而不是完整的字符串。

的工作函數看起來是這樣的:

def count_odd_digits(n): 
    ans = 0 
    for i in str(n):  
     if int(i) %2 == 1: 
      ans += 1 
     # drop the elif part 
    # return after the for loop 
    return ans 

count_odd_digits(123450) 
1

另一種解決方案是,以避免轉換爲字符串在所有,只使用整數:

def count_odd_digits(n): 
    ans = 0 
    while n: 
     digit = n % 10 
     if digit % 2: 
      ans += 1 
     n //= 10 
    return ans 
+1

此版本也適用於10以外的其他基地! – Felk