Python语言程序设计3.docx
《Python语言程序设计3.docx》由会员分享,可在线阅读,更多相关《Python语言程序设计3.docx(23页珍藏版)》请在冰豆网上搜索。
Python语言程序设计3
第三周分支与循环
3.1程序基本结构
1.程序流程图一用规定的一系列图形、流程线和文字说明算法中的基本操作和控制流程。
流程图的基本元素包括:
(1)表示相应操作的框
(2)带箭头的流程线
(3)框内外必要的文字说明
2.设计程序框图的步骤:
(1)用自然语言表述算法步骤
(2)确定步骤逻辑结构,用相应框图表示
(3)流程线连接框图,加上终端框,得到整个算法的程序框图
3.任何算法都可以由顺序、选择、循环三种基本结构组合实现:
(1)顺序结构:
按逻辑顺序自上而下依次运行的结构,如:
温度转换
程序;
(2)选择结构(分支结构):
在算法中通过对条件的判断,根据条件
是否成立而选择不同流向的算法结构;
(3)循环结构:
指在一定条件下反复执行某部分代码的操作;
3.2简单分支
PM2.5空气质量等级
0-35双
36-75良
7&115而污染
116-150中度污染~
151-250重度污染
251-500严1E台染
PM2.5指数分级程序功能IPO模式描述:
输入:
接受外部输入PM2.5值
处理:
空气质量分级算法
输出:
打印空气质量提醒
PM2.5指数分级伪代码
IfPM2.5值,75
打印空气污染警告
IfPM2.5值<35
打印空气质量优,建议户外运动
流程图如图所示:
1.#pm25.py
3.
2.
#空气质量提醒
4.
defmain():
5.
PM=eval(input("Whatistoday'sPM2.5?
"))
6.
#打印相应提醒
7.
8.
print("Unhealthy.Becareful!
")
9.
10.
print("Good.Gorunning!
")
11.
main()
if
PM>75:
if
PM<35:
PM2,5H?
7S?
PM2_5ffl<35?
程序5:
【运行结果】
Unhealthy.Becareful!
(1)If语句格式:
If:
【注】<condition>是条件表达式,<body>是一个或多个语句序列
输入PM23的值
打印空♦污染警告
as设户外运动
先判断〈condition〉条件,若true,则执行
,再转向下一条语句;
若false,则直接跳过
,转向下一条语句
(2)简单条件构造
①简单条件基本形式
②是关系操作符<,<=,==,>=,>,!
=
③使用“="表示赋值语句,使用“==”表示等于
④除数字外,字符或字符串也可以按照字典顺序用于条件比较
⑤是布尔表达式,为bool类型
布尔值的真假以True和False表示
(3)二分支语法结构
If:
else:
程序6:
[python]viewplaincopy
1.#quadratic.py
2.#计算二次方程的实数根程序
3.importmath
4.defmain():
5.
))
print("Thisprogramfindstherealsolutionstoaquadratic\n"
6.a,b,c=eval(input("Pleaseenterthecoefficients(a,b,c):
'
7.delta=b*b-4*a*c
8.ifdelta>=0:
9.discRoot=math.sqrt(delta)
10.root1=(-b+discRoot)/(2*a)
11.root2=(-b-discRoot)/(2*a)
12.print("\nThesolutionsare:
",root1,root2)
13.else:
14.print("Theequationhasnorealroots!
")
15.main()
【运行结果】
输出:
Thisprogramfindstherealsolutionstoaquadratic
输入:
Pleaseenterthecoefficients(a,b,c):
1,2,3
Theequationhasnorealroots!
3.3多分支
(1)多分支决策
要解决双根问题,就需要对delta等于0的情况进行处理。
语句的结构上要引入嵌套结构:
1当delta<0,处理无实根情况
2当delta=0,处理实根情况
3当delta>0,处理双根情况
一种方案是在程序中使用两个if-else语句。
把一个复合语句放到另一个语句的结构之中称为嵌套。
1.多分支决策是解决复杂问题的重要手段之一
2.一个三分之决策可以由两个二分支结构嵌套实现
3.使用if-else描述多分支决策时,
实现更多分支需要更多嵌套,影响程序易读性
Python使用if-elif-else描述多分支决策,简化分支结构的嵌套问题。
格式如下:
If:
elif:
elif:
else:
〈defaultstatements〉
例:
程序7:
[python]viewplaincopy
1.#quadratic.py
2.importmath
3.defmain():
4.
print("Thisprogramfindstherealsolutionstoaquadratic\n"
5.a,b,c=eval(input("Pleaseenterthecoefficients(a,b,c):
"))
6.delta=b*b-4*a*c
7.ifa==0:
8.x=-b/c
9.print("\nThereisansolution",x)
10.elifdelta<0:
11.print("\nTheequationhasnorealroots!
")
12.elifdalta==0:
13.x=-b/(2*a)
14.print("\nTheereisadoublerootat",x)
15.else:
16.discRoot=math.sqrt(delta)
17.root1=(-b+discRoot)/(2*a)
18.root2=(-b-discRoot)/(2*a)
19.print("\nThesolutionsare:
",root1,root2)
20.
main()
riirtimub
3.4异常处理
异常处理语句
python使用try-except…,可使程序不因运行错误而崩溃
Python的异常处理语句还可以使用else和finally关键字
(可选项,若使用则else必须在finally之前)
格式如下:
try:
except:
except:
except:
else:
finally:
try・•・except可以捕捉任何类型的错误
对于二次方程,还会有其他可能的错误
如:
输入非数值类型(NameError)
输入无效的表达式(SyntaxError)等
此时可以用一个try语句配多个except来实现
程序8:
[python]viewplaincopy
#异常处理测试
1.defmain():
2.try:
3.number1,number2=eval(input("Entertwonumbers,
4.separatedbyacomma:
"))
5.result=number1/number2
6.exceptZeroDivisionError:
7.print("Divisionbyzero!
")
8.exceptSyntaxError:
9.print("Acommamaybemissingintheinput")
10.else:
11.print("Noexceptions,theresultis",result)
12.finally:
13.print("executingthefinalclause")
14.main()
【运行结果】
输出:
输入:
Entertwonumbers,separatedbyacomma:
12
Acommamaybemissingintheinput
executingthefinalclause
Entertwonumbers,separatedbyacomma:
3,2
Noexceptions,theresultis1.5
executingthefinalclause
Entertwonumbers,separatedbyacomma:
3,0
Divisionbyzero!
executingthefinalclause
•【实例】三者最大值
•[IPO]
输入:
三个数值
处理:
三者最大算法
输出:
打印最大值
【算法比较】
①通盘比较一将每一个值与其他所有值比较以确定最大值
工士xl>=x2Hi-,xl>=x3:
max=xl
q-x2>=义1?
ax2>=:
max=x2
else1
max-x3
三个值的情况比较简单,如果是五值比较复杂,而且效率低(因为表达式没有被充分利用)
②决策树一避免冗余比较
结构更加复杂!
③顺序处理一逐个扫描每个值,保留最大者
【程序】程序9:
#program:
maxn.py
#寻找一组数中的最大值
defmain():
n=eval(input("Howmanynumbersarethere?
"))
#将第一个值赋值给max
max=eval(input("Enteranumber>>"))
#连续与后面n-1值进行比较
foriinrange(n-1):
x=eval(input("Enteranumber>>"))
ifx>max:
max=x
print("Thelargestvalueis",max)
•1
•2
•3
•4
•5
•6
•7
•8
•9
•10
•11
•12
•13
・1
・2
・3
・4
main()
•5
•6
•7
•8
•9
•10
•11
•12
•13
【运行结果】
Howmanynumbersarethere?
5
Enteranumber>>9
Enteranumber>>6
Enteranumber>>3
Enteranumber>>10
Enteranumber>>20
Thelargestvalueis20
max=xl
ifx2>maxrmax=x2
ifx3>max:
④使用Python内置函数max()max=k3
3.5基本循环结构
(1)for循环
Python可以使用for语句循环遍历整个序列的值,格式如下:
forin:
在for循环中,循环变量var遍历了队列中的每一个值,循环变量var遍历了队列中的每一个值,循环语句体为每个值执行一次
例:
for循环求平均数
•IPO:
输入:
待输入数字个数,数字
处理:
平均数算法
输出:
平均数
通用设计方案:
o①输入数字的个数n
o②将sum初始化为0o③循环n次:
输入数字x
将x加入sum中
o④将sum/n作为平均数输出出来
•程序10:
#average1.py
n=eval(input("Howmanynumbers?
"))sum=0.0
foriinrange(n):
x=eval(input("Enteranumber>>"))
sum=sum+x
print("\nTheaverageis",sum/n)
・1
・2
・3
・4
・5
・6
・7
・1
・2
・3
【运行结果】
Howmanynumbers?
3
Enteranumber>>5
Enteranumber>>7
Enteranumber>>6
Theaverageis6.0
for循环的缺点:
程序开始时必须提供输入数字总数,以提供固定循环次数
大规模数字则需要用户数清楚个数
为此,python提供了另一种循环模式即无限循环,不需要提前知道循环次数
(2)while循环
语句格式:
while
•4
•5
•6
•7
•1
•2
・1
•2
条件总是在循环体执行之前被判断,这种结构又被称为前测循环(当型循环)
如果循环体没有对i初始化或循环体没有累加,条件判断一直为真,循环体将一直执行,即为死循环程序,这时通常使用Ctrl+C来终止一个程序
(3)break语句退出循环
例:
程序11:
#TestBreak.py
sum=0
number=0
whilenumber<20:
number+=1
sum+=number
ifsum>100:
break
print("Thenumberis",number)
print("Thesumis",sum)
♦1
♦2
♦3
♦4
♦5
♦6
•7
・8
•9
•10
♦1
♦2
♦3
•4
•5
•6
•7
•8
•9
•10
【运行结果】
Thenumberis14
Thesumis105
(4)continue一结束本次循环
即跳出循环体中下面尚未执行的语句,对于while循环,继续求解循环条件;对于
for循环,继续遍历循环列表
continue语句和break语句的区别:
continue语句只结束本次循环,而不终止整个循环的执行,而break语句则是直接结束整个循环流程,不再判断循环条件是否成立
(5)循环语句中的else一不满足循环条件时执行
3.6通用循环构造方法
(1)交互式循环
交互式循环是无限循环的一种,允许用户通过交互的方式重复程序特定部分
■oredata[0]=y';
k・«val(input{1*^!
itri口g电工»L))tum=aum+、count"count+1
MOrvdata=Input(yauhavemorenuabeo(yesorno)?
H)t?
he।ithynur-bersast9ua/cQUDt>
(2)哨兵循环
执行循环直到遇到特定的值,循环语句才终止执行
设计方法:
①设定一个哨兵值作为循环终止的标志
②任何值都可以做哨兵,但要与实际数据有所区别
ALlJtS牝工I=:
k=eval(xStr)sum,sum*xcount*count+XxStr■input(<+Enteranunbertoquit)»")
(3)文件循环
面向文件的方法是数据处理的典型应用,可以事先将数据录入到文件,便于编辑修改,python中采用readline()方法中的endoffile循环模式
(4)循环嵌套
决策和循环互相嵌套可以实现复杂算法,假设数字以逗号分隔出现在文件的同一行上
(3)(4)整合程序如图:
♦average?
.pydefsainO;
flleName=inputC'WtiAtfilearethenumbersinJ')uifLie=open.(flleiNaner'rr>sm-0,0count■0line.infile*readline0rfhiLalineEp'n:
■为line中的值更新其count和simforxStrinline.split4:
sum■aw+«val(xStz)count=count+1line-Infxle.readline()
print(ig*'t!
.1;r-5二:
二上升:
」;isH,,aum/count)
main《)
3.7死循环和循环嵌套
(1)死循环一无法靠自身的控制中止的循环
先接受输入,再判断循环条件是否满足。
在Python中没有后测循环语句,但可以通过while和break语句间接实现,如:
nwnber=-1xh.enumber<0:
number-eval{input(flEnterapositivenumber:
K>10
死循环的使用:
通过死循环可以一直检测捕捉特定异常
(3)半路循环一循环判断条件在循环体的中部
print(
number-(inputCif・X。
:
break
(2)后测循环(直到型循环)
number-eval(input{Entetx>■0:
break
■如果数字有效则跳出循环
死循环
K10
a二丸BnT
3.8布尔表达式
条件语句和循环语句都使用布尔表达式作为条件
布尔值为真(True)或假(Flase)
(1)布尔操作符:
and,or,not
and和or用于组合两个布尔表达式,并产生一个布尔结果
and
or
•1
•2
•1
•2
not运算符计算一个布尔表达式的反值
not
•1
•1
(2)布尔操作符的优先级:
not>and>or
not口值表
and亘值表or真值表
例:
壁球比赛计分:
♦假设scoreA和scoreB代表两个壁球选手的分数
o规则1:
只要一个选手达到了15分,本场比赛就结束
即:
scoreA==15orscoreB==15
o在程序中构造一种循环条件,对游戏结束条件取反,只要比赛还没有
结束游戏就一直进行下去
即:
whilenot(scoreA==15orscoreB==15)#比赛继续
o规则2:
如果一方打了七分而另一方一分未得时,比赛也结束
即:
scoreA==15orscoreB==15or(a==7andb==0)or(b==
7anda==0)
o需要一个团队赢得至少两分才算赢,即其中一个队已经达到了15分,且分数差异至少为2时比赛结束(排球)
即:
(a>=15orb>=15)andabs(a-b)>=2
(3)布尔代数:
布尔表达式遵循特定的代数定律,这些规律被称为布尔逻辑或布尔代数
布尔代数
aandfalse==false
代数
a*0=0
代数布尔代数
a*1=aaandtrue==a
a+0=0aorfalse==a
①任何数据和true进行or操作都是真
②and和or操作符都符合分配率
③not操作符可负负抵消
④德摩根定律:
not放进表达式后,and和or发生变化
如:
not(aorb)==(nota)and(notb)
not(aandb)==(nota)or(notb)
⑤布尔代数的应用一用德摩根定律分析和简化表达式
(4)布尔表达式作为决策一判断退出循环
条件
①对于数字(整数和浮点数)的零值被认为是false,任何非零值都是true
②bool类型是特殊的整数
③布尔表达式具有短路求值的特性