概念:计算及是根据指令操作数据的设备,具有功能性和可编程性。 发展:参照摩尔定律(Moore’s Law),表现为指数方式。 程序设计:计算及可编程性的体现。 程序设计语言:一种用于交互的人造语言。 编程语言的执行方式:编译和解释。 编译:将源代码一次性转换成目标代码的过程。 解释:将源代码逐条转换成目标代码同时逐条运行的过程。 静态语言:使用编译执行的编程语言,如C、C++、Java 脚本语言:使用解释执行的编程语言,如Python,JavaScript,PHP 程序的基本编写方法(IPO):Input输入 Process处理 Output输出
Python 译为蟒蛇,拥有者Python Software Foundation(PSF) PSF是非盈利组织,致力于保护Python语言开发,开源和发展 Python语言创立者:Gudio van Rossum Guido van Rossum正式对外发布Python版本的年份是:1991 2002年,Python 2.x 2008年,Python 3.x 官方环境:Python解释器+IDLE开发环境 高级环境:VS code 或 pycharm 编程方式:交互式和文件式
缩进表达程序的格式框架,Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例)。 注释用户提高代码可读性的辅助性文字,不被执行
# 单行注释
'''
多行注释
'''
变量:程序中用于保存和表示数据的占位符号 命名规则:大小写字母、数字、下划线和中文等字符的组合 注意事项:大小写敏感,首字符不能是数字 保留字:被编程语言内部定义并保留使用的标识符 Python有35个保留字(关键字)
and,elif,import,raise,global,
as,else,in,return,nonlocal,
assert,except,is,try,True,
break,finally,lambda,while,False,
class,for,not,with,None,
continue,from,or,yield,async,
def,if,pass,del,await
数据类型:字符串,整数,浮点型,列表
字符串:由0个或多个字符组成的有序字符序列,一对单引号或双引号表示
字符串有正向递增和反向递减两套序号体系
字符串序号:正向递增序列:0,1,2…. ,反向序列 … ,-2,-1
使用[]获取字符串中的一个或多个字符
索引:返回字符串中的单个字符 [index]
切片:返回字符串中一段字符子串 [M:N]
数字类型:整数和浮点数
列表类型:由0个或多个数据组成的有序序列,用[]表示,逗号隔开 ['A','B']
使用保留字in判断一个元素是否在列表中 'a' in ['a','b']
赋值语句:由赋值符号’=’构成的一行代码 分支语句:由判断条件决定程序运行方向的语句,使用保留字if,elif,else和末尾加冒号’:’构成条件语句分支结构 函数:根据输入参数产生不同输出的功能过程
input():从控制台获得用户输入的函数,可在括号中添加提示信息 print():以字符形式向控制台输出结果的函数,输出参数,以及格式化
eval(x)函数:去掉参数最外层引号并执行余下语句的函数
turtle:图形绘制函数库、标准库 turtle坐标系的原点默认在窗体正中间 turtle库最早成功应用于LOGO编程语言 turtle绘图体系以水平右侧为绝对方位的0度
turtle.setup(width, height, startx, starty) # 修改画布大小和起始点,默认为正中心
turtle.penup() / turule.pu() / turule.up() # 抬起画笔,之后移动画笔不绘制形状
turtle.pendown() / turtle.pd() / turtle.down() # 落下画笔,之后移动画笔将绘制形状
turtle.pensize(width) / turtle.width(width) # 修改画笔尺寸
turtle.done() # 用来停止画笔绘制,但绘图窗体不关闭
turtle.hideturtle() # 隐藏箭头显示
turtle.showturtle() # 开启箭头显示
turtle.goto() # 跳到指定坐标,直线跳转会留下两点直线痕迹
turtle.speed(v) # 画笔速度
turtle.fd(distance) / turtle.forward(distance) # 向前进,控制画笔直线前进长度
turtle.bk(distance) # 向后退,只能后退,但不改变方向,"后退"不是"转向"。
turtle.shape(x) # 画笔的形状
turtle.circle(radiuse, extent=None, setps=None)
# 控制画笔曲线(圆弧)前进长度 radiuss:半径 extent:圆弧角度,默认360度 setps:内切正多边形边数
turtle.seth(to_angle) / turtle.setheading(to_angle) # 修改前进角度
turtle.right(angle) # 向左转角度
turtle.left(angle) # 向右转角度
turtle.colormode(mode) # 修改画笔颜色模式
# -1.0:RGB小数值模式
# -255:RGB整数值模式
turtle.pencolor(color) # 修改画笔颜色
# color:字符串,RDB小数值或源组值
turtle.fillcolor(color) # 填充颜色
turtle.color(color1,color2) # 同时设置pencolor=color1,fillcolor=color2
turtle.begin_fill() # 开始填充
turtle.end_fill() # 结束填充
turtle.clear() # 清除turtle窗口,turtle位置和状态不改变
turtle.reset() # 清空窗口,重置turtle状态为起始状态
turtle.undo() # 撤销上一个turtle动作
turtle.isvisible() # 返回当前turtle是否可见
stamp() # 复制当前图形
turtle.write(s[,font=("font-name","font_size","font_type")]) # 添加文字,以及设置文字的风格
三种引用外部库的方法:
# 1 正常引用库
import <name>
<name>.<function>(value)
# 2 引用库中的模块 *为所有模块
from <name> import <name1,name2>
from <name> import *
<function>(value)
# 3 引用库并取别名
import <name> as <myname>
<myname>.<function>(value)
产生循环计算序列
range(N) # 0->N-1
range(N,M) # N->M-1
-十进制 -二进制 0b 0B -八进制 0o 0O -十六进制 0x 0X
科学计数法:e E
<a>e<b>
z=a+b*j
+ - * / //(整除) % **(幂次方)
二元操作符 x op=y
abs(x) # 绝对值
divmod(x,y) # 商余 =(x//y,x%y)
divmod(10,3) # = (3,1)
pow(x,y[,z]) # 幂余 =>(x**y)%z
pow(3,pow(3,99),10000) # =4587
round(x,d) # 对x四舍五入,d小数截取位数
max(x1,x2,..,xn) # 返回最大值
min(x1,x2,..,xn) # 返回最小值
int(x) # 返回整数部分,舍去小数部分
float(x) # 将x变为浮点数,增加小数部分
complex(X) # 将x变成复数,增加虚数部分 x+0j
单行字符串 '' ""
多行字符串 """ """ ''' '''
字符串序号:正向递增序列:0,1,2.... ,反向序列 ... ,-2,-1
索引:返回字符串中的单个字符 str[M]
切片:返回字符串中一段字符子串 str[M:N] ,mn省略为从开头或到结尾
[M:N:K] k为跳跃步长切片 -1逆序输出
转义符 \
\a # 蜂鸣,响铃
\b # 回退一格
\f # 换页
\n # 换行
\r # 回车
\t # 水平制表
\v # 垂直制表
\0 # NULL,什么都不做
a + b # 连接两个字符串
s * n # 复制n次s字符串
x in s # s是否包含子串x
len(x) 返回字符串x的长度
str(x) 转换x对应的字符串形式
hex(x) 将整数x的十六进制转成十六进制的字符串形势 0x111
oct(x) 将整数x的八进制转成八进制的字符串形势 0o111
chr(x) 将x的Unicode编码变为单字符
ord(x) 将x的单字符变为Unicode编码
str.lower() # 将字符串全部转为小写
str.upper() # 将字符串全部转为大写
str.jion(iter) # 将字符串中每个元素后添加一个iter,可做分隔
str.count(sub) # 计算str中出现子串sub的次数
str.split(sep=None) # 分隔形成一个列表 sep为分隔符
str.replace(old,new) # 将字符串str中的old子串全部替换成new子串
str.strip(chars) # 去掉头尾的的chars字符
str.center(width[,fillchar]) # 居中显示 填充
字符转换:
str.translate(table)
-根据table表对str进行转换
-table – 翻译表,翻译表是通过maketrans方法转换而来。
str.maketrans(intab, outtab [, deletechars])
-创建字符映射的转换表
-intab – 字符串中要替代的字符组成的字符串。
-outtab – 相应的映射字符的字符串
-deletechars – 字符串中要过滤的字符列表。
intab = 'abcde' # 原字符表
outtab = '12345' # 对照字符表
deltab = "is" # 过滤字符表
trantab = str.maketrans(intab, outtab) # 字符转换表
trantab2 = str.maketrans(intab, outtab, deltab) # 字符转换表
s = "this is translate and maketrans." # 原字符串
t_s = s.translate(trantab) # 转换字符串无过滤
t1_s = s.translate(trantab2) # 转换字符串有过滤
print(s) # 原字符串: this is translate and maketrans.
print(t_s) # 转换字符串: this is tr1nsl1t5 1n4 m1k5tr1ns.
print(t1_s) # 转换过滤字符串: th tr1nl1t5 1n4 m1k5tr1n.
# Caesar crypto
import string
str = input() # Beautiful is better than ugly.Explicit is better than implicit.
number = int(input()) # 3
def Caesar(str, number):
lower = string.ascii_lowercase #小写字母
upper = string.ascii_uppercase #大写字母
before = string.ascii_letters
after = lower[number:] + lower[:number] + upper[number:] + upper[:number]
table = ''.maketrans(before, after)
return str.translate(table)
print(Caesar(str, number)) # Ehdxwlixo lv ehwwhu wkdq xjob.Hasolflw lv ehwwhu wkdq lpsolflw.
<str>.format() 槽{}
格式控制 引导符号 冒号(:)
填充、对齐、宽度
ps:左< 右> 居中对齐^
`{0:*>10}.format("BIT") # *******BIT`
千位分隔符(,)、精度(.)、类型(整数类型:b,c,d,o,x,X 浮点数类型:e,E,f,%)
`{0:,.2f}.format(12345.6789) # 12,345.68`
# time库使用
time.<b>
# 时间获取:time() ctime() gmtime()
time.time() # 返回时间戳
time.ctime() # 返回字符串可读形式
time.gmtime() # 返回当前时间,计算及可处理时间格式
# 时间格式化
strftime(tp1,ts) # tp1:格式化模式 ts:时间
-%Y 年 -%m 月 -%d 日
-%H 时 -%M 分 -%S 秒
-%B 月份 -%b 月份缩写
-%A 星期 -%a 星期缩写
-%I 12小时 -%p 上下午(AM,PM)
strptime(str,tpl) # 将字符串转换为时间
# 程序计时
clock() # 返回调用时间,py3.8被遗弃 建议使用perf_counter()
perf_counter() # 返回调用的时间值
sleep(s) # 休眠时间
程序三种基本结构:顺序结构,循环结构,分支结构
if <条件>:
<语句块>
if <条件>:
<语句块1>
else:
<语句块2>
# 紧凑形式
<表达式1> if <条件> else <表达式2>
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
else:
<语句块3>
判断:操作符 组合:and、or、not
try:
<语句块1>
except: # except NameError: 异常类型
<语句块2> # 异常执行
else:
<语句块3> # 无异常执行
finally:
<语句块4> # 始终执行
for <循环变量> in <遍历结构>:
<语句块>
while <条件>:
<语句块>
break:跳出并结束当前整个循环,执行循环后的语句 continue:结束当次循环,继续执行后续次数循环 break和continue可以与for和while循环搭配使用
for/while+else:不用break退出时执行else语句
random:随机数、标准库、伪随机、蒙特卡罗法
# 基本:
random.seed(x) # x为初始化随机数种子,可以省略
random.random() # 生成一个[0,1.0)之间的一个随机小数
# 扩展:
random,randint(a,b) # 生成一个[a,b]之间整数
random.randrange(m,n[,k]) # 生成一个[m,n)之间以K为步长的随机整数
random.getrandbits(k) # 生成一个k比特长的随机整数
random.uniform(a,b) # 生成一个[a,b]之间的随机小数
random.choise(seq) # 从序列seq中随机选取一个元素
random.shuffle(seq) # 将seq序列中的元素随机排列,返回该序列
random.sample(pop,k) # 从pop类型中随机选取k个元素,返回该列表
def <函数名>(参数列表):
<函数体>
return <返回值列表>
# 可选参数
def <函数名>(<非可选参数>,<可选参数=Value>):
<函数体>
return <返回值列表>
# 可变参数传递
def <函数名>(<参数>, *b ) :
<函数体>
return <返回值>
# 等价于def自定义函数
<函数名>=lambda <参数列表>:<表达式>
全局变量、局部变量、返回值、参数:实参、形参 全局变量:函数体外的变量或这函数体内用global声明的变量 局部变量:函数体内的变量
代码复用 把代码当成资源进行抽象
函数 和 对象 是代码复用的两种主要形式
函数:将代码命名在代码层面建立了初步抽象
对象:属性和方法<a>.<b> 和 <a>.<b>()
在函数之上再次组织进行抽象
模块化设计 分而治之
递归中两个关键特征
递归不提高程序执行效率。 任何递归程序都可以通过堆栈或队列变成非递归程序(这是程序的高级应用)。
递归是数学归纳法思维的编程体现 常见递归:字符串反转、斐波那契数列、汉诺塔 常见分型图像:科赫雪花、康托尔集、谢尔宾斯基三角形、门格海绵、龙形曲线、空间填充曲线
# 常量
datetime.MINYEAR # 最小年份
datetime.MAXYEAR # 最大年份
# 常用
datetime.date # 日期表示类,年月日
datetime.time # 时间表示类,时分秒毫秒
datetime.datetime # 日期+时间
datetime.timedelta # 与时间间隔有关的类
datetime.tzinfo # 与时区有关的信息表示类
datetime.now() # 获得当前日期和时间对象
datetime.utcnow() # 获得当前日期和时间对应的UTC时间对象
# 属性:
.min # 固定返回datetime的最小时间对象,datetime(1,1,1,0,0)
.max # 固定返回datetime的最大时间对象,datetime(9999,12,31,59,59,999999)
.year .month .day # 年月日
.hour .minute .second # 时分秒
.microsecond # 毫秒
# 格式化方法
.isoformat() # 采用ISO 8601 标准显示时间
.isoweekday() # 返回星期几的值
.strftime(format) # 格式化字符串时间
# 格式化控制符
%Y %m %d # 数字年月日
%H %S %M # 数字时分秒
%X # 数字月日年
%x # 数字时分秒
%B %b # 月名单词/月名单词缩写
%A %a # 星期/星期缩写
# 68个内置函数
abs() id() round() complie() locals()
all() input() set() dir() map()
any() int() sorted() exec() memoryview()
asci() len() str() enumerate() next()
bin() list() tuple() filter() object()
bool() max() type() format() property()
chr() min() zip() frozenset() repr()
complex() oct() getattr() setattr()
dict() open() globals() slice()
divmod() ord() bytes() hasattr() staticmethod()
eval() pow() delattr() help() sum()
float() print() bytearray() isinstance() super()
hash() range() callble() issubclass() vars()
hex() reversed() classmethod() iter() __import()__
all():一般针对组合数据类型,所有元素都为True,返回True,否则返回False,0、空字符串、空列表[]被当成False
any():与all()相反,只要有一个元素为True,返回True,否则返回False
hash():对能够计算哈希的类型返回哈希值
id():对每个数据返回唯一编号
reversed():返回逆序后的组合类型
sorted():对一个序列进行排序,默认从小到大
type():返回对应数据的类型
map()+input()
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法
map() 函数语法:
map(function, iterable, ...)
参数
function -- 函数,有两个参数
iterable -- 一个或多个序列
# 将多个输入的数据进行转换
nums = list(map(int, input().split()))
官网:http://www.pyinstaller.org/ PyInstaller:第三方库、将.py源代码转换成无需源代码的可执行文件
# 安装
pip install pyinstaller
# 使用
pyinstaller -F <file_name.py>
pyinstaller -F text.py
# 参数
-h, --help 查看帮助
-v, --version 查看pyinstaller版本
--clean 清理打包过程中的临时文件
-D,--onedir 默认值,生成dist文件夹
-F,--onefile 在dist文件夹中只生成独立的打包文件
-i <icon_name.ico> 指定打包程序使用的图标文件ico
-p DIR, --paths DIR 添加Python文件使用的第三方库路径
# ps:
pyinstaller –i curve.ico –F SevenDigitsDrawV2.py
组合数据类型:序列、集合、映射 序列:字符串(str)、元组(tuple)、列表(list) 集合:集合(set) 映射:字典(map)
构成:无重复、无顺序的多个元素组合 创建集合:{}或set(),空集合只能用set() 集合类型主要应用于:包含关系比较、数据去重
# 操作符
S | T 并,返回一个新集合,包括在集合S和T中的所有元素
S - T 差,返回一个新集合,包括在集合S但不在T中的元素
S & T 交,返回一个新集合,包括同时在集合S和T中的元素
S ^ T 补,返回一个新集合,包括集合S和T中的非相同元素
S <= T 或 S < T 返回True/False,判断S和T的子集关系
S >= T 或 S > T 返回True/False,判断S和T的包含关系
S |= T 并,更新集合S,包括在集合S和T中的所有元素
S -= T 差,更新集合S,包括在集合S但不在T中的元素
S &= T 交,更新集合S,包括同时在集合S和T中的元素
S ^= T 补,更新集合S,包括集合S和T中的非相同元素
# 方法
S.add(x) 如果x不在集合S中,将x增加到S
S.discard(x) 移除S中元素x,如果x不在集合S中,不报错
S.remove(x) 移除S中元素x,如果x不在集合S中,产生KeyError异常
S.isdisjoint(T) 如何集合S与T没有相同元素,返回True
S.clear() 移除S中所有元素
S.pop() 随机返回S的一个元素,更新S,若S为空产生KeyError异常
S.copy() 返回集合S的一个副本
len(S) 返回集合S的元素个数
x in S 判断S中元素x,x在集合S中,返回True,否则返回False
x not in S 判断S中元素x,x不在集合S中,返回True,否则返回False
set(x) 将其他类型变量x转变为集合类型
具有先后关系可重复,有顺序的元素组合 序列:字符串、元组、列表 序列有序号,正向递增序号(从0开始),反向递减序号(到-1结束)
# 操作符
x in s 如果x是序列s的元素,返回True,否则返回False
x not in s 如果x是序列s的元素,返回False,否则返回True
s + t 连接两个序列s和t
s*n 或 n*s 将序列s复制n次
s[i] 索引,返回s中的第i个元素,i是序列的序号
s[i: j] 或 s[i: j: k] 切片,返回序列s中第i到j以k为步长的元素子序列
# 方法
len(s) 返回序列s的长度,即元素个数
min(s) 返回序列s的最小元素,s中元素需要可比较
max(s) 返回序列s的最大元素,s中元素需要可比较
s.index(x) 或 s.index(x, i, j) 返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x) 返回序列s中出现x的总次数
不可修改的序列 () 使用小括号 () 或 tuple() 创建,元素间用逗号’,’分隔,可以使用或不使用小括号
可修改的序列
使用方括号 [] 或 list()
创建,元素间用逗号 , 分隔
# 方法
ls[i] = x 替换列表ls第i元素为x
ls[i: j: k] = lt 用列表lt替换ls切片后所对应元素子列表
del ls[i] 删除列表ls中第i元素
del ls[i: j: k] 删除列表ls中第i到第j以k为步长的元素
ls += lt 更新列表ls,将列表lt元素增加到列表ls中
ls *= n 更新列表ls,其元素重复n次
ls.append(x) 在列表ls最后增加一个元素x
ls.clear() 删除列表ls中所有元素
ls.copy() 生成一个新列表,赋值ls中所有元素
ls.insert(i,x) 在列表ls的第i位置增加元素x
ls.pop(i) 将列表ls中第i位置元素取出并删除该元素
ls.remove(x) 将列表ls中出现的第一个元素x删除
ls.reverse() 将列表ls中的元素反转
列表排序 list.sort(key=None, reverse=False) key – 指定排序方法和排序参数 reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
# 字典键值对,自定义排序
def takeSecond(elem): # 排序函数
return elem[1]
s = "asdasdvaswqbasdbbb" # 随便打的一个字符串
d = dict()
for i in s:
d[i] = d.get(i, 0) + 1 # 统计次数,生成字典
print(d) # {'a': 4, 's': 4, 'd': 3, 'v': 1, 'w': 1, 'q': 1, 'b': 4}
l = list(d.items()) # 将字典转换为列表
print(l) # [('a', 4), ('s', 4), ('d', 3), ('v', 1), ('w', 1), ('q', 1), ('b', 4)]
l.sort(key=lambda x: x[1]) # 使用lambda表达式排序
print(l) # [('v', 1), ('w', 1), ('q', 1), ('d', 3), ('a', 4), ('s', 4), ('b', 4)]
l.sort(key=takeSecond, reverse=True) # 使用函数排序,并且逆序排序
print(l) # [('a', 4), ('s', 4), ('b', 4), ('d', 3), ('v', 1), ('w', 1), ('q', 1)]
序列类型应用场景 数据表示:元组 和 列表
映射,键值对
{}或dict()
创建,键值对用冒号: 表示# 方法
del d[k] 删除字典d中键k对应的数据值
k in d 判断键k是否在字典d中,如果在返回True,否则False
d.keys() 返回字典d中所有的键信息
d.values() 返回字典d中所有的值信息
d.items() 返回字典d中所有的键值对信息
d.get(k, <default>) 键k存在,则返回相应值,不在则返回<default>值
d.pop(k, <default>) 键k存在,则取出相应值,不在则返回<default>值
d.popitem() 随机从字典d中取出一个键值对,以元组形式返回
d.clear() 删除所有的键值对
len(d) 返回字典d中元素的个数
字典类型应用场景:映射的表达,元素遍历
jieba:第三方库、中文分词处理库
# 安装
pip install jieba
jieba分词的原理:jieba分词依靠中文词库
jieba分词的三种模式:精确模式、全模式、搜索引擎模式
方法:
jieba.cut(s) # 精确模式,返回一个可迭代的数据类型
jieba.cut(s,cut_all=True) # 全模式,输出文本s中所有可能的单词
jieba.cut_for_search(s) # 搜索引擎模式,适合搜索引擎建立索引的分词结果
jieba.lcut(s) # 精确模式,返回一个列表类型,建议使用
jieba.lcut(s,cut_all=True) # 全模式返回一个列表类型,存在冗余,建议使用
jieba.lcut_for_search(s) # 搜索引擎模式,返回一个列表类型的分词结果,存在冗余,建议使用
jieba.add_word(w) # 向分词词典中增加新词w
文件是数据的抽象和集合
文本文件 vs. 二进制文件
文本文件 文件是数据的抽象和集合
二进制文件 文件是数据的抽象和集合
文件处理的步骤: 打开-操作-关闭
# 文件操作
<变量名> = open(<文件名>, <打开模式>,[encouding="编码格式"])
open()、close()
# 打开模式
文件的打开模式 描述
'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError
'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖
'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError
'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容
'b' 二进制文件模式
't' 文本文件模式,默认值
'+' 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
# 文件打开
f = open("f.txt") - 文本形式、只读模式、默认值
f = open("f.txt", "rt") - 文本形式、只读模式、同默认值
f = open("f.txt", "w") - 文本形式、覆盖写模式
f = open("f.txt", "a+") - 文本形式、追加写模式+ 读文件
f = open("f.txt", "x") - 文本形式、创建写模式
f = open("f.txt", "b") - 二进制形式、只读模式
f = open("f.txt", "wb") - 二进制形式、覆盖写模式
# 文件关闭
file_name.close()
# 打开文件后采用close()关闭文件是一个好习惯,
# 如果不调用close(),当前Python程序完全运行退出时,该文件引用被释放,即程序退出时,相当于调用了close()。
read()、white()
# 读取
<f>.readall() 读入整个文件内容,返回一个字符串或字节流*
<f>.read(size=-1) 读入全部内容,如果给出参数,读入前size长度
<f>.readline(size=-1) 读入一行内容,如果给出参数,读入该行前size长度
<f>.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行
# 写入
<f>.write(s) 向文件写入一个字符串或字节流
<f>.writelines(lines) 将一个元素全为字符串的列表写入文件
<f>.seek(offset) 改变当前文件操作指针的位置,offset含义:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾
基本思路
理解方法思维
应用问题的扩展
维度:一组数据的组织形式 数据处理:python与文件之间的数据转换
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组和集合等概念 二维数据:由多个一维数据构成,是一维数据的组合形式,表格 多维数据:由一维或二维数据在新维度上扩展形成 高维数据:仅利用最基本的二元关系展示数据间的复杂结构,对应字典 数据维度是数据的组织形式
数据的操作周期:存储 <->表示 <-> 操作
一维数据的表示 数据有序:使用列表类型,可以用for遍历 数据无序:使用集合类型,可以用for遍历
一维数据的存储: 空格分隔:
一维数据的读入处理 从空格分隔的文件中读入数据 从特殊符号分隔的文件中读入数据
一维数据的写入处理 采用空格分隔方式将数据写入文件 采用特殊分隔方式将数据写入文件
二维数据的表示 使用列表类型 双重列表
CSV数据存储格式 CSV: Comma-Separated Values
二维数据的存储 按行存?按列存?
ls[row][column]
,先行后列读写处理:双重列表+.split()和.join()
wordcloud:第三方库、词云库
pip install wordcloud # 安装
使用: wordcloud库把词云当作一个WordCloud对象
步骤: 配置对象参数 加载词云文件 输出词云文件
文本-> ① 分隔: 以空格分隔单词 ② 统计: 单词出现次数并过滤 ③ 字体: 根据统计配置字号 ④ 布局: 颜色环境尺寸 ->词云
# 常用方法
w = wordcloud.WordCloud() # 以WordCloud对象为基础,配置参数、加载文本、输出文件
w.generate(txt) # 向WordCloud对象w中加载文本txt
w.to_file(filename) # 将词云输出为图像文件,.png或.jpg格式
# ps
import wordcloud
c = wordcloud.WordCloud() # 步骤1:配置对象参数
c.generate("wordcloud by Python") # 步骤2:加载词云文本
c.to_file("pywordcloud.png") # 步骤3:输出词云文件
# 配置对象参数
width 指定词云对象生成图片的宽度,默认400像素
height 指定词云对象生成图片的高度,默认200像素
min_font_size 指定词云中字体的最小字号,默认4号
max_font_size 指定词云中字体的最大字号,根据高度自动调节
font_step 指定词云中字体字号的步进间隔,默认为1
font_path 指定字体文件的路径,默认None
max_words 指定词云显示的最大单词数量,默认200
stop_words 指定词云的排除词列表,即不显示的单词列表
mask 指定词云形状,默认为长方形,需要引用imread()函数
# ps
from scipy.misc import imread
mk=imread("pic.png")
w=wordcloud.WordCloud(mask=mk)
扩展
PIL:第三方库,图像处理,图像归档 图像归档:对图像进行批处理,生成图像预览,图像格式转换等 图像处理:图像基本处理,像素处理,颜色处理
# 安装
pip install pillow
# 子库
Image、ImageChops、ImageColor、ImageCrackCode、ImageDraw、
ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、
ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、
ImageQt、ImageSequence、ImageStat、ImageTk、ImageWin
Image是PIL最重要的类,代表一张图片
# 引入Image类
from PIL import Image
# Image类的图像读取和创建方法
Image.open(filename) # 加载图像文件
Image.new(mode,size,color) # 根据参数创建一个新的图像
Image.open(StringIO.StringIO(buffer)) # 从字符串中获取图像
Image.frombytes(mode,size,data) # 根据像素点data创建图像
Image.verify() # 对图像文件完整性进行检查,返回异常
# Image类处理图像的常用属性
Image.format # 标识图像格式或来源,如果图像不是从文件读取,值为None
Image.mode # 图像的色彩模式,L为灰度图像,RGB为真彩色图像,CMYK为出版图像
Image.size # 图像宽度和高度,单位px,返回值是二元元组tuple
Image.palette # 调色板属性,返回一个ImagePalette类型
# open打开图像第一帧 读取序列类图像文件,如GIF、FLI、FLC、TIFF
Image.seek(frame) # 跳转并返回图像中的指定帧
Immage.tell() # 返回当前帧的序号
# Image类的图像转换和保存方法
Image.save(filename,format) # 将图像保存为filename文件名,format文件格式
Image.convert(mode) # 使用不同的参数,转换图像为新的模式
Image.thumbnail(size) # 创建图像的缩略图,size是缩略图尺寸的二元元组
# Image类的图像旋转和缩放
Image.resize(size) # 按size大小调整图像,生成副本
Image.rotate(size) # 按angle角度旋转图像,生成副本
# Image类的图像像素和通道处理方法
Image.point(func) # 根据函数func的功能队每个元素进行计算,返回图像副本
Image.split() # 提取RGB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands) # 合并通道,其中mode表示色差,bands表示新的色彩通道
Image.blend(im1,im2,alpha) # 将两幅图像im1和im2按照公式插值后生成新的图像:im1*(1.0-alpha)+im2*alpha
# ImageFilter类的预定义过滤方法
ImageFilter.BLUR # 图像的模糊效果
ImageFilter.CONTOUR # 图像的轮廓效果
ImageFilter.DETAIL # 图像的细节效果
ImageFilter.EDGE_ENHANCE # 图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE # 图像的阈值边界加强效果
ImageFilter.EMBOSS # 图像的浮雕效果
ImageFilter.FIND_EDGES # 图像的边界效果
ImageFilter.SMOOTH # 图像的平滑效果
ImageFilter.SMOOTH_MORE # 图像的阈值平滑效果
ImageFilter.SHARPEN # 图像的锐化效果
# ImageEnhance类的图像增强和滤镜方法
ImageEnhance.enhance(factor) # 对选择属性的数值增强factor倍
ImageEnhance.Color(im) # 调整图像的颜色平衡
ImageEnhance.Contrast(im) # 调整图像的对比度
ImageEnhance.Brightness(im) # 调整图像的亮度
ImageEnhance.Sharpness(im) # 调整图像的锐度
CSV:标准库,操作CSV的功能
json:处理JSON格式的标准库 json库包含两个过程:编码和解码,序列号和反序列化
# json方法
json.dumps(obj,sort_keys=False,indent=None) # 将python的数据类型转换为JSON格式,编码
json.loads(string) # 将JSON格式字符串转换成python的数据类型,解码
json.dump(obj,fp,sort_keys=False,indent=None) # 与dumps功能一致,输出刀文件fp
json.load(fp) # 与loads功能一致,从文件fp中读取
人类思维特征
计算思维 抽象问题的计算过程,利用计算机自动化求解
计算思维与程序设计 编程是将计算思维变成现实的手段
开源运动、开源思想深入演化和发展 没有顶层设计、以功能为单位、具备三个特点
计算生态与Python语言
计算生态的价值 创新:跟随创新、集成创新、原始创新
计算生态的运用 刀耕火种 -> 站在巨人的肩膀上
优质的计算生态(第三方库):http://python123.io
理解和运用计算生态
用户体验 实现功能 -> 关注体验
提高用户体验的方法 -进度展示 -异常处理 -其他方法:打印输出、日志文件、帮助信息
软件程序 -> 软件产品 用户体验是程序到产品的关键环节
软件产品=程序功能+用户体验
IPO:输入、处理、输出 -确定IPO:明确计算部分及功能边界 -编写程序:将计算求解的设计变成现实 -调试程序:确保程序按照正确逻辑能够正确运行
自顶向下设计:将项目细化成每个小模块直至可以简单的实现 模块化设计:通过函数或对象封装将程序划分为模块及模块间的表达,分而治之,模块内部紧耦合、模块之间松耦合 配置化设计:程序引擎+配置文件 -引擎+配置:程序执行和配置分离,将可选参数配置化 -将程序开发变成配置文件编写,扩展功能而不修改程序 -关键在于接口设计,清晰明了、灵活可扩展
从应用需求到软件产品
-Python社区:https://pypi.org/ -三种安装方法:pip、Anaconda、文件安装
# 常用的pip命令
pip -h # 查看帮助说明文档
pip install <name> # 安装指定的第三方库
pip install -U <name> # 使用-U标签更新已安装的指定第三方库
pip uninstall <name> # 卸载指定的第三方库
pip download <name> # 下载但不安装指定的第三方库
pip show <name> # 列出某个指定第三方库的详细信息
pip search <name> # 根据关键词在名称和介绍中搜索第三方库
pip list # 列出当前系统已经安装的第三方库
Anaconda:https://www.continuum.io
下载编译后的文件安装: UCI官网:https://www.lfd.uci.edu/~gohlke/pythonlibs/ UCI文件安装方法:安装name库
os库基本介绍 os库提供通用的、基本的操作系统交互功能(Windows、Mac OS、Linux)
# 路径:path用于操作和处理文件路径
os.path # 子库
os.path.abspath(path) # 返回path在当前系统中的绝对路径
os.path.normpath(path) # 归一化path的表示形式,统一用\\分隔路径
os.path.relpath(path) # 返回当前程序与文件之间的相对路径 (relative path)
os.path.dirname(path) # 返回path中的目录名称
os.path.basename(path) # 返回path中最后的文件名称
os.path.join(path,*paths) # 组合path与paths,返回一个路径字符串
os.path.exists(path) # 判断path对应文件或目录是否存在,返回True或False
os.path.isfile(path) # 判断path所对应是否为已存在的文件,返回True或False
os.path.isdir(path) # 判断path所对应是否为已存在的目录,返回True或False
os.path.getatime(path) # 返回path对应文件或目录上一次的访问时间
os.path.getmtime(path) # 返回path对应文件或目录最近一次的修改时间
os.path.getctime(path) # 返回path对应文件或目录的创建时间
os.path.getsize(path) # 返回path对应文件的大小,以字节为单位
# 进程管理
os.system(command) # 执行程序或命令command,在Windows系统中,返回值为cmd的调用返回信息
# 环境参数
os.chdir(path) # 修改当前程序操作的路径
os.getcwd() # 返回程序的当前路径
os.getlogin() # 获得当前系统登录用户名称
os.cpu_count() # 获得当前系统的CPU数量
os.urandom(n) # 获得n个字节长度的随机字符串,通常用于加解密运算
#库名 用途 pip安装指令
NumPy N维数据表示和运算 pip install numpy
Matplotlib 二维数据可视化 pip install matplotlib
PIL 图像处理 pip install pillow
Scikit-Learn 机器学习和数据挖掘 pip install sklearn
Requests HTTP协议访问及网络爬虫 pip install requests
Jieba 中文分词 pip install jieba
Beautiful Soup HTML和XML解析器 pip install beautifulsoup4
Wheel Python 第三方库文件打包工具 pip install wheel
PyInstaller 打包Python源文件为可执行文件 pip install pyinstaller
Django Python 最流行的Web开发框架 pip install django
Flask 轻量级Web开发框架 pip install flask
WeRoBot 微信机器人开发框架 pip install werobot
SymPy 数学符号计算工具 pip install sympy
Pandas 高效数据分析和计算 pip install pandas
Networkx 复杂网络和图结构的建模和分析 pip install networkx
PyQt5 基于Qt的专业级GUI开发框架 pip install pyqt5
PyOpenGL 多平台OpenGL开发接口 pip install pyopengl
PyPDF2 PDF文件内容提取及处理 pip install pypdf2
docopt Python命令行解析 pip install docopt
PyGame 简单小游戏开发框架 pip install pygame
import os
libs = {"numpy", "matplotlib", "pillow", "sklearn", "requests",\
"jieba", "beautifulsoup4", "wheel", "networkx", "sympy",\
"pyinstaller", "django", "flask", "werobot", "pyqt5",\
"pandas", "pyopengl", "pypdf2", "docopt", "pygame"}
try:
for lib in libs:
os.system("pip install " + lib)
print("Successful")
except:
print("Failed Somehow")
自动化脚本+
数据表示->数据清洗->数据统计->数据可视化->数据挖掘->人工智能
霍兰德人格分析
目标+沉浸+熟练
艺术之于编程,设计之于编程
Python网络爬虫与信息提取 Python数据分析与展示 Python机器学习应用 Python科学计算三维可视化 Python+大数据+人工智能 Python+嵌入式+可编程硬件
1、基本数据类型 -整数、浮点数、复数 -字符串
2、程序的控制结构 -分支结构与异常处理 -遍历循环、无限循环
3、函数和代码复用 -函数定义和使用 -函数递归
4、组合数据类型 -集合 -序列:元祖和列表 -字典
5、文件和数据格式化 -文件的使用 -一二维数据的表示存储和处理
1、turtle -基本图形绘制 2、time库 -时间的基本处理 3、random -随机数产生及应用 4、PyInstaller -源代码打包为可执行文件 5、jieba -简洁的中文分词 6、os -操作系统小功能 7、wordcloud -中英文词云生成
1、从数据处理到人工智能 -数据分析 -数据可视化 -文本处理 -机器学习
2、从web解析到网络空间 -网络爬虫 -Web信息提取 -Web网站开发 -网络应用开发
3、从人机交互到艺术设计 -图形用户界面 -游戏开发 -虚拟现实 -图形艺术
-实例1:温度转换 -实例2:Python蟒蛇绘制 -实例3:天天向上的力量 -实例4:文本进度条 -实例5:身体质量指数BMI -实例6:圆周率的计算 -实例7:七段数码管绘制 -实例8:科赫雪花小包裹 -实例9:基本统计值计算 -实例10:文本词频统计 -实例11:自动轨迹绘制 -实例12:政府工作报告词云 -实例13:体育竞技分析 -实例14:第三方库安装脚本 -实例15:霍兰德人格分析雷达图 -实例16:玫瑰花绘制
-Python网络爬虫与信息提取 -Python数据分析与展示 -Python机器学习应用 -Python科学计算三维可视化 -Python+大数据+人工智能 -Python+嵌入式+可编程硬件
Python学习还是只能用于扩展自己,要深入学习更多的知识掌握更多的能力,才能够在计算机中立足。 好好学习,天天向上!
学习资源: 中国大学生MOOC Python语言程序设计 国家精品 嵩天老师:https://www.icourse163.org/course/BIT-268001