P1 序章
python牛牛牛
配套书籍《零基础入门学习python》
P2 环境搭建和课程介绍
安装:https://www.python.org/downloads/
打开安装包——Add Python 3.7 to PATH——Install Now
IDLE 交互模式 编辑器模式
print("hello world")
配套资源:鱼C论坛——python交流——零基础入门学习python【第二版】
知识点备忘 课后作业 扩展阅读 速查宝典 奇技淫巧
太棒了大家快去看
小彩蛋import this 论坛上还有彩蛋
P3 用Python设计第一个游戏
编辑器模式:打开IDLE——File——New File
自己输一遍:

Ctrl+S保存 Run——RunModule运行
新手可能遇到的问题:
1.标点符号是否全英文?
修改编辑器字体,增大中英文标点差异:Options——Configure IDLE——Fonts/Tabs——Consolas——Apply
2.缩进是否正确?
python3代码样式指导手册中文版见论坛
3.函数拼写是否正确?
dir(__builtins__)查看python所有内置函数
P4 变量和字符串(上)
变量:名字 创建后使用变量名可直接访问改变量
= 赋值
变量名由字母、数字、下划线构成,不能以数字开头
变量名区分大小写
中文字符可以作为变量名!
交换变量的值:
1.x = 3
y = 5
z = x
x = y
y = z
print(x,y)
2.x,y = y,x
print(x,y)
字符串
Alt+P上一句代码
单双引号避免冲突:

转义字符

print('\"life is short,let\'s learn Python.\"')
P5 变量和字符串(下)
原始字符串:在字符串第一个引号前加小写字母r,转义字符将不再有效
换行:Ctrl+J
反斜杠放到字符串末尾表示这事还没完,文末不能有反斜杠
不加反斜杠是没法用回车换行的
长字符串(Triple quoted) 三引号字符串 不用反斜杠直接实现换行
三个单引号或三个双引号均可,注意前后呼应,成双成对
字符串的加法和乘法 相加:拼接 乘法:复制
P6 是时候讲讲代码了
是时候讲讲代码了 P6 - 00:31
int() 转换成整数(只对数字类字符串有效)
条件分支语句

比较运算符 成立返回True,不成立返回False

<=中间不能有空格
注意缩进
P7 改进我们的小游戏(上)
改进我们的小游戏(上) P7 - 00:37
while循环

Ctrl+C强制停止运行
break语句 跳出一层循环
P8 改进我们的小游戏(下)
查找帮助文档:IDLE右上点help——Python Docs或者直接F1
导入模块:import 模块名
random.randint(1,10)随机获取1到10之间的整数
random生成的随机数可以被重现
随机数种子 默认情况下random使用系统时间作为随机数种子
random.getstate()获取随机数种子加工之后,随机数生成器的内部状态
setstate()获取状态,重新设置随机数
eg:

P9 数字类型(上)
整数(integers) 长度不受限制
浮点数(floating point numbers)会有误差!

精确计算浮点数需要decimal模块

科学计数法:0.00005->5e-05
复数:1+2j 实部虚部以浮点数形式存放
复数赋值给x,实部x.real,虚部x.imag
P10 数字类型(下)
数字运算

地板除:向下取整
x == (x//y)*y + (x%y)
abs也可返回复数的模
int不是四舍五入,是把小数直接截掉
pow(2,3) 2 ** 3
pow有第三个参数,可以将幂运算结果与第三个参数进行取余运算,比如pow(2,3,5) == 3 等价于2 ** 3 % 5
P11 布尔类型
bool()输出真假,等于零的结果是False,其他情况True

字符串只有空字符串是False
False

1 == True 0 == False
逻辑运算符


P12 短路逻辑和运算符优先级
短路逻辑:从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值

运算符优先级:

P13 谋定而后动,知止而有得(上)
流程图

给人看的,不拘泥于形式
例子

例子(循环)

例子(函数)

P14 谋定而后动,知止而有得(下)
思维导图
例子

例子

P15 了不起的分支和循环(Ⅰ)
if有五种语法结构
“包含”靠缩进实现
1

2

3

4

P16 了不起的分支和循环(Ⅱ)
5 条件表达式

eg:

多行语句可用括号

分支结构的嵌套 :

P17 了不起的分支和循环(Ⅲ)
while循环:
while condition:
statement(s)
i = 1+1 等价于 i += 1
Ctrl+C 强制中断程序
break直接跳出该层循环,不执行循环剩余语句
Alt+P退回上一条语句
P18 了不起的分支和循环(Ⅳ)
continue:跳出本轮循环,直接进入下一轮循环

else:当循环条件不再为真的时候,else语句才会执行。
所以用break语句跳出时,else语句就不会执行

else可以非常容易地检测循环的退出状况

print后加end=‘ ’表示末尾不换行,加空格

循环结构的嵌套:(print()作用是换行) 例子:九九乘法表

break 和 continue只能作用于一层循环体
P18 了不起的分支和循环(Ⅴ)
for循环:

eg:len() 获取对象长度

range()生成数字序列,参数是整形

没start默认从0开始
range(10)生成0到9,range(11)生成0到10,即包含start,不包含stop
一加到一百万:

找出十以内素数:(地板除使输出是整数不是浮点数)

P20 列表(Ⅰ)
创建列表:中括号,不同元素逗号分隔
可容纳不同类型数据,可赋值给变量
访问列表元素,使用下标索引 eg:rhyme[0]表示该列表第一个元素
利用len():

访问最后一个元素可用下标-1,以此类推

列表切片:得到部分元素

第二个冒号后还可设置列表步进的跨度值,还能加负数,倒序输出

P21 列表(Ⅱ)
列表的诸多方法:增/删/改/查
增:append() 在列表末尾添加一个指定元素

extend() 允许添加一个可迭代对象

extend() 方法的参数必须是一个可迭代对象,新的内容是追加到原列表最后一个元素后面
切片方法:

insert(插入位置,插入元素)

删:remove() 删除一个指定元素

若有多个匹配元素,只会删除第一个; 指定元素不存在,会报错
pop() 删除指定下标元素,不加参数会删最后一个元素

clear() 清空列表

P22 列表(Ⅲ)
改 列表是可变的,而字符串是不可变的
单个元素可直接对应下标赋值替换
多个元素用切片替换:

原理:

数字排序:sort()(从小到大)

reverse():反转列表中元素

也可sort()加参数反转,得到从大到小

sort()加参数

查:count()查找有多少个指定元素

index() 查找某个元素索引值

多个相同元素会返回第一个元素下标值

index()可以加参数指定查找范围


copy()拷贝列表。赋值一个改变后另一个会跟着变,拷贝两者互不影响。

也可用切片拷贝

以上两种方式的拷贝是浅拷贝
P23 列表(Ⅳ)
列表的加法:拼接

列表的乘法:重复列表内部所有元素若干次

嵌套列表:

访问嵌套列表:
法一:嵌套循环

法二:下标

用循环创建和初始化二维列表:

用以下方法会出错:

is运算符(同一性运算符):同于检验两个变量是否指向同一对象
python对于不同对象的存储机制不同:



试图通过乘号对一个嵌套列表进行拷贝,其实拷贝的只是对同一个列表的引用
官方文档:列表(IV) P23 - 10:01
P24 列表(Ⅴ)
变量不是盒子:引用
将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量

如果想得到独立的列表,需用拷贝来完成任务
浅拷贝:
copy方法:

运用切片:

但如果是嵌套列表:浅拷贝只拷贝外层对象,如果包含嵌套对象,拷贝的只是其引用

深拷贝:要借助copy模块
import copy导入模块 注意区分,下面是copy模块的copy函数,之前用的是列表的copy方法
这里copy实现的还是浅拷贝:

deepcopy()深拷贝:将子对象一并进行了拷贝


为什么默认使用浅拷贝而不是深拷贝?效率
可能有两个纠结的问题:列表(V) P24 - 06:53
P25 列表(Ⅵ)
如何将列表中每一个数都乘二?

列表推导式:(效率比循环语句通常快上一倍)

基本语法:[expression for target in iterable]
eg:

eg:处理字符串

eg:ord()将每个字符转化为对应的Unicode编码

eg:获取矩阵第二列、主对角线上的元素

循环和列表推导式效果不完全一样,循环通过迭代逐个修改原列表中的元素,列表推导式直接创建一个新的列表然后赋值回变量名
P26 列表(Ⅶ)
回顾列表(VII) P26 - 00:27
用列表推导式:

列表推导式还可以添加一个用于筛选的if分句:
[expression for target in iterable if condition]

执行顺序:

筛选出F开头单词:

列表推导式可以嵌套:

将二维列表降级为一维列表:

如何理解?

外层循环放在前面,内层循环放在后面
例子:

终极语法:

例子:

程序设计原则:KISS Keep It Simple & Stupid
P27 元组
元组:(元素1,元素2,…)
元组可以不带括号,逗号隔开即可

也可通过下标获取元素:

元组不可变,不可修改内容
元组可用切片(经切片操作后导出新的对象):

元组只支持count和index方法

+ 和 *也可使用:

元组也可嵌套:加逗号

支持迭代:

也可用列表推导式生成列表:

没有元组推导式
建议圆括号加上
如何生成只有一个元素的元组?x = (520,)
打包:生成一个元组
解包:将元组n个元组一次性赋给n个变量名

其实这种行为适用于任何序列类型(如列表/字符串):

注意:赋值号左边元素数量必须跟右边序列的元素数量一致
多重赋值其实就是先通过元组打包,然后再将元组解包

单独一个下划线_表示一个匿名变量
元组中元素指向可变列表,依然可以修改列表中内容

P28 字符串(Ⅰ)
用字符串和切片判断回文数:

大小写字母换来换去:

注意!返回的不是原字符串,而是按规则生成一个新的字符串
x.capitalize() 首字母大写,其余字母小写
x.casefold() 所有字母小写(可以处理更多其它语言字符)
x.title() 所有单词首字母大写,其余字母小写
x.swapcase() 大小写反转
x.upper() 将所有字母大写
x.lower() 所有字母小写
左中右对齐:

以上分别为居中、左对齐、右对齐、用0填充左侧(这个做数据报表有用)
width小于字符串长度直接输出原字符串,大于则前三个方法是用空格填充,第四个注意下图有负号情形

若前三个方法填了fillchar参数(默认空格),可修改填充字符

P29 字符串(Ⅱ)
查找:

查找sub指定的子字符串在字符串中出现的次数:count(sub[,start[,end]])(左闭右开)

查找sub指定的子字符串在字符串中索引下标值:find(sub[,start[,end]])(从左往右找) rfind(sub[,start[,end]])(从右往左找)
定位不到子字符串,返回-1

查找sub指定的子字符串在字符串中索引下标值:index(sub[,start[,end]])(从左往右找) rindex(sub[,start[,end]])(从右往左找)
定位不到子字符串,会报错

替换:

expendtabs([tabsize]) 使用空格替换制表符,返回一个新的字符串,参数是一个tab等于多少个空格

python中更多使用空格
replace(old,new,count=-1) 将old指定的子字符串替换为new指定的新字符串,count是替换次数,默认-1(全部替换)

translate(table) 返回根据table(用于指定一个转换规则的表格)参数转化的新字符串
得到指定一个转换规则的表格:str.maketrans(x[,y[,z]])
"ABCDEFG"替换成 "1234567":

str.maketrans()方法还支持第三个参数,将指定的字符串给忽略

P30 字符串(Ⅲ)
判断:

startswith(prefix[,start[,end]]) 判断参数指定的子字符串是否出现在字符串的起始位置(方括号表示可选参数)

endswith(suffix[,start[,end]]) 判断参数指定的子字符串是否出现在字符串的结束位置

可选参数指定位置(左闭右开)