第4章 基本控制结构的程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
4.3.2Python的range()函数
如果需要遍历一个数字序列,可以使用Python 中内建的函数range()。语法如下: range( start,end,step =1) range()会返回一个包含所有k的列表,这里 start<=k<end,从start到end,k每次递增step。 step不可以为零,否则将发生错误。需要注意 的是start和end组成了半开区间,列表里的k取 不到end。
7
4.2.3Python分支嵌套
求三个数的最大值。 numA=3 numB=4 numC=5 if numA <= numB: if numC<numB: print ("numB是最大的数") else: print ("numC是最大的数") else: if numC<numA: print ("numA是最大的数") else: print ("numC是最大的数")
第四章 基本控制结构的程序设计
1
相关研究表明三种基本程序结构可以写出 所有的程序,它们是: 顺序结构 分支结构 循环结构
2
4.1用Python实现顺序结构 程序的入口从a开始,自顶向下, 依次执行A代码块,B代码块,最 后执行到b,那么a和b就是一种顺 序结构的程序。而A代码块,B代 码块放的是什么内容呢?它们的 内容可以继续是一个顺序结构, 又或者是分支、选择结构。这也 叫做程序的嵌套,正是因为嵌套 的存在,使得程序的执行顺序, 可以灵活变化,从而实现不同的 功能。
22
4.5循环结构应用
输出星号(*)
约瑟夫环
23
4.5循环结构应用------输出星号(*)
将一个星号(*)按照一定的规律输出, 组成三角形、菱形等图形,是学习循环 结构经常用到的应用案例。
24
4.5循环结构应用------输出星号(*)
解题思路: 双重循环 行数为i,每行星号的数量或者空格的数量为j 找出i和j的函数关系(红色标注)
10
在python中,提供了两种经常 用到的循环结构: For结构
While结构
11
4.3.1Python的for循环语句
这种循环结构的语法如下: for迭代变量 in 序列或者迭代器 循环体 else: 表达式 在循环正常退出时,会执行else块。
12
4.3.1Python的for循环语句
【例6】:设计一个元组,并用循环结构依次显示其中的内容。 在Python的IDLE环境下创建一个名为for_statement.py的程序,代码 如下所示: generals = [ "李元霸", "宇文成都", "秦琼", "程咬金", "单雄信" ] print ("-- 武将列表 --") for x in generals: print ("武将姓名:",x) 上述代码输出结果如下: >>> -- 武将列表 -武将姓名: 李元霸 武将姓名: 宇文成都 武将姓名: 秦琼 武将姓名: 程咬金 武将姓名: 单雄信 >>> 讨论如何循环显示一个字符串呢?
求解银行存款利息问题 已知银行存款利率为1.9%,编写程序计算并输出需要 存多少年,10000的存款本金才会连本带利翻一番 。
18
这显然是一个迭代问题,而且是以年为单位,本金在发生 变化,而这样的循环究竟要循环多少次呢?显然是这个问题 要求解的结果,对于不知道循环次数的问题,使用while是非 常方便的 本实例可以用如下代码实现: cunkuan = 10000 #本金10000元 years=0 while cunkuan<20000: years+=1 cunkuan=cunkuan*(1+0.019) print(str(years)+"年以后,存款会翻番") 程序运行结果如下: >>> 37年以后,存款会翻番 >>>
14
4.3.2Python的range()函数
请说出下面几个序列所对应的内容:
range(2,19,3)
[2,5,8,11,14,17]
range(3,7)
[3,4,5,6,]
range(5)
[0,1,2,3,4]
15
利用for range对鸡兔同笼问题进行求解 思维目标:穷举法思维
16
4.3.3Python的while循环结构
26
4.5循环结构应用------约瑟夫环
一共有三十个人,从1~30依次编号。每次隔9个人就踢出去一个人。 求踢出的前十五个人的号码:参考实验资料中script/joseph_new.py)
list=[x for x in range(1,31)] for x in list: print(x) print("被剔除:") del_number=-1 for i in range(1,15): #生成编号 j=0; k=del_number+1 while j<9: if(k==len(list)): k=0 if(list[k]!=-1): j=j+1 k=k+1 del_number = k-1 print(list[del_number]) list[del_number]=-1 #用-1标记被踢出的位置
19
请大家讨论什么时候使用while,什么 时候使用for方便?
20
4.3.4Python的break、continue和pass语句
在循环的过程中,可使用循环控制语句来控制循环的执行。 有三个控制语句,分别是break、continue和pass。 当break语句在循环结构中执行时,它会忽视后面的代 码块,立即跳出其所在的最内层的循环结构,转而执行该 内层循环结构后面的语句。 与break语句不同,当continue语句在循环结构中执行 时,并不会退出循环结构,而是立即结束本次循环,重新 开始下一轮循环,也就是说,跳过循环体中在continue语 句之后的所有语句,继续下一轮循环。 循环体可以包含一个语句,也可以包含多个语句,但是 却不可以没有任何语句。如果只是想让程序循环一定次数, 但是循环过程什么也不做的话, 使用pass语句,它不执行 任何操作。
思维探索: 讨论上面第三个星号图中的ij函数关系
25
4.5循环结构应用------约瑟夫环
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆 桌周围。从编号为k的人开始报数,数到m的那个人出列; 他的下一个人又从1开始报数,数到m的那个人又出列; 依此规律重复下去,直到圆桌周围的人全部出列,这个问 题也被称为约瑟夫环问题。
4
4.2用Python实现分情况决策程序
简单分支 双分支 分支嵌套 多分支
5
4.2.1Python简单分支
A
成立 条件
B
【例2】:在Python的 IDLE环境下创建一个名为 if_statement.py的程序, 代码如下所示: numA=3 numB=4 if numA <= numB: print ("numB是比 较大的数")
28
实验内容
4.4.2 实验范例 1,3 4.4.3 实验内容 1,2,3,5 补充习题
29
3
a A
B b
【例1】:温度转换 问题分析和算法可以参考第二章的例2,温度华氏和摄 氏温度两者对应关系是F=(9/5)C+32。 程序代码: celsius = int(input('请输入一个摄氏温度 : ')) fahrenheit=(9/5)* celsius + 32 print('华氏温度:') print(fahrenheit) 执行结果: >>> 请输入一个摄氏温度 : 33 华氏温度: 91.4 >>>
21
4.3.4Python的break、continue和pass语句
mylist = ["zope","Python","perl","Linux"] for technic in mylist: if technic == "perl": break else: print technic
答案为:zope Python
A
B
成立 条件
从该流程图可以看出: (1)只有一个入口。 (2)只有一个出口。(请注意:一个 菱形判断框有两个出口,而一个选择结 构只有一个出口。不要将菱形框的出口
不成立
C
(3)结构内的每一部分都有机会被执 行到。 (4)结构内不存在“死循环”(无终止 的循环)。
17
4.3.3PYTHON的WHILE循环结构
8
4.2.4多分支结构
【例5】:在Python的IDLE环境下创建一个名为if_elif_else_statement.py的程序,利用多分支 结构,求解三个数的最大值。代码如下所示: numA=3 numB=4 numC=5 if numA>=numB and numA>=numC: print("numA是最大值") elif numB>=numC and numB>=numA: print("numB是最大值") else: print("numC是最大值")
for i in range(1,11): s="" for j in range(0,10-i): s +=" " for j in range(0,2*i-1): s +="*" print (s)
for i in range(1,11): s="" for j in range(0,i): s +="*" print (s)
27
Biblioteka Baidu
1 2 3 4 5 6 d 7 d 8 d 9 d 10 11 12 d 13 14 15
d
16 d 17 18 d 19 d 20 21 22 d 23 24 d 25 26 d 27 d 28 29 30 d
6
4.2.2Python双分支
A
成立 条件
B
C
【例3】:在Python的IDLE环 境下创建一个名为 if_else_statement.py的程序, 代码如下所示: numA=3 numB=4 if numA <= numB: print ("numB是比较大的数 ") else: print ("numA是比较大的数 ")
9
4.3用Python实现循环结构结构程序
请大家探讨如何求出 1+2+3+4+……+100的结果?
在算法中,把这种从某处开始,按照一定条件,反复执行某 一处理步骤的过程,叫做循环结构。它是可以循环执行 某些语句的结构,能够在一定程度上减少程序的复杂性。 它由循环条件和循环体组成,但存在一个上述结构都没 有的安全隐患,那就是死循环。
4.3.2Python的range()函数
如果需要遍历一个数字序列,可以使用Python 中内建的函数range()。语法如下: range( start,end,step =1) range()会返回一个包含所有k的列表,这里 start<=k<end,从start到end,k每次递增step。 step不可以为零,否则将发生错误。需要注意 的是start和end组成了半开区间,列表里的k取 不到end。
7
4.2.3Python分支嵌套
求三个数的最大值。 numA=3 numB=4 numC=5 if numA <= numB: if numC<numB: print ("numB是最大的数") else: print ("numC是最大的数") else: if numC<numA: print ("numA是最大的数") else: print ("numC是最大的数")
第四章 基本控制结构的程序设计
1
相关研究表明三种基本程序结构可以写出 所有的程序,它们是: 顺序结构 分支结构 循环结构
2
4.1用Python实现顺序结构 程序的入口从a开始,自顶向下, 依次执行A代码块,B代码块,最 后执行到b,那么a和b就是一种顺 序结构的程序。而A代码块,B代 码块放的是什么内容呢?它们的 内容可以继续是一个顺序结构, 又或者是分支、选择结构。这也 叫做程序的嵌套,正是因为嵌套 的存在,使得程序的执行顺序, 可以灵活变化,从而实现不同的 功能。
22
4.5循环结构应用
输出星号(*)
约瑟夫环
23
4.5循环结构应用------输出星号(*)
将一个星号(*)按照一定的规律输出, 组成三角形、菱形等图形,是学习循环 结构经常用到的应用案例。
24
4.5循环结构应用------输出星号(*)
解题思路: 双重循环 行数为i,每行星号的数量或者空格的数量为j 找出i和j的函数关系(红色标注)
10
在python中,提供了两种经常 用到的循环结构: For结构
While结构
11
4.3.1Python的for循环语句
这种循环结构的语法如下: for迭代变量 in 序列或者迭代器 循环体 else: 表达式 在循环正常退出时,会执行else块。
12
4.3.1Python的for循环语句
【例6】:设计一个元组,并用循环结构依次显示其中的内容。 在Python的IDLE环境下创建一个名为for_statement.py的程序,代码 如下所示: generals = [ "李元霸", "宇文成都", "秦琼", "程咬金", "单雄信" ] print ("-- 武将列表 --") for x in generals: print ("武将姓名:",x) 上述代码输出结果如下: >>> -- 武将列表 -武将姓名: 李元霸 武将姓名: 宇文成都 武将姓名: 秦琼 武将姓名: 程咬金 武将姓名: 单雄信 >>> 讨论如何循环显示一个字符串呢?
求解银行存款利息问题 已知银行存款利率为1.9%,编写程序计算并输出需要 存多少年,10000的存款本金才会连本带利翻一番 。
18
这显然是一个迭代问题,而且是以年为单位,本金在发生 变化,而这样的循环究竟要循环多少次呢?显然是这个问题 要求解的结果,对于不知道循环次数的问题,使用while是非 常方便的 本实例可以用如下代码实现: cunkuan = 10000 #本金10000元 years=0 while cunkuan<20000: years+=1 cunkuan=cunkuan*(1+0.019) print(str(years)+"年以后,存款会翻番") 程序运行结果如下: >>> 37年以后,存款会翻番 >>>
14
4.3.2Python的range()函数
请说出下面几个序列所对应的内容:
range(2,19,3)
[2,5,8,11,14,17]
range(3,7)
[3,4,5,6,]
range(5)
[0,1,2,3,4]
15
利用for range对鸡兔同笼问题进行求解 思维目标:穷举法思维
16
4.3.3Python的while循环结构
26
4.5循环结构应用------约瑟夫环
一共有三十个人,从1~30依次编号。每次隔9个人就踢出去一个人。 求踢出的前十五个人的号码:参考实验资料中script/joseph_new.py)
list=[x for x in range(1,31)] for x in list: print(x) print("被剔除:") del_number=-1 for i in range(1,15): #生成编号 j=0; k=del_number+1 while j<9: if(k==len(list)): k=0 if(list[k]!=-1): j=j+1 k=k+1 del_number = k-1 print(list[del_number]) list[del_number]=-1 #用-1标记被踢出的位置
19
请大家讨论什么时候使用while,什么 时候使用for方便?
20
4.3.4Python的break、continue和pass语句
在循环的过程中,可使用循环控制语句来控制循环的执行。 有三个控制语句,分别是break、continue和pass。 当break语句在循环结构中执行时,它会忽视后面的代 码块,立即跳出其所在的最内层的循环结构,转而执行该 内层循环结构后面的语句。 与break语句不同,当continue语句在循环结构中执行 时,并不会退出循环结构,而是立即结束本次循环,重新 开始下一轮循环,也就是说,跳过循环体中在continue语 句之后的所有语句,继续下一轮循环。 循环体可以包含一个语句,也可以包含多个语句,但是 却不可以没有任何语句。如果只是想让程序循环一定次数, 但是循环过程什么也不做的话, 使用pass语句,它不执行 任何操作。
思维探索: 讨论上面第三个星号图中的ij函数关系
25
4.5循环结构应用------约瑟夫环
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆 桌周围。从编号为k的人开始报数,数到m的那个人出列; 他的下一个人又从1开始报数,数到m的那个人又出列; 依此规律重复下去,直到圆桌周围的人全部出列,这个问 题也被称为约瑟夫环问题。
4
4.2用Python实现分情况决策程序
简单分支 双分支 分支嵌套 多分支
5
4.2.1Python简单分支
A
成立 条件
B
【例2】:在Python的 IDLE环境下创建一个名为 if_statement.py的程序, 代码如下所示: numA=3 numB=4 if numA <= numB: print ("numB是比 较大的数")
28
实验内容
4.4.2 实验范例 1,3 4.4.3 实验内容 1,2,3,5 补充习题
29
3
a A
B b
【例1】:温度转换 问题分析和算法可以参考第二章的例2,温度华氏和摄 氏温度两者对应关系是F=(9/5)C+32。 程序代码: celsius = int(input('请输入一个摄氏温度 : ')) fahrenheit=(9/5)* celsius + 32 print('华氏温度:') print(fahrenheit) 执行结果: >>> 请输入一个摄氏温度 : 33 华氏温度: 91.4 >>>
21
4.3.4Python的break、continue和pass语句
mylist = ["zope","Python","perl","Linux"] for technic in mylist: if technic == "perl": break else: print technic
答案为:zope Python
A
B
成立 条件
从该流程图可以看出: (1)只有一个入口。 (2)只有一个出口。(请注意:一个 菱形判断框有两个出口,而一个选择结 构只有一个出口。不要将菱形框的出口
不成立
C
(3)结构内的每一部分都有机会被执 行到。 (4)结构内不存在“死循环”(无终止 的循环)。
17
4.3.3PYTHON的WHILE循环结构
8
4.2.4多分支结构
【例5】:在Python的IDLE环境下创建一个名为if_elif_else_statement.py的程序,利用多分支 结构,求解三个数的最大值。代码如下所示: numA=3 numB=4 numC=5 if numA>=numB and numA>=numC: print("numA是最大值") elif numB>=numC and numB>=numA: print("numB是最大值") else: print("numC是最大值")
for i in range(1,11): s="" for j in range(0,10-i): s +=" " for j in range(0,2*i-1): s +="*" print (s)
for i in range(1,11): s="" for j in range(0,i): s +="*" print (s)
27
Biblioteka Baidu
1 2 3 4 5 6 d 7 d 8 d 9 d 10 11 12 d 13 14 15
d
16 d 17 18 d 19 d 20 21 22 d 23 24 d 25 26 d 27 d 28 29 30 d
6
4.2.2Python双分支
A
成立 条件
B
C
【例3】:在Python的IDLE环 境下创建一个名为 if_else_statement.py的程序, 代码如下所示: numA=3 numB=4 if numA <= numB: print ("numB是比较大的数 ") else: print ("numA是比较大的数 ")
9
4.3用Python实现循环结构结构程序
请大家探讨如何求出 1+2+3+4+……+100的结果?
在算法中,把这种从某处开始,按照一定条件,反复执行某 一处理步骤的过程,叫做循环结构。它是可以循环执行 某些语句的结构,能够在一定程度上减少程序的复杂性。 它由循环条件和循环体组成,但存在一个上述结构都没 有的安全隐患,那就是死循环。