目录
一、Python基础知识
1.整数(int)与浮点数(float)
变量的声明:
Python
中变量在使用前或使用时必须先赋值,未经使用的变量不能出现在赋值号
“=”
的右
端。
可以多个变量同时赋相同值
或多个变量赋不同值
常用两种数字类型:整数(
int
)、浮点数(
flfloat
)
数字间的运算符
+ -(
可做负号或减号
) * / //(
整除号
) %(
取余号
) **(
取幂
)
对于相同精度都数字类型,结果一般也为同一精度,例如整数与整数作
+ - * // %
运算结果仍为整数。但
是对于除法,整数与整数间作除法得浮点数。
对于不同精度的数字进行运算,结果为更高精度的数字,例如整数与浮点数运算结果为浮点数。
小技巧:发挥取余和整除运算的特殊性质。利用
n%10
可以获得
n
的个位,
(n%100) //10
可获得十位。
n//100
可以获得
n
的前
x
位。同时运用整除和取余可以获得一个数字特定位数上的数字,强烈建议在想要
获取数字特定位数时使用数字运算而非转化为字符串的索引、切片。
数字间的比较运算符
< ,> ,<= ,>= ,== ,!=
。返回值为布尔值
True
、
False
,常用在
if
语句和
while
语句的判
断条件。
此外,关于
Python
中浮点数精度问题,由于计算机中储存数字均用二进制储存,而有些十进制小数无法
用有限的二进制小数表示,但是计算机实际运算时只会截取无限位数的前几十位,所以会造成一个小数的十进制结果与二进制结果不等价,就会出现如下的情况。
常用函数 abs bin pow round max min str
2.字符串(str)
创建一个字符串
a="abc123"
字符串有正向递增
(
第一位为
0)
和反向递减索引
(
倒数第一位为
-1)
索引、切片
(
有返回值,不改变原字符串
)
字符串的运算 + *(有返回值,不改变原字符串)
转义字符
成员运算符in,返回True 或False
格式化字符串 可以用
%
方法或
format
方法(补充前置
0
这些操作也可以通过字符串的加法与乘法来进行)
部分字符串函数
list ord chr replace split lower
3.列表(list)
Python中的列表为广义表,即表中所含的元素类型不唯一,但我们常把它当作狭义表来使用。
列表的索引与切片同字符串,但是索引获得的数据类型为对应位置元素类型,切片获得的数据类型为列
表。
列表
+ *(
乘法
) in
等同字符串中操作
修改列表元素
a[0]=b
注意不要超出索引
从列表删除同一元素的方法
列表初始化
列表的输出
列表函数:append count pop remove reverse sort index
4.选择结构(if-elif-else)
选择结构主要包含
if elif
以及
else
的用法 在使用这些语句时记得行末加上
':'
对于
if elif
的嵌套
因此一旦遇到
elif
,可以立刻将其属于前一个
if
对于
else
,同理,一个
if-else
或
if-elif-else
结构,仅会有一个出口运行程序
如果想多次单独判断多次输出结果,请多次使用
if
5.循环结构(for、while)
循环结构主要包含
while
语句和
for
语句。在使用这些语句时注意行末加上
':'
对于
while
语句,一定注意
while
的循环条件(在
while
的循环条件里不要出现
len
()函数,因为每次使
用
len
函数都会遍历一遍列表(字符串),会导致很多次重复计算,最好先赋值
l=len()
,再用
l
判断
for
语句
for语句一般有两种实现形式,但是其本质是一样的
continue 与 break
最后,由于
Python
中没有类似
c
语言的大括号来囊括需要运行的语句,因此缩进对于语句的归属尤为重要缩进通常为 一个tab
(四个空格)或直接四个空格,用来表达语句的所属关系
补充:关于选择结构与循环结构中
while
循环的判断条件。
正常来说,
if elif while
后应该跟一个布尔表达式,表达式的结果是
True
或
False
,想要用多个表达式共同判断可以用and or
以及加括号等方式,此外,数字也可以作为判断条件,
0
表示
False
,非
0
表示True。因此也可以这么写:
三、数据结构与算法
数据结构与算法部分的理解与应用较前一部分
Python
基础知识在难度上有较大的跨越,建议在理解大致
原理,理解典型例题的基础上再做一些练习。
1.栈与队列
栈:后进先出,单边操作
入栈,可以使用列表的
append
操作直接添加到列表尾,出栈可以使用
pop(-1)
,而且因为
pop
函数有返
回值,所以需要对出栈的元素做一些操作(比如输出)时可以用
x=l.pop(-1)
接收其值,当然也可以不接
收。
队列:先进先出,两端操作
入队,可以使用
append
直接添加到列表尾,出队可以使用
pop(0)
,或
x=l.pop(0)
实现栈的方法:
1.
定义类
2.
使用列表模拟
栈与队列的概念和操作相对好理解,但是做题时一般会有较多问题。
2.枚举与递归
枚举:把所有可能性的结果一一列举出来,并一一判断是否可行,属于一种较为简单、常用的方法。
枚举的好处:一般由几个
for
循环
+
判断语句构成,程序相对好写,但是效率不高,只能处理只能暴力找
答案的问题。
递归:函数调用自己的方法称为递归。递归函数的设计包含很重要的三个要素,递归状态,边界条件和
状态转移。在调用递归函数时,一般默认这个函数已经完成了它的功能。
例如:斐波那契数列,走楼梯
走楼梯问题描述:每次可以上一层、也可以上两层台阶,那么上到第n层有几种走法。
回溯:也成为试探,一般是从问题的某一种状态出发搜索这种状态的所有解,搜索完毕则再从另一种情
况除法找解。
例如:八皇后问题
3.贪心与DP
贪心:局部最优达到全局最优,在每一次选择时均选择最好的。
一般来说,贪心都需要进行排序,然后每次选择最优的解决方式。
DP
:把问题分解成若干个相互关联的子问题,先求解子问题,再通过子问题的解得出原问题的解。动
态规划包含三个要素:阶段,状态与状态转移方程。