Python程序设计语言笔记.docx
《Python程序设计语言笔记.docx》由会员分享,可在线阅读,更多相关《Python程序设计语言笔记.docx(65页珍藏版)》请在冰豆网上搜索。
![Python程序设计语言笔记.docx](https://file1.bdocx.com/fileroot1/2023-1/24/58d8f8a2-9c5e-4326-8a8c-0d1cdf77134a/58d8f8a2-9c5e-4326-8a8c-0d1cdf77134a1.gif)
Python程序设计语言笔记
Python程序设计语言笔记
第一周基本程序设计
1.1程序设计的基本方法——IPO(输入、输出、处理(算法))
(1)理解问题的计算部分:
抽象问题→使用IPO→从多种方法中选择一种解决问题
(2)程序编写步骤:
①分析问题:
分析问题的计算部分
②确定问题:
将计算部分划分为IPO三部分
③设计算法④编写程序⑤调试测试⑥升级维护
例:
温度转换问题
【问题描述】对于摄氏度和华氏度,存在以下转换:
摄氏度
1标准大气压
0度
100度
华氏度
1标准大气压
0度
212度
请利用python程序完成以上转换。
【解题步骤】
1
分析问题的计算部分简化为三个步骤:
2确定功能,利用IPO方法进一步分析:
①确定IPO
输入:
华氏度(F)/摄氏度(C)②编写程序
处理:
温度转化公式③调试程序
输出:
摄氏度(C)/华氏度(F)
3设计算法
4编写程序
5测试调试
6升级维护
1.2python程序元素分析
程序1:
#TempConvert.py
val=input("请输入带温度表示符号的温度值(例如:
32C):
")
ifval[-1]in['C','c']:
#in判断左侧内容是否在右侧集合中
f=1.8*float(val[0:
-1])+32#float()将括号中的字符串转换为浮点数
print("转换后的温度为:
%.2fF"%f)#.2表示输出的浮点数f有两位小数
elifval[-1]in['F','f']:
c=(float(val[0:
-1])-32)/1.8
print("转换后的温度为:
%.2fC"%c)
else:
print("输入有误")
(1)缩进:
标明代码层次关系、表明程序框架
(2)注释:
辅助说明,不被执行也不受语法约束,可以写入任何内容,用以提高可读性
注释方法:
1单行注释:
#开头;
2多行注释:
’’’开头和结尾;
(3)变量:
能够表示值的一个名称,值可以变化
命名:
给自定义元素关联名字的过程(唯一性)
命名规则:
①大小写字母、数字、下划线(大小写不统一)
②首字母只能是大小写字母或下划线,不能使用空格
③中文等非字母符号也可以作为名字
④不能与python定义的保留字相同
(4)表达式:
产生/计算数据值的一行代码(通过保留字和操作符)
(5)空格的使用:
①表示每行缩进关系的空格不能改变
②空格不能分割命名
(6)input()函数:
从控制台获得用户的输入。
使用方法为:
<变量>=input(<提示性文字>)
获得的用户输入以字符串<””>的形式保存在<变量>中
如果val=“28C”,则val[-1]=“C”,val[0:
2]=“28”表示从区间[0,2)的一个子字符串
可以通过val[0:
-1]来获取除了最后一个字符以外的字符串
(7)分支语句:
根据判断条件,执行不同的路径。
使用方法:
If<条件1成立>
<表达式组1>
elif<条件2成立>
<表达式组2>
…
elif<条件N-1成立>
<表达式组N-1>
else:
<表达式组N>
(8)赋值:
同步赋值:
同时给多个变量赋值。
使用方法:
<变量1>,…,<变量N>=<表达式1>,…,<表达式N>
例:
若要使变量x和y的值实现交换,则只需一行代码:
x,y=y,x
(9)print()函数:
用来输出字符信息,或以字符的形式输出变量的值,通过%选择要输出的变量
(10)循环语句:
控制程序循环运行的语句,根据判断/计数条件确定循环次数。
使用方法:
forIinrange(<计数值>):
<表达式组>
函数编写模板
(1)input–print模板:
(2)initial–print模板:
①用户输入:
input()①初始变量:
运算需要的初始值
②运算部分:
算法实现②运算部分:
算法实现
③结果输出:
print()③结果输出:
print()
1.3python蟒蛇程序的实现分析:
程序2:
importturtle#(乌龟)轨迹描绘函数库
defdrawSnake(rad,angle,len,neckrad):
#绘制蟒蛇函数
foriinrange(len):
turtle.circle(rad,angle)#圆形轨迹函数,参数rad描述圆形半径的位置
turtle.circle(-rad,angle)#rad为负值,半径在乌龟右侧
turtle.circle(rad,angle/2)#参数angle表示乌龟沿圆形爬行的弧度值
turtle.fd(rad)#也称为turtle.forward()函数
#表示轨迹直线移动,参数表示移动距离
turtle.circle(neckrad+1,180)
turtle.fd(rad*2/3)
defmain():
turtle.setup(1300,800,0,0)#启动图形窗口,参数分别为窗口的宽度、高度
#窗口左上角点的横、纵坐标位置
pythonsize=30
turtle.pensize(pythonsize)#轨迹的宽度,参数为像素大小,这里为30
turtle.pencolor("blue")#轨迹颜色,参数为字符串(英文或16进制颜色代码)
turtle.seth(-40)#轨迹运动方向,参数为角度(逆时针,以正东方向为0度)
drawSnake(40,80,5,pythonsize/2)#绘制蟒蛇函数,用以绘制python蟒蛇
main()
def定义函数:
①函数是一组代码的集合,用以完成特定的功能,这组代码的名字就叫函数名
②def所定义的函数,必须要通过函数名对函数进行调用才能执行
函数库的引用:
方式一:
import<库名>如:
importturtle
方式二:
from<库名>import<函数名>
from<库名>import*←调用函数时不需要使用库名,直接使用
如:
fromturtle*
fd(100)
注意:
方式一可调用不同库中的同名函数,方式二则不可
第二周类型及应用
2.1类型——编程语言对数据的划分
数字类型、字符串类型、元组类型
列表类型、文件类型、字典类型
(1)数字类型:
数字类型对python语言中的数字的表示和使用进行了定义和规范
[1]分类:
①整数类型②浮点数类型③复数类型
①整数类型概念与数学一致,没有取值范围限制
例:
1010(十进制数),0x9a(十六进制数,以0x/0X开头),0b010(二进制数,以0b/0B开头)0o123(八进制数,以0o/0O开头)
②浮点数类型是带有小数点及小数的数字,数值范围和小数精度有一定限制,因系统而异
例:
0.0(与整数0不同),96e4(科学计数法,e/E代表10的次幂,e/E后的数字为指数)
③复数类型概念与数学一致,z=a+bj(j/J代表虚数部分)例:
12.3+4j
对于一个复数,如z=1.1+9j,可以使用z.real和z.imag来获得复数的实部和虚部
[2]数字类型的关系:
←特例←特例
整数→浮点数→复数(范围逐渐扩大)整数浮点数浮点数
因此这三种数字类型可以进行混合运算,生成结果为最宽类型例:
3+4.2=7.2
[3]类型转换:
利用int(),float()和complex()三个函数实现
例:
int(4.5)=4;float(4)=4.0;complex(4)=4+0j;
【注意】不能将复数转成整数和浮点数!
(但可以间接利用取实部虚部的方法实现)
[4]数字类型的判断——type(x);例:
type(4.5)↙得到
[5]数字类型的运算:
x+y
x与y之和
x-y
x与y之差
x*y
x与y之积
x/y
x与y之商
x//y
不大于x和y之商的最大整数
x%y
x与y之商的余数
+x
x
-x
x的负值
x**y
x的y次幂
abs(x)
x的绝对值
divmod(x,y)
(x//y,x%y)
pow(x,y)
x的y次幂
(2)字符串类型——用双引号“”或单引号‘‘括起来的一个或多个字符
——可以保存在变量中,也可以单独存在
[1]判断字符串类型:
输入:
type(str1)↙输出:
[2]可以使用\转义字符输出“”或‘‘之类的字符
也可以用同样的方法\\输出转义字符,\n输出换行符等
例:
print(“\”大家好\””);
输出:
”大家好”
[3]字符串是一个字符序列,字符串最左端位置标示为0,向右递增,字符串中字符位置的标示称为“索引”,例如:
0
1
2
3
4
5
6
7
8
9
可以使用单个索引访问字符串的特定位置。
格式如下:
[<索引>]
其中索引可以为常量和表达式
[4]python中字符串(设长度为L)索引从0开始,最后一个字符索引为L-1
同时也允许使用负数,对字符串从右至左进行反向检索,最右索引值为-1
可以通过两个索引值来确定一个范围,从而返回这个范围内的子字符串。
格式如下:
[,]
其中start和end都为整型,索引范围为[start,end)
程序实例:
【题目描述】输入一个月份数字,返回对应月份名称的缩写
【分析】IPO模式:
①输入:
输入一个表示月份的数字(1-12)
②处理:
利用字符串基本操作实现功能
③输出:
输出数字对应月份名称缩写
【解答】
程序3:
#month.py
months="JanFebMarAprMayJunJulAugSepOctNovDec"
n=input("请输入月份数(1-12):
")
pos=(int(n)-1)*3
monthAbbrev=months[pos:
pos+3]
print("月份简写是"+monthAbbrev+".")
输入:
输出:
7↙月份简写是Jul.
(3)元组类型(Tuple)—包含0个至多个元素的类型,元素之间用逗号分割
例:
t1=123,45.6,“hello”;t2=();t3=12;
元组外部可以使用或不使用括号
[1]元组类型的三个特点:
①元组中的元素可以是不同类型的,可以嵌套(用括号区分)
②元组中的各个元素存在先后关系,可以通过索引来访问元组中的元素
例:
t1[0];
③元组定义后不能更改和删除——安全
[2]与字符串类型类似,可以通过索引区间来访问元组中的部分元素
也可以对元组进行+和*的运算例:
t2[1:
];
(4)列表类型(List)—有序的元素集合
[1]与元组类似,列表的每个元素类型可以不同,可以通过索引访问列表的单个元素例:
a=[0,1,2]print(a)输出:
[0,1,2]
[2]与元组不同,列表的大小没有限制,可以随时修改
(5)小结:
[1]序列(字符串、元组、列表)类型的操作:
序列操作符
操作的含义
+
连接两个序列
+<整数类型>
对序列进行整数次重复
[<整数类型>]
索引序列中的元素
[<整数类型>:
<整数类型>]
取序列的一个子序列
len()
序列中元素个数
forin
对序列进行循环列举
in
成员检查,判断是否在序列中
[2]方法,格式如下:
.func()
①字符串方法:
字符串方法
含义
.upper()
字符串中字母大写
.lower()
字符串中字母小写
.strip()
去掉两边空格和指定字符
.split()
按指定字符分割字符串为数组
.join()
连接两个字符串序列
.find()
搜索指定字符串
.replace()
字符串替换
②列表方法:
列表方法
含义
.append(x)
将元素x增加到列表最后
.sort()
将列表元素排序
.reverse()
将列表元素反转
.index(x)
返回第一次出现元素x的索引值
.insert(i,x)
在位置i处插入新元素x
.count(x)
返回元素x在列表中的数量
.remove(x)
删除列表中第一次出现的元素x
.pop(i)
取出列表中位置i的元素并删除
2.2math库和random库的使用及实例:
(1)math库:
圆周率pi
π
π的近似值,15位小数
自然常数e
e
e的近似值,15位小数
ceil(x)
⌈x⌉
对浮点数向上取整
floor(x)
⌊x⌋
对浮点数向下取整
pow(x,y)
x的y次幂
log(x)
lnx
以e为底的对数
log10(x)
以10为底的对数
sqrt(x)
平方根
exp(x)
e的x次幂
degrees(x)
弧度转角度
radians(x)
角度转弧度
sin(x)
sinx
x的正弦值
cos(x)
cosx
x的余弦值
tan(x)
tanx
x的正切值
asin(x)
arcsinx
x的反正弦值
acos(x)
arccosx
x的反余弦值
atan(x)
arctanx
x的反正切值
x∈[-1.0,1.0]
(2)random库:
seed(x)
给随机数一个种子值,默认随机种子是系统时钟
random()
生成一个[0,1.0]之间的随机小数
uniform(a,b)
生成一个a到b之间的随机小数
randint(a,b)
生成一个a到b之间的随机整数
randrange(a,b,c)
随机生成一个从a开始到b以c递增的数
choice()
从列表中随机返回一个元素
shuffle()
将列表中元素随机打乱
sample(,k)
从指定列表随机获取k个元素
【注意】seed()函数用来设置随机种子,随机种子相同,随机序列相同—伪随机数
实例:
π的计算—蒙特卡洛方法(随机抽样/统计实验方法)
①先构造单位正方形和1/4圆
②向正方形内抛洒大量点
③统计落入圆内的点占所有点的比例
【分析】IPO:
①输入:
抛点的数量
②处理:
对于每个抛洒点,计算点到圆心的距离
通过判断该点在圆内或圆外。
统计圆内点的数量
③输出:
π值
程序4:
#pi.py
fromrandomimportrandom
frommathimportsqrt
fromtimeimportclock
DARTS=1200
hits=0
clock()
foriinrange(1,DARTS):
#抛洒DARTS次
x,y=random(),random()#给出随机坐标(x,y)
dist=sqrt(x**2+y**2)#计算抛点到原点的距离
ifdist<=1.0:
#判断距离是否在圆内,若是则hits自增1
hits=hits+1
pi=4*(hits/DARTS)#计算比值,得到π值
print("Pi的值是%s"%pi)
print("程序运行时间是%-5.5ss"%clock())
输出:
Pi的值是3.14
程序运行时间是0.015s
第三周分支与循环
3.1程序基本结构
1.程序流程图—用规定的一系列图形、流程线和文字说明算法中的基本操作和控制流程。
流程图的基本元素包括:
(1)表示相应操作的框
(2)带箭头的流程线
(3)框内外必要的文字说明
2.设计程序框图的步骤:
(1)用自然语言表述算法步骤
(2)确定步骤逻辑结构,用相应框图表示
(3)流程线连接框图,加上终端框,得到整个算法的程序框图
3.任何算法都可以由顺序、选择、循环三种基本结构组合实现:
(1)顺序结构:
按逻辑顺序自上而下依次运行的结构,如:
温度转换程序;
(2)选择结构(分支结构):
在算法中通过对条件的判断,根据条件是否成立而选择不同流向的算法结构;
(3)循环结构:
指在一定条件下反复执行某部分代码的操作;
3.2简单分支
例:
PM2.5指数分级程序功能IPO模式描述:
输入:
接受外部输入PM2.5值
处理:
空气质量分级算法
输出:
打印空气质量提醒
PM2.5指数分级伪代码
IfPM2.5值>75
打印空气污染警告
IfPM2.5值<35
打印空气质量优,建议户外运动
流程图如右图所示:
程序5:
#pm25.py
#空气质量提醒
defmain():
PM=eval(input("Whatistoday'sPM2.5?
"))
#打印相应提醒
ifPM>75:
print("Unhealthy.Becareful!
")
ifPM<35:
print("Good.Gorunning!
")
main()
【运行结果】
输出:
输入:
Whatistoday'sPM2.5?
90
Unhealthy.Becareful!
(1)If语句格式:
If:
【注】是条件表达式,是一个或多个语句序列
先判断条件,若true,则执行,再转向下一条语句;
若false,则直接跳过
,转向下一条语句
(2)简单条件构造
①简单条件基本形式
②是关系操作符<,<=,==,>=,>,!
=
③使用“=”表示赋值语句,使用“==”表示等于
④除数字外,字符或字符串也可以按照字典顺序用于条件比较
⑤是布尔表达式,为bool类型
布尔值的真假以True和False表示
(3)二分支语法结构
If:
else:
程序6:
#quadratic.py
#计算二次方程的实数根程序
importmath
defmain():
print("Thisprogramfindstherealsolutionstoaquadratic\n")
a,b,c=eval(input("Pleaseenterthecoefficients(a,b,c):
"))
delta=b*b-4*a*c
ifdelta>=0:
discRoot=math.sqrt(delta)
root1=(-b+discRoot)/(2*a)
root2=(-b-discRoot)/(2*a)
print("\nThesolutionsare:
",root1,root2)
else:
print("Theequationhasnorealroots!
")
main()
【运行结果】
输出:
Thisprogramfindstherealsolutionstoaquadratic
输入:
Pleaseenterthecoefficients(a,b,c):
1,2,3
Theequationhasnorealroots!
3.3多分支
(1)多分支决策
要解决双根问题,就需要对delta等于0的情况进行处理。
语句的结构上要引入嵌套结构:
①当delta<0,处理无实根情况
②当delta=0,处理实根情况
③当delta>0,处理双根情况
一种方案是在程序中使用两个if-else语句。
把一个复合语句放到另一个语句的结构之中称为嵌套。
1.多分支决策是解决复杂问题的重要手段之一
2.一个三分之决策可以由两个二分支结构嵌套实现
3.使用if-else描述多分支决策时,
实现更多分支需要更多嵌套,影响程序易读性
Python使用if-elif-else描述多分支决策,简化分支结构的嵌套问题。
格式如下:
If:
elif:
elif:
…
else:
例:
程序7:
#quadratic.py
importmath
defmain():
print("Thisprogramfindstherealsolutionstoaquadratic\n")
a,b,c=eval(input("Pleaseenterthecoefficients(a,b,c):
"))
delta=b*b-4*a*c
ifa==0:
x=-b/c
print("\nThereisansolution",x)
elifdelta<0:
print("\nTheequationhasnorealroots!
")
elifdalta==0:
x=-b/(2*a)
print("\nTheereisadoublerootat",x)
else:
discRoot=math.sqrt(delta)
root1=(-b+discRoot)/(2*a)
root2=(-b-discRoot)/(2*a)
print("\nThesolutionsare:
",root1,root2)
main()
3.4异常处理
异常处理语句
Python使用try…except…,可使程序不因运行错误而崩溃
Python的异常处理语句还可以使用else和finally关键字
(可选项,若使用则else必须在finally之前)
格式如下:
try:
except:
excep