• 课时5:闲聊之Python的数据类型


    目录:

    一、引言

    二、数据类型

      >整型

      >浮点型

      >布尔类型

    三、类型转换

    四、获得关于类型的信息

    五、课时05课后习题及答案

    ***********

    一、引言

    ***********

    大家还记得‘520’和520的区别吗?

    没错,带了引号的,无论是单引号还是双引号或者是三引号,都是字符串;但不带引号的,就是数字。字符串相加叫作拼接。

    >>> "520"+'1314'
    '5201314'
    >>> 520+1314
    1834

    今天来介绍一些Python的数据类型,包括整型、浮点型、布尔类型、复数类型等。

    ****************

    二、数据类型

    ****************

    1、整型

    整型说白了,就是平时所见的整数,Python3的整数已经与长整型进行了无缝的结合,现在的Python3的整型类似于Java的BigInteger类型,它的长度不受限制。                                                        如果说非要有个限制,那只限于计算机的虚拟内存总数。所以用Python3很容易进行大数的计算。

    2、浮点型

    浮点型就是平时所说的小数。Python区分整型和浮点型的唯一方式,就是看有没有小数点。

    谈到浮点型,不得不提E记法,E记法就是平常所说的科学记数法,用于表示特别大和特别小的数。

    >>> a=0.000000000000000000025
    >>> a
    2.5e-20
    >>> 150000000000
    150000000000
    >>> 1.5e11
    150000000000.0

    这个E的意思是指数,指底数为10,E后边的数字是10的多少次幂。

    3、布尔类型

    布尔类型事实上是特殊的整型,True相当于整数值1,False相当于整数值0.

    >>> True + False
    1
    >>> True + True
    2
    >>> True/False
    Traceback (most recent call last):
      File "<pyshell#17>", line 1, in <module>
        True/False
    ZeroDivisionError: division by zero

    当然把True和False当成1和0来参与这种运算的这种做法是不妥的。

    ***************

    三、类型转换

    ***************

    接下来介绍几个跟数据类型紧密相关的函数:int()、float()、str().

    1、int()的作用就是将一个字符串或浮点数转换为一个整数

    >>> a = '520'
    >>> b = int(a)
    >>> a,b
    ('520', 520)
    >>> c = 5.99
    >>> d = int(c)
    >>> c,d
    (5.99, 5)

    注意了,如果是浮点数转换为整数,那么Python会采取”截断“处理,就是把小数点后的数据直接砍掉,注意不是四舍五入哦。

    补充:

    >>> a = int("小甲鱼")
    Traceback (most recent call last):
      File "<pyshell#21>", line 1, in <module>
        a = int("小甲鱼")
    ValueError: invalid literal for int() with base 10: '小甲鱼'

    ”小甲鱼“是一个字符串,但不是一个表示数字的字符串,它是一个编码,编码跟数字没有关系。所以会报错。

    2、float()的作用是将一个字符串或整型转换成一个浮点数(就是小数)

    >>> a = "520"
    >>> b = float(a)
    >>> a,b
    ('520', 520.0)
    >>> c = 520
    >>> d = float(c)
    >>> c,d
    (520, 520.0)

    3、str()的作用是将一个数或任意其他类型转换成一个字符串

    >>> a = 5.99
    >>> b = str(a)
    >>> a,b
    (5.99, '5.99')
    >>> c = str(5e15)
    >>> c
    '5000000000000000.0'
    >>> d = str(15)
    >>> d
    '15'
    >>> c = str(5e19)
    >>> c
    '5e+19'

    ****************************

    四、获得关于类型的信息

    ****************************

    Python提供了一个函数,可以明确的告诉我们变量的类型,这就是type函数:

    >>> type("520")
    <class 'str'>
    >>> type(5.20)
    <class 'float'>
    >>> type(520)
    <class 'int'>
    >>> type(true)
    Traceback (most recent call last):
      File "<pyshell#3>", line 1, in <module>
        type(true)
    NameError: name 'true' is not defined
    >>> type(True)
    <class 'bool'>

    我们更建议使用isinstance()这个BIF来确定变量的类型。这个BIF有两个参数:第一个是待确定类型的数据;第二个是指定一个数据类型。

    >>> type(True)
    <class 'bool'>
    >>> a = "小甲鱼"
    >>> isinstance(a,str)
    True
    >>> isinstance(520,float)
    False
    >>> isinstance(520,int)
    True

    *******************************

    五、课时05课后习题及答案

    *******************************

    测试题:

    0. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?
    1. 你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?
    2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?
    3. 我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?
    4. 取得一个变量的类型,视频中介绍可以使用 type() 和 isinstance(),你更倾向于使用哪个?
    5. Python3 可以给变量命名中文名,知道为什么吗?

    动动手:

    0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。
    如果你尝试过以下做法,请举下小手:
    temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
    # 这种想法是因为type(1)会返回<class 'int'>,如果type(temp)返回结果一致说明输入是整数。
    while type(temp) != type(1):
      print("抱歉,输入不合法,", end='')
       temp = input("请输入一个整数:")

    或者可能这样:

    temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
    # not操作符的作用是将布尔类型的结果翻转:即取反的意思,not True == Flase
    while not isinstance(temp, int):
        print("抱歉,输入不合法,", end='')
        temp = input("请输入一个整数:")

    以上方法的思路是正确的,不过似乎忽略了一点儿:就是input()的返回值始终是字符串,所以type(temp)永远是<class 'str'>!  
    其实有蛮多的做法可以实现的,不过就目前我们学习过的内容来看,还不足够。
    所以,在让大家动手完成这道题之前,小甲鱼介绍一点新东西给大家!

    s为字符串
    
    s.isalnum()  所有字符都是数字或者字母,为真返回 Ture,否则返回 False。
    
    s.isalpha()  所有字符都是字母,为真返回 Ture,否则返回 False。
    
    s.isdigit()  所有字符都是数字,为真返回 Ture,否则返回 False。
    
    s.islower()  所有字符都是小写,为真返回 Ture,否则返回 False。
    
    s.isupper()  所有字符都是大写,为真返回 Ture,否则返回 False。
    
    s.istitle()  所有单词都是首字母大写,为真返回 Ture,否则返回 False。
    
    s.isspace()  所有字符都是空白字符,为真返回 Ture,否则返回 False。
             
    例如:
    
    >>> s = 'I LOVE FISHC'
    >>> s.isupper()
    >>> True

    好了,文字教程就到这里,大家赶紧趁热打铁,改造我们的小游戏吧!

    1. 写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用)
    这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。

    答案:

    测试题答案:

    0. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?

    bool 表示布尔类型
    float 表示浮点型
    str 表示字符串

    1. 你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?

    你可能听说过计算机是很“笨”的,究其根本是因为它只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给CPU按照一定的规则解析。
    由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示 False 和 True 再适合不过了,因为不用浪费资源在转换的过程上!

    2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?

    我们可爱的小甲鱼说了,小数取整会采用比较暴力的截断方式,即向下取整。(注:5.5向上取整为6,向下取整为5)

    3. 我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int() 按照“四舍五入”的方式取整吗?

    int() 固然没那么“聪明”,但机器是死的,鱼油是活的!
    5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5
    5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6
    大家看明白了吗?

    4. 取得一个变量的类型,视频中介绍可以使用 type() 和 isinstance(),你更倾向于使用哪个?

    建议使用 isinstance(),因为它的返回结果比较直接,另外 type() 其实并没有你想象的那么简单,我们后边会讲到。

    5. Python3 可以给变量命名中文名,知道为什么吗?

    Pyhton3 源码文件默认使用utf-8编码(支持中文),这就使得以下代码是合法的: 
    >>> 小甲鱼 = '我爱你'  
    >>> print(小甲鱼)
    >>> 我爱你

    动动手答案:

    0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。
    需要注意的地方在代码中已经注释!

     1 import random
     2 times = 3
     3 secret = random.randint(1,10)
     4 print('------------------我爱鱼C工作室------------------')
     5 guess = 0
     6 print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
     7 while (guess != secret) and (times > 0):
     8     temp = input()
     9     while not temp.isdigit():
    10         temp = input("抱歉,您的输入有误,请输入一个整数:")
    11     guess = int(temp)
    12     times = times - 1 # 用户每输入一次,可用机会就-1
    13     if guess == secret:
    14         print("我草,你是小甲鱼心里的蛔虫吗?!")
    15         print("哼,猜中了也没有奖励!")
    16     else:
    17         if guess > secret:
    18             print("哥,大了大了~~~")
    19         else:
    20             print("嘿,小了,小了~~~")
    21         if times > 0:
    22             print("再试一次吧:", end=" ")
    23         else:
    24             print("机会用光咯T_T")
    25 print("游戏结束,不玩啦^_^")

    1. 写一个程序,判断给定年份是否为闰年。

     1 temp = input('请输入一个年份:')
     2 while not temp.isdigit():
     3     temp = input("抱歉,您的输入有误,请输入一个整数:")
     4 
     5 year = int(temp)
     6 if year/400 == int(year/400):
     7     print(temp + ' 是闰年!')
     8 else:
     9     if (year/4 == int(year/4)) and (year/100 != int(year/100)):
    10         print(temp + ' 是闰年!')
    11     else:
    12         print(temp + ' 不是闰年!')
    爱笑的男孩运气都不会差
  • 相关阅读:
    根据CPU核数合理设置线程池大小
    jvm类加载的过程
    springboot2.x整合redis实现缓存(附github链接)
    记录一次坎坷的debug之旅,NUXT框架页面多开假死现象,NUXT刚开始可以访问,突然就访问无响应,并且前后端均未出现任何报错提示:现在是早晨4点35分
    hibernate用Query.setFirstResult和Query.setMaxResults分页时,传入的manresults不能为0,否则解析后的sql会去查全表数据
    工作时发现oracle的分页查询的数据会重复,进行分析并给出解决方式
    看别人的代码是进步最快的方式
    关于电磁炉使用时造成的电磁场导致洗衣机等电器失效的情况总结
    关于在项目中创建一个新的线程之后需要将线程持有的数据库连接对象归还的思考
    Oracle分页和mysql分页的区别
  • 原文地址:https://www.cnblogs.com/DC0307/p/9364467.html
Copyright © 2020-2023  润新知