2017-03-17 29 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