临阵磨枪W9-W16

Tags
  • Python语言概述
  • Python是一种解释执行的面向对象编程语言(P9)
  • Python是完全面向对象的语言,所有的数据类型都是对象(P10)
  • 标识符的规则(P15)
  • 关键字(P16)
      notion imagenotion image
  • id()给出变量的地址,可以用来对比是否是同一个对象(P16)
  • input()输入的是一整行字符串(P17)
  • split()分割一行字符串
  • map()将列表中的多个字符串转成整数
  • print()输出一个值或多个值(P18)
  • end和sep的作用
  • 用Python语言编写程序
  • 基本类型:整数和浮点数(P23-26)
  • int()和float()函数(P27)
  • /和//的区别
  • 理解--和---这类运算
  • 浮点数相等的判断
  • 复数的表示和基本运算(P27)
  • 数学库和常用函数(P28)
  • 字符串
  • 转义字符(P30)
  • ⻓字符串的表示方法(P31)
  • 关系运算和逻辑运算(P32)
  • 注意优先级和复合运算
  • 列表(P35)
  • 列表变量是管理者,赋值是管理权的分享(P54)
  • 注意列表加法和乘法的计算
  • 列表和字符串的互相转换list(字符串)的结果
  • 内置转换函数(P36)
  • 注意ord和chr的用处
  • ord是字符到整数
  • chr是整数到字符
  • 语句
  • 赋值
  • if
  • for和range注意range的区间,尤其是步进为负数时的计算(P43)
  • range()所产生的数列是在for开始时就确定的(P42)
  • 列表推导式(P44)
  • 看作是forin的语法糖
  • 格式化输出(P46)
  • format函数
  • 书上format函数的格式控制也可以用于f字符串
  • 使用字符串、列表和元组
  • 序列的基本操作(表3-1)和P52
  • 下标的有效范围
  • 负的下标的意义
  • 切片(P53)
  • 步进和负的步进
  • 复制列表
  • 字符串
  • 字符串常用函数(表3-2)
  • 列表
  • 列表字面量是表达式
  • 列表不能和非列表运算
  • 列表元素的删除(del、remove、pop)的区别(P70)
  • del <列表元素>
  • L.remove(value)
  • L.pop(index)
  • 列表函数(表3-4)
  • split和join(P71)
  • split遇到连续的分隔符怎么办
  • join是字符串的函数
  • 两层列表构成的矩阵及其运算(P67)
  • 元组
  • 随机库
  • import random(P74)
  • random.random和random.randint(P74)
  • random.random()是返回左闭右开区间[0.0,1.0)的浮点数
  • random.randint(a,b)是返回闭区间[a,b]的随机整数
  • 条件、循环和其他语句
  • if...elif...else
  • while
  • break和continue(P90)

二分搜索(P97)

  • 对于已经排序的数据,可以使用二分法
  • 每次取中间位置上的数来测试,如果比目标大,则在低半段中搜索,否则在高半段中搜索
  • 直到...
  • 找到,或
  • 被测数据不存在
notion image
a=[11,14,...] x=int(input()) found=-1 left=0 right=len(a)-1 while left<=right: mid=(left+right)//2 if a[mid]>x: right=mid-1 elif a[mid]<x: left=mid+1 else: found=mid break print(found)
notion imagenotion image

冒泡排序

  • 选择和冒泡排序(P101)冒泡排序更会考
  • 冒泡
a=[80,58,...] for right in range(len(a),0,-1): for i in range(0,right-1): if a[i]>a[i+1]: a[i],a[i+1]=a[i+1],a[i] print(a)
  • 异常处理(P103)
  • try...except...else...finally
  • 集合和字典1. 字面量的表示方式
  • 集合特征和运算
  • 字典运算
  • 字典键的类型必须是不可变的类型(元组的元素也必须是不可变的)
  • []和get()的区别(P116)
  • get()如果找不到键又没有给它默认值,那就返回None
  • 字典的遍历是对键的遍历
  • 字典函数(表5-3)

函数

  • 函数定义
  • lambda(P125)
  • lambda 的⼀般形式是关键字lambda后⾯跟⼀个或多个参数,紧跟⼀个冒号,后⾯是⼀个表达式
  • 作为表达式,lambda返回⼀个值

函数参数

位置参数:按位置赋值
关键字参数:如 end=',', 指定对应参数的名字进行调用,甚至可以采用与函数定义不同的顺序调用
默认值参数:当调⽤⽅没有提供对应的参数值时,你可以指定默认参数值。如果你提供参数值,在调⽤时会代替默认值。
默认参数值在函数对象被创建时计算。不是在运行时新创建的。这辈子就创建一次。
不定⻓数⽬参数:*b将多个参数打包成元组。print函数参数:print(*object,sep=" ",end="\n",file=sys.stdout)
  • 当在行参前面加上*时,表示不定⻓参数,分别⽤来接收不带变量名的多余参数和带有变量名的多余参数,分别将它们以元组和字典的形式接收进函数。
  • 当在实参的前⾯加上*时,就意味着拆包:
  • 表示将序列拆成⼀个个单独的实参,
  • *则表示将字典拆成⼀个个单独的带变量名的实参
  • 位置参数和关键字参数混用(P127)
首先应该写位置参数,然后是关键字参数
  • 参数默认值(P128)默认值为列表等可变类型时,实际实现了函数内部的持久存储
当实参是不可变对象时,形参值改变不会影响实参!
当实参是可变对象时,形参值改变可能会影响实参!
  • 返回值,可以返回多个值(P135)
  • 返回的多个值和接收多个参数是一样的,以元组的形式打包传递
  • 全局变量vs局部变量
      notion imagenotion image
  • global(P136)
  • 递归
  • 递进不做计算,回归的时候做计算
  • 阶乘
    • notion imagenotion image
  • 斐波那契数列
    • notion imagenotion image
  • 学会手动执行递归程序
杨辉三角:
def yang(n): if n==1: r = [1] else: p = yang(n-1) s=0 r=[] for i in p: r.append(s+i) s=i r.append(1) print(r) return r

树状递归的记忆优化(使用全局变量字典)(P138)

notion imagenotion image
pre={0:1,1:1} def fib(n): if n in pre: return pre[n] else: newvalue=fib(n-1)+fib(n-2) pre[n]=newvalue#增加字典的条目 return newvalue

内置函数

sorted()函数

  • sorted()是制造新的容器,L.sort()是在原有列表修改
  • sorted(iterable ,key=None, reverse=False)reverse = False 升序(默认)。
  • 排序规则:
    • notion imagenotion image
  • map(function,iterable,...)对序列的每个函数调用function函数,iterable是序列,结果是迭代器
  • filter(f, sq) 函数的作用是对于 sq 的每个元素 s ,返回所有 f(s) 为 Trues 组成的 filter 对象, filter 对象对象本身是一个可枚举量
  • 偶数留下:
    • notion imagenotion image
  • 偶数留下再平方:map(square, filter(is_even, range(5)))
  • reduce:
    • notion imagenotion image
  • key参数(P140)
  • key=lambda t:t[n]
  • zip:将两列表转成元组的列表:print(list(zip(a,c))) # 元素个数与最短的列表⼀致
  • zip:字典键值互换:d1=dict(zip(d.values(),d.keys()))
  • eval(P141)
  • any():参数只要有一个是True,就返回True,参数都是False时,返回False。
  • all():参数都是True,才返回True,否则就是False。
  • enumerate
  • enumerate(sequence,[start=0]),start为下标起始位置。

文件

  • 打开文件的方式和模式(P150,表7-1)
      notion imagenotion image
  • 默认打开文本文件读
  • 文件的函数(表7-2)
      notion imagenotion image
  • 可以参考如何复制一个文件(例7-2)
      notion imagenotion image
  • Ctrl-D或Ctrl-Z结束输入
    • notion imagenotion image

类和对象

Python中对象的概念很⼴泛,Python中的⼀切内容都是对象,除了数值、字符串、列表、元组、字典、集合、range对象等等,函数也是对象,类也是对象。
类定义属性(数据)和行为(方法)的模版。Python的所有类型都是类,包括内置的int、str等等。
Python类是封装了变量和方法的复合数据类型。
  • 每个类有⾃⼰的名字空间,类名是空间名
  • 每个对象也有⾃⼰的名字空间
  • 存储在类名称空间中的名称是类的成员
  • 类成员包含
  • 类属性
  • 类⽅法
实例(instance):是⽤类产⽣的对象
使⽤圆点运算符(.)引⽤⽅法和属性
类中的函数称为方法,类中包含初始化方法和其他方法。
初始化方法总是被命名为__init__,这是一个特殊的方法,每当类创建新实例时,Python都会自动运行它。
  • OOP三大特性:封装、继承和多态(P175)
  • 定义类(P176)
  • 构造方法的名字(init),构造方法不能被主动执行(P176)
  • 成员函数的第一个参数都是self(P177)
  • 创建对象:类名()会自动调用构造函数(P177)
  • 对象的属性和值(P176)
  • 构造方法内对self的变量赋值形成了成员变量(属性)
  • 私有成员变量
  • 以一个下划线为前缀,格式如_xxx。它是受保护成员,不能用'from module import *'导入
  • 以两个下划线为前缀和两个下划线为后缀,格式如__xxx__。它是系统定义的特殊成员
  • 以两个下划线为前缀但不以两个下划线为后缀,格式如___xxx。它是私有成员,只有类内自己能访问,不能通过实例直接访问到这个成员。
  • 外部对不存在的成员变量的赋值给对象增加了新的成员变量