2017-09-06 32 views
1

我一直在掙扎以下布爾問題:功能處理浮點數來產生一個布爾

寫一個函數even_int消耗任何類型的數據,產生真,如果是偶數,和否則產生False。

我寫道:在你的程序

def even_int(any): 
    return type(any) != type("a") and float(any % 2 == 0.0) 

反饋:

確保當輸入一個浮點數的功能工作。

不太瞭解此反饋。我把浮子放在前面,這樣就應該覆蓋。我也試過沒有浮點數或小數點。0

+1

爲什麼你在測試的開始字符串?當有人通過一個列表時會發生什麼? –

+0

你也會產生一個'float()',而不是一個布爾值。你不返回'True',你返回'1.0'。 –

+0

@LiviuIosif如果您的問題已得到充分解決,您可以[接受最能幫助您的答案](https://stackoverflow.com/help/someone-answers)。 –

回答

0

我認爲你應該直接檢查是否有整數類型。我也不認爲你需要把漂浮any % 2 == 0

def even_int(value): 
    return isinstance(value, int) and value % 2 == 0 

編輯: 如果你想接受花車以及,

def even_int(value): 
    return isinstance(value, (float, int)) and value % 2 == 0 
0

你得太多可能的事情。如果您使用numbers.Real進行檢查,則一個isinstance呼叫應該已足夠。

import numbers 
def even_int(x): 
    return isinstance(x, numbers.Real) and not x % 2 

注:

In [114]: issubclass(int, numbers.Real) 
Out[114]: True 

In [115]: issubclass(float, numbers.Real) 
Out[115]: True 

In [117]: issubclass(str, numbers.Real) 
Out[117]: False 
0

我會嘗試這一點 - 這是Python的,因爲它試圖通過轉換爲int(這意味着它適用於字符串作爲請求原諒,而不是許可好吧),並捕獲TypeError返回False,如果這也不起作用。

def even_int(v): 
    try: 
     return int(v) % 2 == 0 #will trigger exception if v cannot be cast to int 

    except (TypeError, ValueError): 
     return False 

編輯:簡化基於評論

+1

1)'any'對於變量名不是一個好的選擇 - 有一個內建的函數叫做'any',它會影響(儘管我意識到你正在從OPs代碼中獲取它)...... 2)你的整個'嘗試'可以'返回int(值)%2 == 0' ... –

+0

1)好點 - 我使用的OP變量名:)將改變2)是的我意識到這一點,但希望它會有點更清楚我的方式發生了什麼,但將編輯添加:) –

+1

實際上 - 另一個問題 - even_int(2.3)返回true作爲浮點轉換截斷 –