2.4 基本数据类型

微视频

Python 3.x版本中有两个简单的数据类型,即数字类型和字符串类型。

2.4.1 数字类型

Python 3.x版本支持int、float、bool、complex 4种数字类型。

大牛提醒

在Python 2中是没有bool的,用数字0表示False,用1表示True。在Python 3中,把True和False定义成了关键字,但它们的值还是1和0,可以和数字相加。

1.int(整数)

下面是整数的例子:

    >>> a = 666688
    >>> a
    666688

可以使用十六进制数值来表示整数,十六进制整数的表示法是在数字之前加上0x,如0x80120000、0x100010100L。

例如:

    >>> a=0x6EEEFFFF
    >>> a
    1861156863
2.float(浮点数)

浮点数的表示法可以使用小数点,也可以使用指数的类型。指数符号可以使用字母e或E来表示,指数可以使用+/-符号,也可以在指数数值前加上数值0,还可以在整数前加上数值0。

例如:

    6.66  12.  .007  1e100  3.14E-10  1e010  08.1

使用float()内置函数,可以将整数数据类型转换为浮点数数据类型。例如:

    >>> float(660)
    660.0
3.bool(布尔值)

Python的布尔值包括True和False,只与整数中的1和0有对应关系。例如:

    >>> True==1
    True
    >>> True==2
    False
    >>> False==0
    True
    >>> False==-1
    False

这里利用符号==判断左右两边是否绝对相等。

4.complex(复数)

复数的表示法是使用双精度浮点数来表示实数与虚数的部分,复数的符号可以使用字母j或J。

例如:

    1.5 + 0.5j  1J  2 + 1e100j  3.14e-10j

数值之间可以通过运算符进行运算操作。例如:

    >>> 50 + 40  #加法
    90
    >>> 5.6 - 2  #减法
    3.6
    >>> 30 * 15  #乘法
    450
    >>> 1/2      #除法,得到一个浮点数
    0.5
    >>> 1//2     #除法,得到一个整数
    0
    >>> 15 % 2   #取余
    1
    >>> 2 ** 10  #乘方
    1024

在数字运算时,需要注意以下问题:

(1)数值的除法(/)总是返回一个浮点数,要获取整数需使用//操作符。

(2)在整数和浮点数混合计算时,Python会把整数转换为浮点数。

【例2.2】计算学生的总成绩和平均成绩(源代码\ch02\2.2.py)。

    name="张小明"                                #保存学生的姓名
    print ("该学生的姓名是:"+name)
    maths=92.5                                   #保存学生的数学成绩
    #使用内置的str()函数可以将数值转换为字符串
    print("该学生的数学成绩是:"+str(maths))
    chinese=65.5                                 #保存学生的语文成绩
    print("该学生的语文成绩是:"+ str(chinese))
    english=80.5                                 #保存学生的英语成绩
    print("该学生的英语成绩是:"+ str(english))
    sum= maths+chinese+english                   #保存学生的总成绩
    print("该学生的总成绩是:"+str(sum))
    avg= sum/3                                   #保存学生的平均成绩
    print("该学生的平均成绩是:"+str(avg))
    #使用if语句判断学生的成绩如何
    if avg<65:
        print ("该学生的成绩较差")
    if 65<=avg<75:
        print ("该学生的成绩及格")
    if  75<=avg<90:
        print ("该学生的成绩良好")
    if  avg>=90:
        print ("该学生的成绩优秀")

程序运行结果如图2-2所示。

图2-2 例2.2的程序运行结果

2.4.2 字符串类型

Python将字符串视为一连串的字符组合。在Python中,字符串属于不可变序列,通常使用单引号、双引号或者三引号括起来。这三种引号形式在语义上没有区别,只是在形式上有些差别。其中单引号和双引号的字符序列必须在一行上,而三引号内的字符序列可以分布在连续的多行上。

例如下面的代码:

    >>> a="张小明"          #使用双引号时,字符串的内容必须在一行
    >>> b='最喜欢的水果'    #使用单引号时,字符串的内容必须在一行
    >>> c='''骤雨东风对远湾,滂然遥接石龙关。 野渡苍松横古木,断桥流水动连环。
    客行此去遵何路,坐眺长亭意转闲。'''
    >>> print (a)
    张小明
    >>> print (b)
    最喜欢的水果
    >>> print (c)
    骤雨东风对远湾,滂然遥接石龙关。 野渡苍松横古木,断桥流水动连环。
    客行此去遵何路,坐眺长亭意转闲。

【例2.3】输出一个小屋图形(源代码\ch02\2.3.py)。

由于该字符画有多行,所以使用三引号作为定界符比较合适。代码如下:

    print('''
              @@@@@@@@@
             @          @
            @            @
           @               @
          @                  @
         @@@@@@@@@@@@@@@@@@@
           @                @
           @       @@@@@   @
           @       @ @ @   @
           @       @@@@@   @
           @                @
           @                @
           @@@@@@@@@@@@@@@
     ''')

程序运行结果如图2-3所示。

图2-3 例2.3的程序运行结果

大牛提醒

字符串开头与结尾的引号要一致。

下面的案例将字符串开头使用了双引号、结尾使用了单引号。

    >>> a = "hello world'
    Traceback (  File "<interactive input>", line 1
        a = " hello world '
                             ^
    SyntaxError: invalid token

由此可见,当字符串开头与结尾的引号不一致时,Python会显示一个invalid token的信息。

2.4.3 数据类型的相互转换

有时候,用户需要对数据内置的类型进行转换。数据类型的转换,只需要将数据类型作为函数名即可。以下几个内置的函数可以执行数据类型之间的转换,这些函数返回一个新的对象,表示转换的值。

1.转换为整数类型

语法格式如下:

    int(x)

将x转换为一个整数。例如:

    >>>int(3.6)
    3

大牛提醒

int()函数不能转换成非数字类型的数值。例如,使用int()函数转换字符串时,将会提示ValueError错误。例如:

    >>> int("16个工作日")
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        int("16个工作日")
    ValueError: invalid literal for int() with base 10: '16个工作日'
2.转换为小数类型

语法格式如下:

    float(x)

将x转换为一个浮点数。例如:

    >>> float (10)
    10.0
3.转换为字符串类型

语法格式如下:

    str(x)

将x转换为一个字符串。例如:

    >>>str(123567)
    '123567'

【例2.4】模拟出租车的抹零结账行为(源代码\ch02\2.4.py)。

假设出租车司机因为找零钱比较麻烦,所以进行抹零操作。这里int()函数将浮点型的变量转换为整数类型,从而实现抹零效果。本案例还会用到str()函数,主要作用是将数字转换为字符串类型。

    ranges=5.6                       #保存乘客坐车的距离
    moneys=8+(ranges-3)*2            #计算总票价
    print("本次车费是:"+ str(moneys))
    real_moneys=int(moneys)          #进行抹零操作
    print("本次实付车费是:"+ str(real_moneys))

程序运行结果如图2-4所示。

图2-4 例2.4的程序运行结果