zoukankan      html  css  js  c++  java
  • 第五篇.python进阶

    第五篇.python进阶

    1. 异常处理

    1. 什么是异常

    2. 异常的种类

    3. 异常的处理

    4. try-except总结

    5. 抛出异常raise

    6. 断言assert

    2. 数字类型内置方法

    1. 整型内置方法(int)

    2.用途:

    年龄、号码、等级

    2.定义:

    可以使用int()方法将纯数字的字符串转为十进制的整型

    age = 19  # age = int(10)
    print(type(age))
    

    <class 'int'>

    x = int('111')
    print(type(x))
    

    <class 'int'>

    x = int('11.1')  # 报错
    print(x)
    

    3.常用操作+内置方法:

    算术运算+比较运算

    4.存一个值or多个值:

    一个值

    5.有序or无序:

    整型麻油有序or无序一说

    6.可变和不可变

    可变:变量值变了,id不变

    不可变:变量值变了,id也变了

    整型属于不可变:

    age = 19
    print(f'first:{id(age)}')
    age = 20
    print(f'second:{id(age)}')
    

    first:4384901776

    second:4384901808

    3. 浮点型内置方法(float)

    1.用途:

    薪资、身高、体重

    2.定义:

    可以使用float()方法将纯数字的字符串转为浮点型数字。

    age = 3.1  # age = float(3.1)
    print(type(age))
    

    <class 'float'>

    x = float('111')
    print(x)
    print(type(x))
    

    111.0

    <class 'float'>

    x = float('11.1')  # 报错
    print(type(x))
    

    <class 'float'>

    3.常用操作+内置方法:

    算术运算+比较运算

    4.存一个值or多个值:

    一个值

    5.有序or无序:

    无有序or无序一说

    浮点型是不可变:

    salary = 3.1
    print(f'first:{id(salary)}')
    salary = 5.1
    print(f'second:{id(salary)}')
    

    first:4423173584

    second:4423173800

    4. 字符串类型内置方法

    1.用途:

    描述性质的东西,如人的名字、单个爱好、地址、国家等

    2.定义:

    使用''、""、''''''、""""""包裹的的一串字符

    • u'unicode': unicode编码的字符串

    • b'101': 二进制编码的字符串

    • r' ': 原生字符串,也就是说' '这是普通的两个字符,并没有换行的意思

      name = 'nick'  # name =str('nick')
      s1 = str(1.1)
      s2 = str([1, 2, 3])
      
      print(f's1:{s1}, type:{type(s1)}')
      print(f's2:{s2}, type:{type(s2)}')
      
      s1:1.1, type:<class 'str'>
      s2:[1, 2, 3], type:<class 'str'>
      

    3.常用操作+内置方法:

    常用操作和内置方法分为优先掌握(今天必须得记住)、需要掌握(一周内记住)、其他操作(了解)三个部分。

    1.1优先掌握

    1. 按索引取值

    2. 切片

    3. 长度len

    4. 成员运算in/not in

    5. 移除空白strip

    6. 切分split

    7. 循环

      1.按索引取值(只能区,不能改变里面的东西)

      # str索引取值
      msg = 'hello nick'
      #      0123456789  # 索引序号
      
      print(f'索引为6: {msg[6]}')
      print(f'索引为-3: {msg[-3]}')
      

      索引为6: n

      索引为-3: i

      2.切片(顾头不顾尾:步长)

      # 索引切片
      msg = 'hello nick'
      #      0123456789  # 索引序号
      
      print(f'切片3-最后: {msg[3:]}')
      print(f'切片3-8: {msg[3:8]}')
      print(f'切片3-8,步长为2: {msg[3:8:2]}')
      print(f'切片3-最后,步长为2: {msg[3::2]}')
      
      # 了解,步长为正从左到右;步长为负从右到左
      print('
      **了解知识点**')
      print(f'切片所有: {msg[:]}')
      print(f'反转所有: {msg[::-1]}')
      print(f'切片-5--2: {msg[-5:-2:1]}')
      print(f'切片-2--5: {msg[-2:-5:-1]}')
      
      切片3-最后: lo nick
      切片3-8: lo ni
      切片3-8,步长为2: l i
      切片3-最后,步长为2: l ik
      
      **了解知识点**
      切片所有: hello nick
      反转所有: kcin olleh
      切片-5--2:  ni
      切片-2--5: cin
      

      3.长度len()

      # str长度
      msg = 'hello nick'
      
      print(len(msg))
      

      10

      4.成员运算in/not in

      # str成员运算
      msg = 'my name is nick, nick handsome'
      
      print(f"'nick' in msg: {'nick' in msg}")
      print(f"'jason' not in msg: {'jason' not in msg}")
      print(f"not 'jason' in msg: {not 'jason' in msg}")
      
      'nick' in msg: True
      'jason' not in msg: True
      not 'jason' in msg: True
      

      5.移除空白

      # str移除空白strip()
      name = '&&&n ick'
      
      print(f"name.strip('&'): {name.strip('&')}")  # strip()默认为‘ ’,并且不修改原值,新创建空间
      print(f"name: {name}")
      
      # strip()应用场景
      pwd = input('password: ')  # 用户可能会手抖输入空格
      if pwd.strip() == '123':
          print('密码输入成功')
      
      print(f"'*-& nick+'.strip('*-& +'): {'*-& nick+'.strip('*-& +')}")
      
      name.strip('&'): n ick
      name: &&&n ick
      password: 123   
      密码输入成功
      '*-& nick+'.strip('*-& +'): nick
      

      5.切分split

      # str切分split
      info = 'nick:male:19'
      info_list1 = info.split(':')
      info_list2 = info.split(':', 1)
      
      print(f'info_list1:{info_list1}')
      print(f'info_list2:{info_list2}')
      
      info_list1:['nick', 'male', '19']
      info_list2:['nick', 'male:19']
      

      7.循环

      msg = 'hello nick'
      
      for i in msg:
          print(i)
      

      1.2需要掌握

      1. lstrip&rstrip

      2. lower&upper

      3. startswith&endswith

      4. rsplit

      5. join

      6. replace

      7. isdigit

        1. .lstrip()和rstrip()

          # str之lstrip()和rstrip()
          name = '&&nick&&'
          
          print(f"nick.lstrip('&'): {name.lstrip('&')}")
          print(f"nick.rstrip('&'): {name.rstrip('&')}")
          
          nick.lstrip('&'): nick&&
          nick.rstrip('&'): &&nick
          
        2. lower()和upper()

          # str之lower()和upper()
          name = 'Nick Chen'
          
          print(f"name.upper(): {name.lower()}")
          print(f"name.upper(): {name.upper()}")
          
          name.upper(): nick chen
          name.upper(): NICK CHEN
          
        3. startswith()和endswith()

          # str之startswith()和endswith()
          name = 'Nick Chen'
          
          print(f"name.startswith('Nick'): {name.startswith('Nick')}")
          print(f"name.endswith('chen'): {name.endswith('chen')}")
          
          name.startswith('Nick'): True
          name.endswith('chen'): False
          
        4. rsplit()

          # str之rsplit()
          info = 'nick:male:19'
          
          print(f"info.rsplit(':', 1): {info.rsplit(':', 1)}")  # 从右开始切割
          
          info.rsplit(':', 1): ['nick:male', '19']
          
        5. join()

          lis = [1,2,'19']
          print(f"':'.join(lis): {':'.join(lis)}")  # 报错,数字不可和字符串拼接
          
          # str之join()
          lis = ['nick', 'male', '19']
          
          print(f"':'.join(lis): {':'.join(lis)}")
          

          ':'.join(lis): nick:male:19

        6. replace()

          # str值replace()
          name = 'nick shuai'
          
          print(f"name.replace('shuai','handsome'): {name.replace('shuai','handsome')}")
          

          name.replace('shuai','handsome'): nick handsome

        7. isdigit()

          # str值isdigit()
          salary = '111'
          print(salary.isdigit())  # True
          
          salary = '111.1'
          print(salary.isdigit())  # False
          
          True
          False
          
          # str之isdigit()应用场景
          age = input('age: ')
          if age.isdigit():
              age = int(age)
          
              if age < 18:
                  print('小姐姐')
              else:
                  print('阿姨好')
          else:
              print(f'你的年龄能是这个{age}?')
          
          age: 逗你玩?
          你的年龄能是这个逗你玩??
          
          

          1.3其他操作

          1. find|rfind|index|rindex|count

          2. center|ljust|rjust|zfill

          3. expandtabs

          4. captalize|swapcase|title

          5. is系列

            1. 1.find()、rfind()、index()、rindex()、count()

            2. center()、ljust()、rjust()、zfill()

            3. expandtabs()

            4. captalize()、swapcase()、title()

            5. is数字系列

            6. is其他

    5. 列表类型的内置方法

    1. 列表类型内置方法(list)

      1. 用途:多个装备、多个爱好、多门课程

      2. 定义:[]内可以有多个类型的值,逗号隔开多个元素

        # my_girl_friend = list(['jason','tank','sean'])
        my_girl_friend = ['jason', 'tank', 'sean']
        
        print(f"my_girl_friend: {my_girl_friend}")
        
        my_girl_friend: ['jason', 'tank', 'sean']
        
        l = list('hello nick')
        print(f"l: {l}")
        
        l: ['h', 'e', 'l', 'l', 'o', ' ', 'n', 'i', 'c', 'k']
        

        3.常用操作+内置方法:常用操作和内置方法分为优先掌握(今天必须得记住)、需要掌握(一周内记住)、其他操作(了解)三个部分。

    6. 元组类型的内置方法

    1. 元组类型内置方法(tuple)

      1.用途:多个装备、多个爱好、多门课程,甚至是多个女朋友

      2.定义:在()内可以有多个任意类型的值,逗号分隔元素

      # my_girl_friend = tuple(('jason','tank','sean'))
      my_girl_friend = ('jason', 'tank', 'sean')
      
      print(f"my_girl_friend: {my_girl_friend}")
      

      my_girl_friend: ('jason', 'tank', 'sean')

      name_str = ('egon')  # ()只是普通包含的意思
      name_tuple = ('egon',)
      
      print(f"type(name_str): {type(name_str)}")
      print(f"type(name_tuple): {type(name_tuple)}")
      

      type(name_str): <class 'str'>

      type(name_tuple): <class 'tuple'>

      3.常规操作+内置方法:常用方法和内置方法

      1.1 优先掌握

      1. 索引取值

      2. 切片(顾头不顾尾,步长)

      3. 长度len

      4. 成员运算in和not in

      5. 循环

      6. count

      7. index

        1.索引取值

        # tuple之索引取值
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        # name_tuple[0] = 'nick handsom'  # 报错
        
        print(f"name_tuple[0]: {name_tuple[0]}"
        

        name_tuple[0]: nick

        2.切片(顾头不顾尾,步长)

        # tuple之切片
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        print(f"name_tuple[1:3:2]: {name_tuple[1:3:2]}")
        
        name_tuple[1:3:2]: ('jason',)
        

        3.长度

        # tuple之长度
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        print(f"len(name_tuple): {len(name_tuple)}")
        

        len(name_tuple): 4

        4.成员运算

        # tuple之成员运算
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        print(f"'nick' in name_tuple: {'nick' in name_tuple}")
        

        'nick' in name_tuple: True

        5.循环

        # tuple之循环
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        for name in name_tuple:
            print(name)
        

        nick

        jason

        tank

        sean

        6.count

        # tuple之count()
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        print(f"name_tuple.count('nick'): {name_tuple.count('nick')}")
        

        name_tuple.count('nick'): 1

        7.index()

        # tuple之index()
        name_tuple = ('nick', 'jason', 'tank', 'sean')
        
        print(f"name_tuple.index('nick'): {name_tuple.index('nick')}")
        

        name_tuple.index('nick'): 0

        4.存一个值or多个值:

        多个值

        5.有序or无序:

        有序

        name_tuple = ('nick',)
        print(f'first:{id(name_tuple)}')
        

        first:4394454152

        6.可变不可变:

        不可变

        7.元组和列表的区别

        l = ['a', 'b', 'c']
        print(f"id(l[0]): {id(l[0])}")
        l[0] = 'A'
        print(f"id(l[0]): {id(l[0])}")
        
        id(l[0]): 4357367208
        id(l[0]): 4357775176
        

        列表可变的原因:索引对应的内存地址是可以改变的

        元组不可变的原因:索引对应的值得内存地址是不可以改变的

        索引对应的地址没有变,则元组的值不会变的

        t1 = (['a', 'b', 'c'], 'wc', 'office')
        
        print(f"id(t1[0]): {id(t1[0])}")
        print(f"id(t1[1]): {id(t1[1])}")
        print(f"id(t1[2]): {id(t1[2])}")
        
        t1[0][0] = 'A'
        print(f"t1[0][0]: {t1[0][0]}")
        print(f"id(t1[0]): {id(t1[0])}")
        print(f"t1: {t1}")
        
        id(t1[0]): 4394709960
        id(t1[1]): 4374626968
        id(t1[2]): 4394453568
        t1[0][0]: A
        id(t1[0]): 4394709960
        t1: (['A', 'b', 'c'], 'wc', 'office')
        

    7. 字典类型的内置方法

    1. 字典类型内置方法(dict)

      1. 用途:存多个值,但每个值对应一个键,键相当于列表隐藏的索引,所以取值方法和列表有些类似

      2. 定义

        {}内用逗号分隔开多个元素,每一个元素都是key:value的形式,value可以是任意数据类型,而key通常应该是字符串类型,但是key必须为不可变类型。

        dic = {'a': 1, 'b': 2}  # dic = dict({'a':1,'b':2})
        
        print(f"dic: {dic}")
        
        dic: {'a': 1, 'b': 2}
        
        dic = dict(a=1, b=2, c=3)
        
        print(f"dic: {dic}")
        
        dic: {'a': 1, 'b': 2, 'c': 3}
        
        dic = {1: 'a', 0: 'b'}
        
        print(f"dic[0]: {dic[0]}")  # 无法区分dic是列表,还是字典,并且key不再具有描述信息
        dic[0]: b
        dic = {[1,2]: 'a', 0: 'b'}  # 报错
        
        

        1.1 优先掌握

        1. 按key存值:可存可取

        2. 长度len

        3. 成员运算in和not in

        4. 删除del

        5. 键keys()、值values()、键值对items()

        6. 循环

          1. 按key取值

            # dic之按key存取值
            dic = {'a': 1, 'b': 2}
            
            print(f"first dic['a']: {dic['a']}")
            
            dic['a'] = 3
            
            print(f"second dic['a']: {dic['a']}")
            
            first dic['a']: 1
            second dic['a']: 3
            

            2.长度len

            # dic之长度len
            dic = {'a': 1, 'b': 2}
            
            print(f"len(dic): {len(dic)}")
            
            len(dic): 2
            

            3.成员运算in和not in

            # dic之成员运算in和not in
            dic = {'a': 1, 'b': 2}
            
            print(f"'a' in dic: {'a' in dic}")
            print(f"1 in dic: {1 in dic}")
            
            'a' in dic: True
            1 in dic: False
            

            4.删除

            # dic之删除del
            dic = {'a': 1, 'b': 2}
            del dic['a']
            
            print(f"dic.get('a'): {dic.get('a')}")
            
            dic.get('a'): None
            
            # dic之删除pop()
            dic = {'a': 1, 'b': 2}
            dic.pop('a')  # 指定元素删除
            
            print(f"dic.pop('b'): {dic.pop('b')}")
            print(f"dic.get('a'): {dic.get('a')}")
            
            dic.pop('b'): 2
            dic.get('a'): None
            
            # dic之删除popitem()
            dic = {'a': 1, 'b': 2}
            
            print(f"dic.popitem(): {dic.popitem()}")  # popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
            
            dic.popitem(): ('b', 2)
            

            5.键keys()、值values()、键值对items()

            # dic之键keys()、值values()、键值对items(),python2中取出的是列表(鸡蛋);python3中取出的是元组(鸡)
            dic = {'a': 1, 'b': 2}
            
            print(f"dic.keys(): {dic.keys()}")
            print(f"dic.values(): {dic.values()}")
            print(f"dic.items(): {dic.items()}")
            
            dic.keys(): dict_keys(['a', 'b'])
            dic.values(): dict_values([1, 2])
            dic.items(): dict_items([('a', 1), ('b', 2)])
            

            6.循环

            # dic之循环
            # dic是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序
            dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
            
            for k, v in dic.items():  # items可以换成keys()、values()
                print(k, v)
            
            a 1
            b 2
            c 3
            d 4
            

            1.2 需要掌握(****)

            1. get
            2. update
            3. fromkeys
            4. setdefault

            1.get()

            # dic之get()
            dic = {'a': 1, 'b': 2}
            
            print(f"dic.get('a'): {dic.get('a')}")
            print(f"dic.get('c'): {dic.get('c')}")
            
            dic.get('a'): 1
            dic.get('c'): None
            

            2.update()

            # dic之update()
            dic1 = {'a': 1, 'b': 2}
            dic2 = {'c': 3}
            dic1.update(dic2)
            
            print(f"dic1: {dic1}")
            
            dic1: {'a': 1, 'b': 2, 'c': 3}
            

            3.fromkeys()

            # dic之fromkeys()
            dic = dict.fromkeys(['name', 'age', 'sex'], None)
            
            print(f"dic: {dic}")
            
            dic: {'name': None, 'age': None, 'sex': None}
            

            4.setdefault()

            # dic之setdefault(),有指定key不会改变值;无指定key则改变值
            dic = {'a': 1, 'b': 2}
            
            print(f"dic.setdefault('a'): {dic.setdefault('a',3)}")
            print(f"dic: {dic}")
            print(f"dic.setdefault('c'): {dic.setdefault('c',3)}")
            print(f"dic: {dic}")
            dic.setdefault('a'): 1
            dic: {'a': 1, 'b': 2}
            dic.setdefault('c'): 3
            dic: {'a': 1, 'b': 2, 'c': 3}
            

            二.练习

            统计s='hello tank tank say hello sb sb'中每个单词的个数

            结果如:{'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}

            s='hello tank tank say hello sb sb'
            
            l=s.split()
            
            dic={}
            for item in l:
                if item in dic:
                    dic[item]+=1
                else:
                    dic[item]=1
            print(dic)
            
            {'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}
            

            4.存一个值or多个值:多个值,值可以是多个类型,key必须是不可变类型,通常应该是不可变类型中的字符串类型

            5.有序or无序:无序

            dic = {'a': 1, 'b': 2}
            print(f'first:{id(name)}')
            dic['a'] = 3
            print(f'second:{id(name)}')
            first:4356627632
            second:4356627632
            

            6.可变or不可变:可变数据类型

    8. 集合类型的内置方法

    1. 集合类型内置方法(set)

      集合可以理解为集合体

      pythoners = ['jason', 'nick', 'tank', 'sean']
      linuxers = ['nick', 'egon', 'kevin']
      
      # 即报名pythoners又报名linux的学生
      py_li_list = []
      for stu in pythoners:
          if stu in linuxers:
              py_li_list.append(stu)
      print(f"pythoners and linuxers: {py_li_list}")
      

      pythoners and linuxers: ['nick']

      由此可见,用列表方式求两个集合体的关系比较复杂,所以就有了集合数据类型

      2.定义

      **{}内用逗号分隔开多个元素,每个元素必须是不可变类型。 **集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合会打乱原来元素的顺序。

      s = {1, 2, 1, 'a'}  # s = set({1,2,'a'})
      
      print(f"s: {s}")
      
      s: {1, 2, 'a'}
      
      s = {1, 2, 1, 'a', 'c'}
      
      for i in s:
          print(i)
      
      1
      2
      c
      a
      s = set('hello')
      
      print(f"s: {s}")
      s: {'e', 'o', 'h', 'l'}
      

      1.1 优先掌握

      1. 长度len

      2. 成员运算in和not in

      3. |并集、union

      4. &交集、intersection

      5. -差集、difference

      6. ^对称差集、symmetric_difference

      7. ==

      8. 父集:>、>= 、issuperset

      9. 子集:<、<= 、issubset

        注意:以上的参数都为集合

    2. 练习

    9. 数据类型分类

    1. 按存值个数区分

      存值个数 数据类型
      单个值 数字,字符串,浮点型
      多个值(容器) 列表,元组,字典,集合
    2. 按可变不可变区分

      可变or不可变 数据类型
      可变 列表,字典,集合
      不可变 数字,字符串,元组,浮点型
    3. 有序无序之分

      有序or无序 数据类型
      有序(可按索引取值) 字符串,列表,元组
      无序 字典,集合
    4. 按访问类型区分

      访问类型 数据类型
      直接访问 数字
      顺序访问(序列类型) 字符串,列表,元组
      key值访问(映射类型) 字典
    5. 六大类型内置方法

  • 相关阅读:
    python day 6 time 库
    python day 5 基本数据类型
    20191206《信息安全导论》第六周学习总结
    第十节 数据流重定向
    第九节 简单的文本处理
    第八节 命令执行顺序控制与管道
    第七节 文件系统操作与磁盘管理
    第六节 文件打包与解压缩
    第五节 环境变量与文件查找
    第四节 Linux目录文件及文件基本操作
  • 原文地址:https://www.cnblogs.com/demiao/p/11254300.html
Copyright © 2011-2022 走看看