01python基础学习笔记(未完待续)

你是慕鸢呀~ 发布于 2025-02-07 5 次阅读 6932 字 预计阅读时间: 32 分钟


01基础阶段

大纲

请求与相应

http协议相关

数据解析

代理、验证码、cookie等

相关的反爬技能

数据库

Playwright

三方抓包 工具

重要数据类型

列表数据类型(数据结构)

  • 在实际开发中,经常需要将一组(不止一个)数据存储起来,以便后边的代码使用。列表就是这样的一个数据结构。且列表是Python中最基本也是最常用的数据结构 之一

  • 什么是数据结构?

    • 通俗来讲,可以将数据结构当作是某种容器,该容器是用来装载或者存储数据的。不同的数据结构决定了对数据不同的组织方式。
    • 那么当数据被装载或者存储到了某个数据结构中后,那么就可以基于该数据结构的特性对数据进行不同形式的处理和运算
  • 列表的创建方式

    • 创建一个列表,只要把逗号分隔的不同的数据元素使用方括号括起来即可。列表内的元素,可以是其他任意类型的数据,可以多层嵌套列表,元素个数无限制。
    alist = [1,2,3,4,5]
    items = [1,'bobo',12.34]
    #列表中可以存储任意类型的数据
  • 列表元素

    • 存储在列表数据结构中的每一个数据被称为列表元素,简称元素
  • 列表索引(类似于c语言的数组)

    • 列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,以此类推。
  • 访问列表内的元素

    • 列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一。要访问它的某个元素,以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的索引超过范文,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1
    alist = [1,12.3,'bobo']
    print(alist[2]) #'bobo'
    print(alist[0:2]) #[1,12]
    print(alist[6]) #使用索引和切片的时候,不可以访问超出索引范围的元素
  • 修改元素的值

    • 直接对元素进行重新赋值
    alist = [1,12.3,'bobo']
    alist[1] = 100.123
    print(alist)
  • 删除元素

    • 使用del语句或者remove(),pop()方法删除指定的元素。
    alist = [1,12.3,'bobo']
  • 切片

    • 切片指的是对序列进行截取,选取序列中的某一段

    • 切片的语法是: list[start:end]

      #同字符串的切片机制一样
      alist = [1,12.3,'bobo','jay','hello']
      print(alist[:-1])
    • 以冒号分割索引,start代表起点索引,end代表结束点索引。省略start表示以0开始,省略start表示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开!也就是说[1:4]会截取列表的索引为1/2/3的3个元素,不会截取索引为4的元素。分片不会修改原有的列表,可以将结果保存到新的变量,因此切片也是一种安全操作,常被用来复制一个列表,例如newlist = lis[:]。

    • 切片过程中还可以设置步长,以第二个冒号分隔,例如list[3:9:2],表示每隔多少距离取一个元素。

  • 列表的内置方法

    • 上文中我们说过,数据存储到不同的数据结构中,可以基于该数据结构的特性对数据进行指定形式的操作和处理。下图中的方法是列表专有的内置方法,请熟记于心。

    • 作用 方法
      append() 在列表末尾添加新的对象
      count() 统计某个元素在列表中出现的次数
      extend() 在列表末尾一次性追加另一个序列中的多个值
      index() 从列表中找出某个值第一个匹配项的索引位置
      insert() 将对象插入列表
      pop() 移除列表中的一个元素(默认最后一个),并且返回该元素的值
      remove() 移除列表中某个值的第一个匹配项
      reverse() 反向列表中的元素
      sort() 对原列表进行排序
      copy() 复制列表
      clear() 清空列表,等于del list[:]
    alist = ['bobo',"18","99.5",'北京']
    #将列表转换成字符串
    ret = '-'.join(alist) #将列表中的每个列表元素根据-为间隔进行拼接,返回字符串结果
    print(ret)
    
    #如何将字符串转化为列表
    s = 'hello-name-bobo-age'
    ret = s.split('-')
    print(ret)
    
    alist = [3,8,5,7,6,2,1]
    alist.sort() #对列表元素进行排序
    print(alist)
    
    a = [1,2,3]
    a.append('bobo') #向列表尾部添加一个元素
    print(a)
    
    a1 = [1,2,3]
    a1.insert(1,999) #向列表下标为1的位置添加一个元素
    print(a1)
    

字典数据类型

  • 字典的实现机制:

    • Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查询和插入速度。
  • 字典特性:

    • 字典包含的元素个数不限,值的类型可以是任何数据类型,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查询和插入速度
  • 字典特性:

    • 字典包含的元素个数不限,值的类型可以是任何数据类型!但是字典的key必须是不可变的对象,例如整数、字符串、bytes和元组,最常见的还是将字符串作为key。列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的(基于哈希),但值则不必。
    • 注意:从Python3.6开始,字典是有序的!它将保持元素插入时的先后顺序,务必注意!
  • 创建字典

    • 字典的每个键值对用冒号(:)分割,每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中,例如:

    • d = {key1:value1,key2:value2}

      #键值对: key:value
      #key:只能使用不可变类型的数据充当,通常使用字符串
      #value: 任意数据类型的值充当
      #字典中无法存储重复的键值对
      dict_1 = 
      {'name':'bobo','age':'18','score':'100','age':'18'}
      #注意:不要在字段中存储相同的key,value可以相同
      dict_2 = {'name':'bobo','age':18,'age':20}
      print(dict_2)
  • 访问字典

    • 虽然现在的字典在访问时有序了,但字典依然是集合类型,部署序列类型,因此没有索引下标的概念,更没有切片的说法。但与list类似的地方是,字典采用把相应的键放入方括号内获取对应值的方式取值。
    d = {'name':'bobo','age':18,'scrores':[100,220,99]}
    #根据key访问对应的value值
    print(d['name'],d['scores']) #依次访问name和scores对应的值
    print(d.get('name')) #通过get使用对应的key访问对应的value值
    
    #注意:使用[]访问不存在的key对应的value值程序会报错
    # print(d['address']) #程序报错
    
    # 注意:使用get访问不存在的key程序不会报错,但是会返回None这个空值
    print(d.get('address'))
  • 添加和修改

    • 增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个值,所以,多次对一个key赋值,后面说的值会把前面的值覆盖掉。
    d = {'name':'bobo','age':20,"scores":[100,200,99]}
    d['name'] = 'jay'  #给存在的key修改对应的value值
    d['address'] = 'BeiJing' #给一个不存在的值赋值表示新增键值对
    del d['age']  #删除age键值对
    print(d)
  • 删除字典元素、清空字典元素、清空字典和删除字典

    • 使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典。
    d = {'name':'bobo','age':'20',"scores":[100,120,99].'name':'bobo'}
    del d['name']
    print(d)
    
    d = {'name':'bobo','age':20,"scores":[100,120,99],'name':'bobo'}
    del d
    print(d)
    
    d = {'name':'bobo','age':20,"scores":[100,120,99],'name':'bobo'}
    d.clear()
    print(d)
  • 字典的重要方法

    d = {'name':'bobo','age':20,"scores":[100,120,99],'name':'bobo'}
    print(d.key()) #返回字典中所有的key
    print(d.values())  #返回字典中所有的value
    print(d.items())   #返回字典中所有的键值对

练习

  • 写一个程序,输出100以内的所有偶数,直到累加和大于1000.

    #写一个程序,输出100以内的所有偶数,直到累加和大于1000.
    suam = 0
    for i in range(101):
      if i % 2 == 0:
          if suam >= 1000:
              break
          suam += i
          #print(i)
    print(suam)
  • 已知a+b+c =1000且a^2+b^2=c^2(a,b,c都是自然数),求出符合条件的a,b,c的所有组合。

    #已知a+b+c =1000且a^2+b^2=c^2(a,b,c都是自然数),求出符合条件的a,b,c的所有组合。
    for a in range(1001):
      for b in range(1001):
          c = 1000 - a - b
          if a + b + c == 1000 and a**2 + b**2 == c**2:
              print(a, b, c)
  • 给定一个字符串test = "Hello World!",请统计字符串中每个字符的出现次数,并将结果存储在一个字典中。

    text = "hello world"
    tongji = {}
    for i in text:
      if i not in tongji:
          tongji[i] = 1
      else:
          tongji[i] += 1
    print(tongji)
  • 猜数字游戏设计: 可以不间断的进行猜数字游戏环境,找到猜对了,结束程序,猜不对,可有不断的进行游戏,并且需要提示用户猜大了还是猜小了。

    • 最后需要统计出,用户猜了多少次猜对。

    • 每一个用户的初始分数为100,每猜错一次扣5分,最后程序结束,统计用户的得分

    import random
    
    guess_num = random.randint(1,10)
    count = 0
    score = 100
    while 1:
        count += 1
        # 让用户输入数字
        num = int(input('输入一个数字:'))
        # 判断num和guess_num是否一样
        if num == guess_num:
            print('猜对了')
            break
        elif num < guess_num:
            print('猜小了')
            score -= 5
        else:
            print('猜大了')
            score -= 5
    
    print('一共猜的次数:',count)
    print('最后得分:',score)
    import random
    
    guess_num = random.randint(1,10)
    count = 0
    score = 100
    while 1:
        count += 1
        # 让用户输入数字
        num = int(input('输入一个数字:'))
        # 判断num和guess_num是否一样
        if num == guess_num:
            print('猜对了')
            break
        elif num < guess_num:
            print('猜小了')
            score -= 5
        else:
            print('猜大了')
            score -= 5
    
    print('一共猜的次数:',count)
    print('最后得分:',score)

函数

什么是函数?

所谓的函数其实就是Python语言中的一种工具,基于该工具可以完成不同的具体操作。想要将函数理解透彻,大家一定要善于映射生活,也就是说基于我们熟悉的生活场景来理解函数。因为,所有的编程语言都是人设计的,只要是人设计的,必然源于生活,当然,也有可能是基于别的编程语言习惯

函数分为内置函数和自定义函数

  • 内置函数:
    • 顾名思义,就是编程语言内置的内容,无需额外操作就可以直接调用的函数
  • 自定义函数
    • 当python开发者内置的函数无法满足编程需求时,我们就会根据自己的需要,重新开发适用的函数,这就是自定义函数
我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-02-07