2015-04-06 82 views
1

我想創建簡單的代碼來測試數字是奇數還是偶數。 我正在使用Python 2.7.3Python Modulo TypeError

def oddoreven(a): 
    try: int(a) 
    except: return "Error" 
    if a%2==0: return 1 
    else: return 0 

不是代碼失敗,錯誤:TypeError: not all arguments converted during string formatting.錯誤指向具有if a%2==0...開頭的行。

在研究這個問題時,我發現了一些例子,指出這樣的代碼應該可以工作。例如對這個問題的答案提供了與解決方案類似的代碼:python - checking odd/even numbers and changing outputs on number size

那麼我的代碼出了什麼問題?

+2

'INT(一)'沒有做任何事情來'了'。 – user2357112

回答

3

這是因爲你第一次測試,如果a可以轉換爲int(這很好),但是你忽略了這個測試並繼續使用你在參數中提供的string

Python是一種動態類型語言,也強類型,這意味着你可以改變一個變量的類型,它已經宣佈後,但這種變化必須是明確的(more about this here)。

對你而言,這意味着你不能做if a % 2 == 0如果a是一個字符串。

你可以例如這樣做:

def oddoreven(a): 
    try: 
     my_int = int(a) 
    except TypeError: 
     return "The argument provided could not be converted into an int" 
    if my_int % 2 == 0: 
     return 1 
    else: 
     return 0 
1

如user2357112所述。 (int)a不會將a轉換爲int。所以當你檢查它的模量時,你仍然必須轉換它。

def oddoreven(a): 
    try: int(a) 
    except: return "Error" 
    if int(a)%2==0: return 1 
    else: return 0 

print oddoreven(32) 

工作正常。

作爲一個方面說明,捕捉任何例外通常是不滿意的。您可能希望縮小範圍,如:

def oddoreven(a): 
    try: int(a) 
    except TypeError: return "Error" 
    if int(a)%2==0: return 1 
    else: return 0 

print oddoreven(32) 
3

int功能不會改變,地方的a,你需要將其分配給a

>>> def oddoreven(a): 
...  try: a=int(a) 
...  except: return "Error" 
...  if a%2==0: return 1 
...  else: return 0 
... 
>>> oddoreven('2') 
1 
>>> oddoreven('5') 
0 
>>> oddoreven('a') 
'Error'