资源简介 4.3 运用选择结构描述问题求解过程 4.3.1 if语句的应用 在解决问题的过程中,常常需要对事物进行判断和选择。在程序设计中,主要使用条件语句(if语句)来实现判断和选择。if语句在使用中包括单分支if语句和双分支if语句。 1.单分支f语句 (1)单分支语句的格式: 在使用单分支if语句时需要注意:①if (条件表达式)后面加冒号“:”;②当语句A是由多个语句构成的复合语句时,所有语句严格遵循相同的缩进。 (2)单分支if语句的执行过程。 如果条件表达式为真,则执行语句A,然后继续往下执行;如果条件表达式为假,则不执行语句A,然后继续往下执行。其执行过程如图4-7所示。 问题 项目小组成员在某购物网站上了解到某种笔记本搞优惠活动,规定一次购买6本以上(含6本) 10本以下(含10本)打九折,一次购买11本以上(含11本)打八折。怎样根据笔记本的单价和购买数量编写程序计算总费用? 思考 上述问题给出了什么条件,需要解决什么问题,解决问题的方法和步骤是怎样的? 观察 解决上述问题的方法有多种,其中一种步骤如下: (1)分析问题。 设项目小组购买笔记本的数量为s本,笔记本的单价为p元,折扣系数为j,总费用为t。根据题意,有: 如果s<6,则j=1.0; 如果6≤s≤10,则j=0.9; 如果s≥11,则j=0.8; 又t=s×p×j,求出t的值即为所求的总费用。 (2)设计算法。 根据上面对问题的分析,解决问题的算法描述如下: ①输入s,p的值; ②如果s<6,则j=1.0; ③如果6≤s≤10,则j=0.9; ④如果s≥11,则j=0.8; ⑤t=s×p×j; ⑥输出t的值; ⑦结束。 算法的流程图如图4-8所示。 (3)编写程序。 根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本素材\程序4-2”)如下: (4)调试程序。 将程序4-2输入计算机进行调试运行,并输入s的值为100,p的值为3.2,得到结果如下: 2.双分支if语句 ( 1)双分支if语句的格式: 在使用双分支if语句时需要注意:①if (条件表达式)后面加冒号“:”;②当语句A和语句B是由多个语句构成的复合语句时,所有语句严格遵循相同的缩进。 (2)双分支if语句的执行过程。 如果条件表达式为真,则执行语句A,然后继续往下执行。如果条件表达式为假,则执行语句B,然后继续往下执行。其执行过程如图4-9所示。 问题 项目小组成员在某购物网站上看到三种笔记本的优惠价各不相同,笔记本1、笔记本2 和笔记本3每本分别优惠价为a元、6元和c元,编程输出其优惠价的最大值。 思考 “求网购笔记本的费用”和“求网购笔记本优惠的最大值”有何区别?在“求网购笔 记本优惠的最大值”中,求最值的方法有哪些,该如何编程实现? 观察 解决上述问题的方法有多种,其中一种的方法步骤如下: (1)分析问题。 对于输入的三个数a,b,c,设其中的最大数为m,先找出a和b中较大的数赋给m,然后将m与c比较,从而找出三个数中最大的数。 ( 2)设计算法。 根据上面的分析,解决问题的算法描述如下: ①输入三个数a,b,c; ②如果a>b,则m=a;否则m=b; ③如果c>m,则m=c; ④输出m的值; ⑤结束。 (3)编写程序。 根据前面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本素材\程序4-3”)如下: (4)调试程序。 将程序4-3输入计算机进行调试运行,并输入a,b,c的值分别为32.5,63.4,78,结果如下: 3.if语句的嵌套 if语句允许嵌套,即if语句中的语句A和语句B还可以是if语句。 4.3.2 if...elif...else语句的应用 应用if条件语句可以快速地实现程序的分支选择,但当分支比较多时,用if...eif..else语句来实现比较简便。 ( 1 ) if...elif...else语句格式如下: ( 2 ) if...elif...else语句的执行过程。 if...elif...else语句的执行过程如图4-10所示。 问题 项目小组成员经过比较,打算在某购物网站购买三种笔记本作为奖品和纪念品,它们的单价分别为6元、5元和4元。若项目小组共有经费x元,他们希望买尽可能多的笔记本作为奖品和纪念品,并能把经费用完。那么,这三种笔记本各可以买多少本? 思考 根据上述问题给出的条件,思考如何编程找出符合条件的采购方案。 观察 解决上述问题的方法有多种,其中一种方法步骤如下: (1)分析问题。 因为要买尽量多的笔记本,所以选择4元的笔记本,可以买到的本数最多为一本,但不一定能刚好把经费用完。因此,项目小组可以按如下方案购买笔记本:如果买完一本单价为4元的笔记本,还剩1元, 则单价为4元的笔记本少买1本,换成买- -本单价为5元的笔记本即可;如果买完4本单价为4元的笔记本,还剩2元,则单价为4元的笔记本少买1本,换成买一本单价为6元的笔记本即可;如果买完工本单价为4元的笔记本,还剩3元,则单价为4元的笔记本少买2本,换成买一本单价为5元的和一本单价为6元的笔记本即可。 (2)设计算法。 根据分析,可先设购买笔记本的经费总费用共为x元,购买单价为6元、5元、4元笔记本的数量分别为m, n, k,具体算法描述如下: ①输入x的值; ②k=x//4; ③y=x%4; ④如果y的值为0,则m=0, n=0; ⑤如果y的值为1,则m=0, n=1, k=k-1; ⑥如果y的值为2,则m=1, n=0, k=k-1; ⑦如果y的值为3,则m=1, n=1, k=k-2; ⑧输出m, n, k的值; ⑨结束。 (3)編写程序。 根据设计的算法,编写出解决该问题的程序( 见配套学习资源包“第四章\课本素材\程序4-4" )如下: (4)调试程序。 将程序4-4输入计算机进行调试运行,如输入x的值为398,结果如下: 讨论 各小组讨论以下问题: (1) if语向i和.eifclse语句在格式、功能、应用等方面的异同。 (2)选择结构的特点。 实践 某学习小组的三名同学为判断某年是否为闰年的问题,各编写程序如下: 各小组完成以下实践内容: ( 1)上机调试程序,分别验证三个程序的正确性。 (2)在这三个程序中,分别采用了不同的表达式作为判断闰年的条件。分析、讨论哪一种更好。 拓展 Python语言程序调试Python是解释型语言,翻译一行就执行一行,因此在运行程序的过程中,只要任何一行出现错误,程序就会立即显示出错误信息并停止执行。此种方式虽然在调试上比较低效(因为每次只会发现一个错误),但是却很容易知道错误发生的原因以及位置。%debug命令用于调试代码,它有两种用法:一种是在执行代码之前设置断点进行调试;第二种则是在代码抛出异常之后,执行%debug命令查看调用堆栈。如图4-11是代码执行后出现的异常信息。 上面的程序中出现了ZeroDivision Error异常,下面用%debug查看调用堆栈。在调试模式下可以使用ipdb模块提供的调试命令,例如用p x显示变量x的值,如图4-12所示。 调试程序时,我们还可以先设置断点,然后运行程序。但是%‰debug的断点需要指定文件名和行号,使用起来并不方便。用%%func_debug单元命令,可以中断指定运行的函数。在如图4-13所示的例子中,程序是在np.unique()的第一行中断运行,然后通过输入n命令单步运行程序,最后输入c继续运行。 展开更多...... 收起↑ 资源预览