2015-09-04 69 views
1

這是一段代碼,它是用來檢查某個變量的數據類型,返回的是True,其次是False,False,False。有人能告訴我這段代碼有什麼問題嗎?我可以如何更有效地完成這個過程?的types爲什麼這個for循環不能識別int,float,string或boolean?

examples = [100, 1.45, "Bob", True] 
types = [int, float, str, bool] 

for x in range(0, 3): 
    if type(examples[x]) == type(types[x]): 
     print("True") 
    else: 
     print("False") 
+1

其實它打印假,假,假。 – BrenBarn

回答

3

你必須比較該列表中的單詞的類型,而不是它的類型。 另請注意,range不包括第二個參數,因此您需要執行range(0,4)range(4)哪個更好。

for x in range(0, 4): 
    if type(examples[x]) == (types[x]): 
     print("True") 
    else: 
     print("False") 

一種更好的方法是使用isinstance

返回真,如果該對象參數是CLASSINFO參數的實例,或其(直接,間接或虛擬的)亞類的。

你可以改變你的代碼,

for x in range(0, 4): 
    if isinstance(examples[x],types[x]): 
     print("True") 
    else: 
     print("False") 

作爲isinstance返回一個布爾值,你可以直接做

for x in range(0, 4): 
    print(isinstance(examples[x],types[x])) 
1

元素是類(種)和type返回type每個那些。 examples中沒有類型,因此type(examples[x]) == type將始終評估爲False

這應該工作:

for x in range(4): 
    if type(examples[x]) == types[x]: # <- remove type(...) 
     print("True") 
    else: 
     print("False") 

你也可以做到這一點使用mapisinstance

In [3]: for x in map(isinstance, examples, types): 
    ...:  print(x) 
    ...:  
True 
True 
True 
True 
1

你不想做type(types[x])types已包含類型。如果您採用某種類型,則可獲得type

只是做if type(examples[x]) == types[x]

更妙的是做這樣說:

for example, typ in zip(examples, types): 
    if type(example) == typ: 
     print("True") 
    else: 
     print("False") 

這在列表相比較,所有類型的額外的好處不只是第3

爲什麼要這麼做是另一個問題。

0

修復:

for x in range(0, 3): 
    if type(examples[x]) == types[x]: # you were type(instance of type) => type 
     print("True") 
    else: 
     print("False") 

改進:

for x in range(0, 4): # did you miss the last element? 
    print isinstance(examples[x],types[x]) # refer to link 

link : learn about isinstance()