Python 语言程序设计3.docx
- 文档编号:12882610
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:22
- 大小:1MB
Python 语言程序设计3.docx
《Python 语言程序设计3.docx》由会员分享,可在线阅读,更多相关《Python 语言程序设计3.docx(22页珍藏版)》请在冰豆网上搜索。
Python语言程序设计3
第三周分支与循环
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:
[python] viewplain copy
1.#pm25.py
2.#空气质量提醒
3.
4.def main():
5. PM = eval(input("What is today'sPM2.5?
"))
6. # 打印相应提醒
7. if PM > 75:
8. print("Unhealthy. Becareful!
")
9. if PM < 35:
10. print("Good. Go running!
")
11.main()
【运行结果】
输出:
输入:
Whatistoday'sPM2.5?
90
Unhealthy.Becareful!
(1)If语句格式:
If
【注】
先判断
若false,则直接跳过
,转向下一条语句(2)简单条件构造
①简单条件基本形式
②
=
③使用“=”表示赋值语句,使用“==”表示等于
④除数字外,字符或字符串也可以按照字典顺序用于条件比较
⑤
布尔值的真假以True和False表示
(3)二分支语法结构
If
else:
程序6:
[python] viewplain copy
1.# quadratic.py
2.# 计算二次方程的实数根程序
3.import math
4.def main():
5. print("Thisprogram finds the real solutions to a quadratic\n")
6. a,b,c =eval(input("Please enter the coefficients(a,b,c):
"))
7. delta = b*b -4*a*c
8. if delta >= 0:
9. discRoot =math.sqrt(delta)
10. root1 = (-b +discRoot) / (2*a)
11. root2 = (-b -discRoot) / (2*a)
12. print("\nThe solutions are:
", root1, root2)
13. else:
14. print("Theequation has no real roots!
")
15.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:
[python] viewplain copy
1.# quadratic.py
2.import math
3.def main():
4. print("This program finds the realsolutions to a quadratic\n")
5. a,b,c =eval(input("Please enter the coefficients(a,b,c):
"))
6. delta = b*b - 4*a*c
7. if a == 0:
8. x = -b/c
9. print("\nThere is ansolution", x)
10. elif delta < 0:
11. print("\nThe equation has no real roots!
")
12. elif dalta == 0:
13. x = -b/(2*a)
14. print("\nTheere is a double rootat", x)
15. else:
16. discRoot = math.sqrt(delta)
17. root1 = (-b +discRoot) / (2*a)
18. root2 = (-b -discRoot) / (2*a)
19. print("\nThesolutions are:
", root1, root2)
20.main()
3.4异常处理
异常处理语句
python使用try…except…,可使程序不因运行错误而崩溃
Python的异常处理语句还可以使用else和finally关键字
(可选项,若使用则else必须在finally之前)
格式如下:
try:
except
except
except:
else:
finally:
try…except可以捕捉任何类型的错误
对于二次方程,还会有其他可能的错误
如:
输入非数值类型(NameError)
输入无效的表达式(SyntaxError)等
此时可以用一个try语句配多个except来实现
程序8:
[python] viewplain copy
1.# 异常处理测试
2.def main():
3. try:
4. number1,number2 = eval(input("Enter two numbers,
5.separated by a comma:
"))
6. result = number1/number2
7. exceptZeroDivisionError:
8. print("Division by zero!
")
9. exceptSyntaxError:
10. print("Acomma may be missing in the input")
11. else:
12. print("Noexceptions, the result is", result)
13. finally:
14. print("executing the final clause")
15.main()
【运行结果】
输出:
输入:
Entertwonumbers,separatedbyacomma:
12
Acommamaybemissingintheinput
executingthefinalclause
Entertwonumbers,separatedbyacomma:
3,2
Noexceptions,theresultis1.5
executingthefinalclause
Entertwonumbers,separatedbyacomma:
3,0
Divisionbyzero!
executingthefinalclause
【实例】三者最大值
【IPO】
输入:
三个数值
处理:
三者最大算法
输出:
打印最大值
【算法比较】
①通盘比较—将每一个值与其他所有值比较以确定最大值
三个值的情况比较简单,如果是五值比较复杂,而且效率低
(因为表达式没有被充分利用)
②决策树—避免冗余比较
结构更加复杂!
③顺序处理—逐个扫描每个值,保留最大者
【程序】程序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)
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
【运行结果】
Howmanynumbersarethere?
5
Enteranumber>>9
Enteranumber>>6
Enteranumber>>3
Enteranumber>>10
Enteranumber>>20
Thelargestvalueis20
④使用Python内置函数max()
3.5基本循环结构
(1)for循环
Python可以使用for语句循环遍历整个序列的值,格式如下:
forin
1
2
1
2
在for循环中,循环变量var遍历了队列中的每一个值,循环变量var遍历了队列中的每一个值,循环语句体为每个值执行一次
例:
for循环求平均数
IPO:
输入:
待输入数字个数,数字
处理:
平均数算法
输出:
平均数
通用设计方案:
o①输入数字的个数n
o②将sum初始化为0
o③循环n次:
o
输入数字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
4
5
6
7
【运行结果】
Howmanynumbers?
3
Enteranumber>>5
Enteranumber>>7
Enteranumber>>6
Theaverageis6.0
for循环的缺点:
程序开始时必须提供输入数字总数,以提供固定循环次数
大规模数字则需要用户数清楚个数
为此,python提供了另一种循环模式即无限循环,不需要提前知道循环次数
(2)while循环
语句格式:
while
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)交互式循环
交互式循环是无限循环的一种,允许用户通过交互的方式重复程序特定部分
(2)哨兵循环
执行循环直到遇到特定的值,循环语句才终止执行
设计方法:
①设定一个哨兵值作为循环终止的标志
②任何值都可以做哨兵,但要与实际数据有所区别
(3)文件循环
面向文件的方法是数据处理的典型应用,可以事先将数据录入到文件,便于编辑修改,python中采用readline()方法中的endoffile循环模式
(4)循环嵌套
决策和循环互相嵌套可以实现复杂算法,假设数字以逗号分隔出现在文件的同一行上
(3)(4)整合程序如图:
3.7死循环和循环嵌套
(1)死循环—无法靠自身的控制中止的循环
死循环的使用:
通过死循环可以一直检测捕捉特定异常
(2)后测循环(直到型循环)
先接受输入,再判断循环条件是否满足。
在Python中没有后测循环语句,但可以通过while和break语句间接实现,如:
(3)半路循环—循环判断条件在循环体的中部
例:
3.8布尔表达式
条件语句和循环语句都使用布尔表达式作为条件
布尔值为真(True)或假(Flase)
(1)布尔操作符:
and,or,not
and和or用于组合两个布尔表达式,并产生一个布尔结果
1
2
1
2
not运算符计算一个布尔表达式的反值
not
1
1
(2)布尔操作符的优先级:
not>and>or
例:
壁球比赛计分:
假设scoreA和scoreB代表两个壁球选手的分数
o规则1:
只要一个选手达到了15分,本场比赛就结束
o
即:
scoreA==15orscoreB==15
o在程序中构造一种循环条件,对游戏结束条件取反,只要比赛还没有结束游戏就一直进行下去
o
即:
whilenot(scoreA==15orscoreB==15)#比赛继续
o规则2:
如果一方打了七分而另一方一分未得时,比赛也结束
o
即:
scoreA==15orscoreB==15or(a==7andb==0)or(b==7anda==0)
o需要一个团队赢得至少两分才算赢,即其中一个队已经达到了15分,且分数差异至少为2时比赛结束(排球)
o
即:
(a>=15orb>=15)andabs(a-b)>=2
(3)布尔代数:
布尔表达式遵循特定的代数定律,这些规律被称为布尔逻辑或布尔代数
代数
布尔代数
a*0=0
aandfalse==false
a*1=a
aandtrue==a
a+0=0
aorfalse==a
①任何数据和true进行or操作都是真
②and和or操作符都符合分配率
③not操作符可负负抵消
④德摩根定律:
not放进表达式后,and和or发生变化
如:
not(aorb)==(nota)and(notb)
not(aandb)==(nota)or(notb)
⑤布尔代数的应用—用德摩根定律分析和简化表达式
(4)布尔表达式作为决策—判断退出循环条件
①对于数字(整数和浮点数)的零值被认为是false,任何非零值都是true
②bool类型是特殊的整数
③布尔表达式具有短路求值的特性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 语言程序设计3 语言程序设计