2015-10-15 31 views
1

我正在研究一個簡單的程序,它會詢問天氣和溫度,並輸出用戶應穿的衣服。但是,我已經到了要確保用戶無法輸入「g」度或任何其他字符串的程度。有沒有簡單的方法來比較變量類型?換句話說,是否有沿線的東西:如何比較python中的變量類型?

if (type(temp) == 'str'): 

    print("Invalid. Try again.") 

或類似的東西不是太複雜?就我個人而言,使用高級功能和其他功能都沒問題,但這對我的CS老師來說看起來很粗略。

+0

檢查一下,這裏有很多信息:https://docs.python.org/2/library/string.html – ergonaut

+0

請注意,在Python 3和'raw_input()'中用input()在Python 2中總是一個字符串,即使它是一串數字,所以檢查類型不會告訴你任何東西。您必須嘗試將字符串轉換爲另一種類型,例如使用正如Makoto的回答所顯示的那樣,「int(s)」或「float(s)」。 – deltab

回答

1

你幾乎沒錯,只是不需要報價。

>>> type(5) == int 
True 
>>> type('5') == int 
False 
>>> type('5') == str 
True 
2

It's easier to beg forgiveness than to ask permission.

考慮一下我們大多數人會在這種情況下做的(這是假設的Python 3):

temp = int(input("Enter a numerical input: ")) 

如果我們輸入的不是數字,我們會大發脾氣與ValueError。知道了,我們應該...抓住它:

try: 
    temp = int(input("Enter a numerical input: ")) 
except ValueError as e: 
    print("Invalid input - please enter a whole number!"); 

不要用類型檢查不甘示弱,因爲這會讓你的代碼少一點Python的。相反,不要害怕這段代碼有機會炸燬;如果是這樣,那麼趕上例外並且稍後處理善後事宜。

+1

捕捉異常非常緩慢嗎? – user2136963

1

Python有一個內置函數來檢查變量類型。 從docs

isinstance(對象,CLASSINFO)

返回真,如果該對象參數是CLASSINFO參數的一個實例 ,或它們的(直接,間接或 虛擬)亞類的。如果classinfo類型爲 對象(新樣式類)並且對象是該類型的對象或 (直接,間接或虛擬)子類的對象,則也會返回true。如果對象不是 類實例或給定類型的對象,則函數始終爲 將返回false。如果classinfo既不是類對象也不是類型 對象,它可能是類或類型對象的元組,或者可能遞歸地包含其他這樣的元組(其他序列類型不被接受)。如果 classinfo不是元組,類型或元組的類,類型等元組,則會引發TypeError異常。

例如:

>>>n=3 
>>>isinstance(n, int) 
True 
>>>isinstance(n, str) 
False 
>>>m="example" 
>>>isinstance(m, int) 
False 
>>>isinstance(m, str) 
True 
0

我只是碰到這個,並認爲,雖然這個問題是很久以前問,對於其他用戶的利益,我會把我的解決方案了。

我創建的例外類型檢查趕上一個輔助功能:

def TypeChecker(var): 
    result = 1 
    try: 
     int(var) 
    except: 
     result = 2 
    return 

然後在代碼的主體,無論我要檢查身份類型,我只是寫這樣的事:

if TypeChecker(var1) == TypeChecker(var2): 
    do_stuff... 

這種方法還允許用戶修改的變量類型取決於另一個變量的,由於具有這種功能,一個int將返回1和串將返回2.