2017-03-17 31 views
0

編寫一個函數data_type,它接受一個參數並打印出該參數的數據類型。所以,如果我們給一個字符串作爲輸入,它會說我們的輸入是一個字符串,如果我們給一個整數或者一個浮點數就是相同的。 我不知道我做錯了,如果有人可以給我一些解釋,我將非常感激!希望我對這個問題很清楚。type()輸入,根據數據類型打印()

def data_type(x,y): 
    for i in x,y: 
     if i == type(str): 
      print "str" 
     elif i == type(int): 
      print "int" 
     else: 
      if i == type(float): 
       print "float" 

data_type(1,"string") 
+1

你D它相反的方式,它應該是'型(I)== int',而不是'我==類型(int)'... –

+1

函數應該帶* 1 *參數。啓動你的Python並輸入'type(0)','type([])'和'type(「hello」)''。觀察結果。 (你不能枚舉所有可能存在的類型,所以一堆條件將不會有太大的好處。) – molbdnilo

+1

這聽起來像你只是想要函數'type' ... –

回答

-1

你在想太通俗。 i == type(str)含糊地讀起來像「我是字符串類型」,但實際上並不意味着。

你可以通過輸入你的口譯員來找出type(str)。它會告訴你str的類型是type,這很有意義,因爲str是一種類型。

因此,例如,"hello" == type(str)"hello" == type是同一回事。這沒有任何意義 - 字符串「你好」顯然不是type的概念,因此它的計算結果爲False

你真正想問的是「你好」的type是否與str類型的東西是一樣的。你可以檢查如下:type(i) == str。對其餘代碼進行類似的調整會使其工作。

+1

謝謝你的努力先生! – Unix

0

更簡單的實現你的函數:

def print_types(*args): 
    for arg in args: 
     print(type(arg).__name__) 

這方面的一些注意事項:

*args語法允許採取許多位置參數的功能,它們將被「打包」進args(這將可作爲元組使用)。 type(x)將返回x的類型,該類型具有__name__屬性。

注意,對於「老作風」類(在python2,那些不從object繼承),這是不正確略,你會需要調整爲:

>>> class C: pass 
... 
>>> type(C()) 
<type 'instance'> 
>>> type(C()).__name__ 
# Not what we want 
'instance' 

如果你也想處理舊風格的對象:

def print_types(*args): 
    for arg in args: 
     try: 
      print(arg.__class__.__name__) 
     except AttributeError: 
      print(type(arg).__name__) 

一個快速演示

>>> class C: pass 
... 
>>> class D(object): pass 
... 
>>> print_types(C, C(), D, D(), 'foo', 2) 
classobj 
C 
type 
D 
str 
int 

在python3那裏沒有一個「老樣式類」的概念,你會得到如下:

>>> print_types(C, C(), D, D(), 'foo', 2) 
type 
C 
type 
D 
str 
int 
+0

非常感謝您的時間和精力,我瞭解您的理念,但現在我不允許使用課程,因爲我還沒有在我的大學講座中介紹他們,我會在1個月後處理它們。這肯定會對未來有所幫助! – Unix