Python学习笔记
声明:
1、本文依据Mooc课程“Python语言程序设计”,北理工嵩天老师的课程。
2、推荐这门课作为一些非计算机专业学习,内容深入浅出,而且结合简单的实际应用进行讲解。
3、课程笔记,学习专用,未完,持续更新,后续学习进阶版也会更新。
4、欢迎学习交流,转载请先联系作者,盗版必究,尊重知识。
第一章 Python基本语法元素
1.1 程序设计的基本方法
1、计算机
#功能性:对数据的操作表现为数据计算、输入、输出和结果储存等
#可编程性:根据一系列指令自动地、可预测的、准确的完成操作者的意图。
2、摩尔定律Moore‘s Law
计算机史上最重要的预测法则:单位面积集成电路上可容纳晶体管的数量约每两年翻一番。
计算机发展是以指数方式的发展。
3、python
python诞生于1990年,是当今最好用的语言。
4、程序执行的两种方式
将源代码(人类可读)与目标代码(机器和某些顶尖专家可读)相互转换
#编译:将源代码一次性转换成目标代码的过程,使用编译执行的编程语言,如c、c++、Java等静态语言
静态语言 编译器一次性生成目标代码,优化充分,运行快
#解释:将源代码逐条转换为目标代码并同时逐条运行的过程,使用解释执行的编程语言称为脚本语言,如Python、js、php
脚本语言 执行程序时需要源代码,维护更灵活,可以跨多个操作系统平台
5、程序的基本编写方法
#IPO
I–input输入,程序的输入:文件、网络、控制台、交互界面、程序内部输入等
P–Process处理,程序的主要逻辑:算法
O–output输出,程序的输出:展示运算结果的方式
1.2 python开发环境配置
Python意为忙着,属于PSF,PSF是一个致力于保护Python语言开放、开源和发展的非营利组织。python的创始者是Guido。
网上方法很多,自己去学学即可,这里不再赘述,推荐大家安装Python后使用pycharm编译器,主要是后续学习与科研工作中安装各种库简单到install xxx
即可。
1、python的两种编程方式
交互式和文件式
#交互式
对每个输入语句即时运行结果,适合语法练习
#文件式
批量执行一组语句并运行结果,编程的主要方式
1.3 摄氏度和华氏温度转换
输入输出格式:82F–华氏82度,28C–摄氏28度
算法设计:根据转换公式:C=(F-32)/1.8,F=C*1.8+32
#TempConvert.py
TempStr = input("请输入温度值:")
if TempStr[-1] in ['F','f']:
C = (eval(TempStr[0:-1])-32/1.8)
print("转换后温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]+32)
print("转换后温度是{:.2f}F".format(F))
else:
print("输入格式有误")
1.4 1.3代码解析
#缩进
表达程序的格式框架,表达代码间包含和层次关系的唯一手段,单一程序内锁紧长度相同即可,一般用4个空格或者1个tab
#注释
#开头,其后内容为注释,单行注释;’’'开头和结尾表示多行注释
#变量
用来保存和表示数据的占位符号
#命名
大小写字母、数字、下划线、汉字等字符的组合
注意事项:大小写敏感、首字母不能是数字,不与保留字相同
#保留字
编程语言内部定义的并保留使用的标识符,即关键词
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 | |
def | if | pass | del |
#数据类型
供计算机程序理解的数据形式
-整数类型 10011101
-字符串类型 “10,011,101”
-列表类型 [10,011,101]
#字符串的序号
正向增序序号:从0开始
反向递减序号:-12,-11.。。,-1,保证最后一个为-1
#分支语句
有判断条件决定程序运行方向的语句,例如if,elif,else
#语句和函数
根据输入参数不同输出结果
#python输入和输出
#输入函数input()
从控制台输入
#输出函数print()
以字符串型是向控制台输出结果
print()函数的格式化
print("转换后温度是{:.2f}C".format(C))
#eval()
评估函数,去掉参数最外侧引号并执行余下语句的函数
如eval(“1+2”)会得到3
第二章 Python基本图形绘制
2.1 深入理解Python语言
1946-1981年计算机系统结构时代:计算能力问题
1981-2008网络和视窗时代:交互问题
2008-2016安卓系统产生,复杂信息时代:数据问题
2016-?人工智能时代:计算能力问题、人类的问题
#高级语言 接近自然语言,编译器,与cpu幸好无关
#汇编语言 有助记符,汇编器,与cpu型号有关
#机器语言 代码直接执行,与cpu型号有关
#超级语言 Python是目前唯一的超级语言
2.2 Python蟒蛇绘制
#PythonDraw.py
import turtle
turtle.setup(650,350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("red")
turtle.seth(-40)
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,100)
turtle.fd(40*2/3)
turtle.done()
2.3 代码解析
#turtle库概述
1969年诞生的海龟库,有一只海龟,在窗体正中心,在画布上游走,走过的轨迹形成了绘制的图形
#turtle绘图窗体
-setup()设置窗体大小及位置
-4个参数中后两个可选,分别表示长、宽、左上角x/y坐标
-setup()不是必须的
#turtle的空间坐标体系
turtle的空间坐标是绝对坐标,窗体中心为海归起始位置(0,0)
turtle.goto(x,y)表示走向
海龟是头朝右的乌龟
turtle.fd(d)朝海龟正前方
turtle.bk(d)朝海龟后方
turtle.circle(r,angle)朝海龟左侧沿距离r的原点绕行
turtle.seth(angle)改变海归方向,但不行进
turtle.colormode(mode)
#import用法
import <库名>
<库名>.<函数名>(<函数参数>)
import <库名> as <库别名>
<库别名>.<函数名>(<函数参数>)
from <库名> import <函数名>
from <库名> import *
<函数名>(<函数参数>)
turtle.penup()#表示画笔抬起,海龟在飞行,别名turtle.pu()
turtle.pendown()#画笔落下,海龟在爬行,别名turtle.pd()
turtle.pensize(25)#画笔的宽度,别名turtle.width()
turtle.pencolor("red")#设置画笔颜色
第三章 基本数据类型
3.1 数字类型及操作
#整数类型
pow(x,y) x的y次方
#4中进制表示形式
十进制:99
二进制,以0b或者0B开头:0b010,-0B101
八进制,以0o或者0O开头:0o123,-0O456
十六进制,以0x或者0X开头:0x9a,-0X89
#浮点类型
浮点数的小数部分二进制与十进制并不是一一对应,存在不确定尾数
例如输入0.1+0.2==0.3会显示false,但可以使用round解决,round(0.1+0.2)==0.3会显示true
round(x,d)对x四舍五入。d是小数截取位数
#复数类型
定义与数学相同
z.real获得实部,z.imag获得虚部,z为复数
#数值运算操作符
+、-、*、/
x//y整数除,得到整数商
%取余
x**y=pow(x,y)但前者x,y为整数,后者不需要
x op=y与x=x op y相同
#数值运算函数
abs(x) 求x的绝对值
divmod(x,y) 同时输出商和余数divmod(10,3)=(3,1)
pow(x,y[,z]) 表示(x**y)%z,例如pow(3,pow(3,9),10000)结果为4587
round(x[,d]) 四舍五入,d是保留小数数位
max/min(1,2,4,3,5)
3.2 天天向上的力量
#DayDayupandDownQ3.py
def dayUp(df):
day = 1
for i in range(365):
if ((i + 1) % 7 == 6 or (i + 1) % 7 == 0):
day *= (1 - df)
else:
day *= (1 + df)
return day
dayfactor = 0.01
while dayUp(dayfactor) < 37.78:
dayfactor += 0.001
print("一年365天:{:.3f}".format(dayfactor))
3.3 字符串类型及操作
1、简介
字符串有2类共4种,表示方法
由一对单引号或双引号表示,仅表示单行字符串
"这里阿拉法凉山大火"
或者'C:'
-如果希望在字符串中包含双引号或者单引号的表示方法:
'这里有个双引号(")'
或者"这里有个单引号(')"
-如果希望文本中出现单引号和双引号
'''这里既有单引号(')又有双引号(")'''
2、字符串的使用
-索引:返回字符串中单个字符 <字符串>[M]
"请输入带有符号的温度值:"[0]
或者TempStr[-1]
-切片返回字符串中一段字符子串 <字符串>[M:N]
"请输入带有符号的温度值:"[1:3]
或者TempStr[0:-1]
#字符串切片高级用法
使用[M:N:K]根据步长对字符串切片
-<字符串>[M:N:K],根据步长K对字符串切片
"0123456789"[1:8:2]
结果是"1357"
-<字符串>[M:N] M缺失表示至开头,N缺失表示至结尾
"01234567"[:3]
结果是"012"
#字符串中的特殊字符
#转义符\
-表达特定字符的本意
"这里有个双引号(\")"
结果为 这里有个双引号(")
-转义符形成一些组合,表达一些不可打印的含义
“\b” 回退
“\n” 换行,光标移动到下行首
“\r” 回车,光标移动到本行首
3、字符串的操作符+、*、in
x+y表示连接
n*x或者
x*n表示复制n次字符串x
x in s如果x是s的子串,返回True,否则返回False
例子
#WeekNamePrintV2.py
weekStr = "一二三四五六七"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期"+weekStr[weekId-1])
4、字符串处理函数
函数及使用 | 描述 |
---|---|
len(x) | 长度 |
str(x) | 任意类型转换为字符串类型,包括列表 |
hex(x)或者oct(x) | 将十进制整数变成十六进制或八进制小写形式字符串,例如hen(425)=“0x1a9”, oct(425)=“0o651” |
chr(u) | u为Unicode编码,返回其对应字符,如char(10004)为"√" |
ord(x) | x为字符,返回其对应的Unicode编码 |
举例:
for i in range(9800,9812):
print(chr(i),end=" ")
输出星座符号:
♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓
方法及使用 | 描述 |
---|---|
str.lower()或者str.upper() | 返回字符串的副本,全部字符小写/大写"ahaBJOIHLADShjl".lower()结果为全部小写 |
str.split(sep=None) | 返回一个列表,由str根据被sep分割的部分组成。“A,B,C”.split(",")结果为[‘A’,‘B’,‘C’] |
str.count(sub) | 返回子串sub在str中出现的次数。“an apple a day”.count(“a”)结果为4 |
str.replace(old,new) | 旧字符串替换为新字符串 |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选"python".center(20,"=")结果为"=python=" |
str.strip(chars) | 从str中去掉其左侧和右侧chars中列出的字符"= python".strip(" =np")结果为"ytho" |
str.join(iter) | 在iter变量除最后元素外每一个元素后增加一个str。例如",".join(“12345”)结果为"1,2,3,4,5",#主要用于字符串分隔等 |
5、字符串的格式化
其使用方法是.format(),具体用法如下:
<模板字符串>.format(<逗号分隔的参数>)
#槽:{},其两种不同的使用方法
"{}:计算机{}的cpu占用率为{}%".format("2018-10-10","c",10)
"{0}:计算机{1}的cpu占用率为{2}%".format("2018-10-10","c",10)
#format方法的格式控制
槽内部对格式化的配置方法:
{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左 >右 ^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或者字符串最大输出长度 | 整数类型b,c,d,o,x,X浮点数类型e,E,f,% |
"{0:=^20}".format("Python")
= 填充符号,空余空间填充
^ 居中对齐
20 长度/宽度20
输出 =======Python=======
print("{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425))
110101001,Ʃ,425,651,1a9,1A9
3.4 time库
time库是Python中处理时间的标准库:
-计算机时间的表达
-提供获取系统时间并格式化输出的功能
-提供系统精确计时功能,用于程序性能分析
1、time库的使用
函数 | 描述 |
---|---|
time() | 获取当前时间戳,即计算机内部时间值,浮点数 |
ctime() | 获取当前时间并以易读方式表示,返回字符串 |
gmtime() | 获取当前时间表示为计算机可以处理的时间格式 |
import time
print(time.time())
print(time.ctime())
print(time.gmtime())
#输出结果:1599469094.3461773
#输出结果:Mon Sep 7 17:05:08 2020
#输出结果:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=7, tm_hour=9, tm_min=2, tm_sec=26, tm_wday=0, tm_yday=251, tm_isdst=0)
时间戳表示的是1970年1月1日到当前这一时刻为止以秒为单位的时间
2、时间格式化
-格式化:类似于字符串格式化,需要由展示模板
-展示模板由特定的格式化控制符组成
函数 | 描述 |
---|---|
strftime(tpl,ts) | tpl是格式化模板字符串,用来定义输出效果。ts是计算机内部时间类型变量 |
strptime(tpl,ts) | str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果 |
import time
t = time.gmtime()
print(time.strftime("%Y-%m-%d-%H:%M:%S",t))
timestr = '2020-09-07 09:16:51'
print(time.strptime(timestr,"%Y-%m-%d %H:%M:%S"))
#输出结果:2020-09-07-09:15:50
#输出结果:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=7, tm_hour=9, tm_min=16, tm_sec=51, tm_wday=0, tm_yday=251, tm_isdst=-1)
格式化字符串 | 日期/时间说明 | 值范围和实例 |
---|---|---|
%Y | 年份 | 0000~9999,例如2020 |
%m | 月份 | 01~12 |
%B | 月份名称 | January~December |
%b | 月份名称缩写 | Jan~Dec |
%d | 日期 | 01~31 |
%A | 星期 | Monday~Sunday |
%a | 星期缩写 | Mon~Sun |
%H | 24小时制 | 00~23 |
12小时制 | 01~12 | |
上/下午 | AM,PM,例如:PM | |
%M | 分钟 | 00~59 |
%S | 秒 | 00~59 |
3、程序计时
sleep() 产生时间
perf_counter() 测量时间
函数 | 描述 |
---|---|
perf_counter() | 返回一个CPU级别的精确时间计数值,单位为秒,其起点不确定,需连续调用差值才有意义 |
import time
start = time.perf_counter()
time.sleep(2.2)
end = time.perf_counter()
print(end - start)
#输出:2.1999606000000003
3.5 文本进度条
#TextProBarV1.py
import time
scale = 10
print("{0:-^20}".format("执行开始"))
for i in range(scale+1):
a = '*'*i
b = '.'*(scale-i)
c = (i/scale)*100
print("{:3.0f}%[{}->{}]".format(c,a,b)) time.sleep(0.5)
print("{0:-^20}".format("执行结束"))
#输出结果:
--------执行开始--------
0%[->..........]
10%[*->.........]
20%[**->........]
30%[***->.......]
40%[****->......]
50%[*****->.....]
60%[******->....]
70%[*******->...]
80%[********->..]
90%[*********->.]
100%[**********->]
--------执行结束--------
import time
for i in range(101): print("\r{:3}%".format(i),end="")
time.sleep(0.1)
#TextProBarV2.py
import time
scale = 50
print("执行开始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale+1):
a = '*'*i
b = '.'*(scale-i)
c = (i/scale)*100
dur = time.perf_counter()-start print("\r{:^3.0f}%[{}-{}]{:.2f}s".format(c, a, b, dur), end='')
time.sleep(0.1)
print("\n执行结束".center(scale//2, '-'))
第四章 程序控制
4.1分支结构
1、单分支结构
根据判断条件结果而选择不同的前进路径的运行方式
if <条件>:
<语句块>
2、二分支结构
根据条件判断结果而选择不同进行的方式
if <条件>:
<语句块1>
else:
<语句块2>
#紧凑形式
<表达式1> if <条件> else <表达式2>
3、多分支结构
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
.......
else:
<语句块n>
#条件组合
and、or、not
4、程序的异常处理
#异常的简单处理
try:
<语句块1>
except:
<语句块2>
or
try:
<语句块1>
except <异常类型>:
<语句块2>
#异常的高级処理
try:
<语句块1>
except:
<语句块2>
else:
<语句块3> #此语句在不发生异常时执行
finally:
<语句块4> #此语句一定会执行
4.2 身体的BMI指数
#CalBMI_V1.py
height, weight = eval(input("请输入身高(米)和体重(kg),并使用逗号隔开:"))
bmi = weight/pow(height,2)
print("BMI数值为:{0:.2f}".format(bmi))
if bmi <18.5:
who1 = "偏瘦"
who2 = "偏瘦"
elif 18.5<=bmi<24:
who1 = "正常"
who2 = "正常"
elif 24<=bmi<25:
who1 = "正常"
who2 = "偏胖"
elif 25<=bmi<28:
who1 = "偏胖"
who2 = "偏胖"
elif 28<=bmi<30:
who1 = "偏胖"
who2 = "肥胖"
else:
who1 = "肥胖"
who2 = "肥胖"
print("BMI指标为:国际{},国内{}".format(who1,who2))
#输出结果:
请输入身高(米)和体重(kg),并使用逗号隔开:1.81,85
BMI数值为:25.95
BMI指标为:国际偏胖,国内偏胖
4.3 程序的循环结构
1、遍历循环
for <循环遍历> in <遍历结构>:
<语句块>
for c in s: #s是字符串,c表示一个可以装字母的容器,此句话意思是遍历字符串每一个字符
<语句块>
for item in []:
<语句块>
for line in file:
<语句块>
2、无限循环
while <条件>:
<语句块>
一直运行,直到不满足while条件
3、循环控制保留字
break 和 continue
break跳出并结束当前循环,执行循环后的语句,break只能跳出一层循环
continue跳出当次循环,继续执行后续次数循环
4、循环的高级用法else
for <> in <>:
<>
else:
<>
or
while <>:
<>
else:
<>
上述语句表示,如果没有执行break,程序正常执行,则会继续执行else,否则不会执行
4.4 random库
random库是使用随机数的Python标准库,无需安装
-其产生的随机数并不随机,而是一种伪随机数,是采用梅森旋转算大生成的(伪)随机序列中的元素