资源简介 (共89张PPT)必修一 《数据与计算》第四章 程序设计基础在运用计算机解决实际问题的过程中,如何把求解问题的算法告知计算机,就需要有一种能够实现人机交互的语言,而这种语言就是计算机程序设计语言。本章将通过“设计购买物品的最佳方案”项目,进行自主、协作、探究学习,让同学们了解Python程序设计语言的基础知识,掌握程序的顺序结构、选择结构和循环结构三种控制结构,学会使用程序设计语言实现简单算法,体验程序设计的基本流程,掌握程序调试与运行的方法,从而将知识建构、技能培养与思维发展融入运用数字化工具解决问题和完成任务的过程中,促进信息技术学科核心素养达成,完成项目学习目标。项目范例:设计购买纪念品的最佳方案情景如今,网上购物已经成为人们生活中的一部分。通过网购,人们不仅可以方便地在各家电商中获取商品的相关信息,而且可以对商品进行比质比价,从而以优惠的价格购得心仪的商品(图4-1 )。为了购得既经济适用又美观大方的商品,人们就要根据需求设计好购买方案。主题设计购买纪念品的最佳方案规划根据项目范例的主题,在小组中组织讨论,利用思维导图工具,制订项目范例的学习规划,如图4-2所示。探究根据项目学习规划的安排,通过调查、案例分析、文献阅读和网上资料搜索,开展“设计购买纪念品的最佳方案"项目学习探究活动,如表4-1所示。实施实施项目学习各项探究活动,进-步设计购买纪念品的最佳方案。成果在小组开展项目范例学习过程中,利用思维导图工具梳理小组成员在“头脑风暴"活动中的观点,建立观点结构图,运用多媒体创作工具( 如演示文稿、在线编辑工具等)综合加工和表达,形成项目范例可视化学习成果,并通过各种分享平台发布,共享创造、分享快乐。例如,运用在线编辑工具制作的“ 设计购买纪念品的最佳方案”可视化报告,可以在教科书的配套学习资源包中查看,其目录截图如图4-3所示。评价根据教科书附录2的 “项目活动评价表",对项目范例学习过程和学习成果在小组或班级上进行交流,开展项目学习活动评价。项目选题同学们以3-6人组成一个小组,选择下面一个参考主题,或者自拟一个感兴趣的主题,开展项目学习。1.设计购买电信服务的最佳方案2. 设计购买家用电器的最佳方案3.设计购买图书的最佳方案项目规划各小组根据项目选题, 参照项目范例的样式,利用思维导图工具,制订相应的项目方案。方案交流各小组将完成的方案在全班进行展示交流,师生共同探讨、完善相应的项目方案。4.1 程序设计语言的基础知识在运用计算机程序求解问题时,需要有-种能够实现人机交流的语言,即程序设计语言。人们通过这种语言把求解的方法和步骤告诉计算机,计算机则按照程序的流程自动求解问题。例如,求解购买纪念品的最佳方案问题,需要知道各商品的单价,才能设计出最佳方案。现在设总预算为S.需要购买10个不同品种的商品数量为x1,x2,…,x10,则求解问题的思路如下:(1)上网搜索各个商品的价格。(2)求出各个商品的最低单价a1,a2,…,a10。(3)令E=S- (a1×x1+ a2×x2 +…+ a10×x10).求x1,x2,…,x10的值(其中x1,x2,…,x10为正整数),使E最小(E≥0)。在编写上述求解算法程序前,首先应掌握程序设计的一此 基础知识,包括程序的常量和变量、数据类型、运算符与表达式及函数等。我们以Python语言为例。4.1.1 Python的常量和变量数据总是以常量或变量两种形式出现在程序中。1.常量常量是指在程序运行过程中其值始终不发生变化的量,通常是固定的数值或字符串。例如,45,-30.2001,'Hello', 'Good'等都是常量。常量可以在程序中直接使用,如语句“x=30*40" 表示将30乘40的结果赋值给x,其中30和140都是常量,可以直接在程序中使用以表示数值30和40。2.变量变量是指在程序运行过程中其值可以发生变化的量。在程序设计语言中,变量可以用指定的名字来代表,即变量由变量的“标识符”( 又称“名字”)和变量的“内容" (又称“值”)两部分组成。Python程序设计语言规定标识符由字母(A-Z,a~z)、 数字(0~9)、 下划线组成,并且其第一一个字符必须是字母或下划线,而不能是数字,如s1, k, num, pai等。在标识符中,字母大小写是有区别的,如"value" 与"Value" 是两个不同的标识符。在Python中,如果使用非法标识符,在运行程序时会有相关报错信息。例如,以下是报错非法标识符的程序:变量的内容在程序运行过程中是可以变化的。 例如,一个变量的名字为E,其内容可以为50,也可以为70。变量就像一个房间一样,变量名相当于房间的房间号,内容相当于居住于房间的不同的人员等。需要注意的是,Python是动态语言,动态语言的变量不需要进行定义数据类型,其数据类型可以不固定,是动态的,需要根据其赋子的值来确定其数据类型。与之对应的是静态语言,静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。因此,和静态语言相比,动态语言更灵活。同样一个变量是可以重复赋值的,而且可以被赋予不同类型的值,如表4. 2所示。同时,Python支持 多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量关联起来。4.1.2 Python的数据类型计算机能处理的远不只数值数据,还可以是文本、图形、音频、视频、网页等各种各样的数据。不同的数据,需要定义不同的数据类型。Python能够 直接处理的常用数据类型有Number (数值)、String (字符串)、List(列表)、 Tuple (元组)、Sets(集合)、Dictionary (字典)等。表4-3中列出了Python常用的基本数据类型。数据类型 类型说Number (数值) Python支持以下三种不同的数值类型:整型(int)。通常被称为整型或整数,是正或负整数,不带小数点。在Python 3.x版本中,整型是没有限制大小的,可以当作 Long类型使用。浮点型(float)。浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示,如2.5e2 =2.5 ×103=250。复数( complex )。复数由实数部分和虚数部分构成,可以用atbj或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。String (字符串) 字符串是以单引号或双引号括起来的任意文本,如'abc' "xyz"等。字符串的索引从0开始,-1为从末尾开始的位置。List (列表) 列表是写在方括号“[]”之间、用逗号分隔开的元素列表。例如,list1=['Good', 'Run',1997, 2000]和list2=[1,2,3,4,5,6,7]。列表的数据项不需要具有相同的类型。与字符串的索引一样,列表索引从0开始。Python已经内置确定列表的长度以及确定最大和最小的元素的方法。Tuple (元组) Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,创建元组只需要在括号中添加元素,并使用逗号隔开。例如,tup1=('Good','Run',1997,2000)和ltup2=(1,2,3,4,5)。元组与字符串类似,可以被索引且下标索引从0开始,-1为从末尾开始的位置,也可以进行截取。Sets (集合) 集合是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。可以使用大括号{ }或者set()函数创建集合。创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典的。Dictionary (字典) 字典是无序的对象集合。与列表的区别在于:列表是有序的对象集合。字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用{ }标识,它是一个无序的“键( key):值( value)”对集合。键必须使用不可变类型。在同一个字典中,键必须是唯一的,探究活动交流各小组讨论、交流相应项目选题实施过程中可能用到的数据类型。讨论各小组对“合理定义数据类型可以优化程序的运行”这一观点进行交流和讨论,并举例说明。4.1.3 Python的运算符与表达式在Python程序设计语言中对常量或变量进行运算或处理的符号称为运算符,参与运算的对象称为操作数。常用的运算符有算术运算符、逻辑运算符、关系运算符、赋值运算符、成员运算符等。由运算符、操作数连接而成的式子称为表达式。操作数可以是常量、变量、雨数等。1.算术运算符与算术表达式算术运算符包括“+”“-”“*”“/”“%”“**”和“//”,分别表示加、减、乘、除、求余、幂运算和整除。例如,“7%3=1”表示7除以3的余数,即1;“10**20”表示10的20次方,即1020。 由算术运算符连接的表达式称为算术表达式。例如,“a+3*e”“(x+y)*n-7”等。2.逻辑运算符与逻辑表达式逻辑运算符包括“and”( 与)、“or”(或)、“not”(非)共三个。由逻辑运算符连接而成的表达式称为逻辑表达式。逻辑表达式的值为True或False。可对应于整数1或0直接参与其他运算。逻辑表达式的运算顺序要根据逻辑运算符的优先级而定。假设变量a为0,b为1,c为2,则对应的逻辑表达式及其值如表4-4所示。3.关系运算符与关系表达式判断数据大小关系的运算符称为关系运算符,关系运算符有“>”(大于)、“>=”(大于等于)、“<”(小于)、“<=”(小于等于)、“=”(等于)、“<>”(不等于)。由关系运算符连接而成的表达式称为关系表达式。关系表达式的值为True或False,对应于整数1或0直接参与其他运算。例如,关系表达式“5>=3”的值为True, “9<8”的值为False。4.赋值运算符与赋值表达式在Python中对变量的赋值通过赋值运算符“=”来完成。赋值号不是等号,具有方向性,由右边赋给左边,且赋值号左边只能是变量,而不能是常量或表达式。Python的赋值运算符有多种,具体描述如表4 -5所示。5.成员运算符除了前面的运算符,Python用成员运算符判断序列中是否有某个成员。Python的成员运算符描述如表4-6所示。6.运算符的优先级当一个表达式中有多种运算符时,运算的顺序将根据运算符的优先级由高到低进行运算。如果是同级运算则按从左到右的顺序进行。Python常 用运算符的优先级如表4-7所示。思考各小组讨论程序设计中的运算符与表达式跟数学中的运算符与表达式的异同。4.1.4 Python的函数函数是Python语言程序的基石,是组织好的、可重复使用的、用来实现单-或相关联功能的代码段。Python 默认带有一些常用的函数,如求绝对值函数、求和函数、求最大值和最小值函数等。Python中常用的函数如表4 -8所示。拓展Python程序设计开发环境Python是一种面向对象的解释型计算机程序设计语言。Python语言的安装包内置了开发环境IDLE。为了快捷、方便地掌握Python语言编程,这里介绍另一个开源的Python发行版本Anaconda及其程序设计开发环境Jupyter notebook,它包含了Python语言完整的内核、功能强大的标准库和第三方扩展库等。按照教科书配套学习资源包“关于Python语言编程环境及各章程序使用说明”的指引方法,获取并运行文件安装Anaconda。安装成功后,双击“Anaconda Navigator”图标,选择“Jupyter notebook”,即可进入Python程序设计开发环境,其界面如图4-4所示。Python程序设计开发环境Jupyter notebook的使用操作,可查看教科书的配套学习资源包。项目实施各小组根据项目选题及拟订的项目方案,结合本节所学知识,开展以下活动。1.分析相应的程序设计语言的基本知识2.分析所选程序设计语言的特点。4.2 运用顺序结构描述问题的求解过程用基本结构按一定规律组成并对算法进行描述,保证和提高算法的质量,是编写优质程序的基础。按语句的先后顺序执行的结构称为“顺序结构”。顺序结构是结构化程序的基本结构之一。探究活动问题项目小组成员在某网购站点上获取到如下信息:笔记本1的单价是3元,笔记本2的单价是5元,如果两种笔记本同时购买,价格可以打八折。计算一下,购买笔记本1和笔记本2各n本,可以优惠多少元 ( 以元为单位,四舍五入到小数点后两位。)4.2.1数据的输 人与输出在程序设计中,数据的输人输出是最基本的操作之。 在Python中, 数据的输人输出通过函数来实现。1.数据的输人在Python程序设计语言中,数据输入通过input( )函数来实现,input( )的一般格式为:<变量> =input(‘提示信息:’ )该函数返回输人的对象,可输人数字、字符串和其他任意类型对象。在Python 3.x中,不论用户输人什么类型的数据,input( )函数的返回结果都是字符串,需要将其转换为相应的类型再处理。2.数据的输出在Python 3.x中,数据输出通过print( )函数来实现,print( )的一般格式为:print([object,…][,sep=‘ ‘][end=‘\n’)说明:(1)方括号中的项是可选的,可以省略,如省略则取系统的默认值。(2)object是要输出的对象,可以是常量、变量或表达式等。(3)sep后面的空格(可以指定为其他字符)表示每个输出对象之间的分隔符,如果缺省的话,默认值是一个单个的空格。例如,“print(4.5.6,sep=‘***’)”,则输出结果为“4***5***6”。(4) end后面的字符串含义为输出文本尾的一个字符串, 如果缺省的话,默认值是一个n换行符。如果设为其他字符,如end=‘ ’,则输出当前行的所有内容后,在末尾加一个空格,不换行接着输出下一个print( )的输出对象。例如,prin( )输入示例程序如下:print("hello",end=‘ ‘)print("world")输出为"hello world"。(5) print( )函数支持参数格式化,与C语言的prinf类似。4.2.2顺序结构的应用顺序结构是最常用、最简单的程序结构,其语句执行顺序是自上而下依次执行的。如第三章第二节“三种基本控制结构”所述,只要按照解决问题的顺序写出相应的语句,便可设计出程序的顺序结构。顺序结构的流程图如图4 5所示。实践各小组编程解决本节探究活动“购买笔记本的费用优惠”的问题。观察按照“3.1.2计算机解决问题的过程”,解决上述问题的方法有多种,其中一种方法步骤如下:(1)分析问题。先求出不使用优惠而单独购买所需费用,再求出使用优惠方案购买所需费用,两者相减即为节省的费用。(2)设计算法。根据上面的分析,设计算法如下:①输入n的值;②令a=3 × n;③令b=5x n;④令y=(a+b)× (1-0.8);⑤输出结果y;⑥结束。其顺序结构流程图如图4-6所示。(3)编写程序。根据上面设计的算法,可以编写出该问题的程序代码(见配套学习资源包“第四章\课本素材\程序4-1”)如下:(4)调试程序。将程序4-1的程序代码输入计算机,然后运行程序,输入n的值为50,得到结果如下所示。经验算,结果正确。交流各小组讨论、交流以下问题:(1)解决“购买笔记本的费用优惠”问题的其他方法。(2)顺序结构的特点。(3) Python程序设计语言中,还提供了位运算。查找相关资料,与项目小组成员分享、交流关于位运算的用法。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继续运行。4.4 运用循环结构描述问题的求解过程4.4运用循环结构描述问题求解过程程序的循环结构是程序设计中常用到的基本结构之一。循环是让计算机自动完成重复工作的常见方式。for循环、while循环、 循环嵌套、循环控制等都是程序循环结构的主要内容。4.4.1for循环的应用for循环语句的一般格式如下:for循环依次把列表中的每个元素逐个迭代出来。冒号“:”代表下一行是循环的第一行,但是循环体在书写时需要缩进。在Eor循环中,从for语句末尾的冒号开始至其下面没有缩进的代码之间都是其包含的需要重复执行的部分。因此,for循环所包含的语句是以缩进为标志的。具体如表4-9所示。需要注意的是,列表可以有几种表达方式:(1)直接罗列的方式。如表4-9中代码“for value in [1,2,3,4,5]:”就是直接罗列的方式。(2)先定义后使用的方式,如表4-10所示。(3)使用range()函数。range()函数是让Python从指定的第一个值开始数,并在到达所指的第二个值后停止,因此不包含第二个值。如range(1,6)其实是生成一个1~6的整数(不包含6),如表4-11所示。使用range()函数时,还可指定步长,如表4-12所示。当然,使用range()函数时,数值列表也可以是降序的,如rangc(10,1,-2)就是生成10至2的偶数(降序),具体如表4-13所示。问题假如项目小组经过讨论,决定先网购单价为1元至10元的十种笔记本各1本,且每一种只买1本,那么该如何编程计算一共要花多少元 思考如何用for循环语句编程解决上述“网购物品累计费用计算”问题 观察解决上述问题的方法有很多,其中一种方法步骤如下:( 1)分析问题。这个问题相当于要计算从1到10的累加值。1~10的累加就是计算1+2+…+10,可以用for循环结构编程来解决这个问题。(2)设计算法。根据上述分析,可设计如下算法:需要有一个循环变量从1变化到10,将该变量命名为i;还需要另外一个临时变量不断和该变量进行加法运算,并记录运算结果,将临时变量命名为sum ;变量i每增加1时,就和变量sum进行一次加法运算,变量sum记录的是累加的结果。该算法流程图如图4-14所示。(3)编写程序。根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本素材\程序4-5”)如下:(4)调试程序。将程序4-5输入计算机进行调试运行,所得结果为“the result=55”。4.4.2 while循环的应用while循环是当型循环,只要条件满足,就不断循环;否则,退出循环。while循环语句的格式:(1) 表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值真(True)或假(False)。(2)当表达式的值为真时,执行循环体语句;当表达式的值为假时, 退出循环,执行循环体外的下一条语句 (即while后面没有缩进的第一条语句 )。(3)每次循环都是执行完循环体语句后回到表达式处重新开始判断,重新计算表达式的值。一旦表达式的值为假就退出循环,为真时就继续执行循环体语句。(4)循环体中必须有改变条件表达式值的语句,否则将成为死循环。(5)while循环可以用流程图来演示执行过程,如图4-15所示。问题项目小组为了筹集购买奖品和纪念品的费用,准备开展一次募捐活动,计划向第一个赞助人募集20元,向第二个赞助人募集25元....后一个比前一个多募捐5元,依次下去,第几个人募捐后募集到的总费用累计超过500元 思考如何用while循环语句编程解决上述的募集费用计算问题 观察用while循环语句编程解决上述问题的方法有多种,编程时要注意条件表达式的构成,现给出其中一种方法的步骤如下:(1)分析问题。设所拉赞助人的数量为num (num=1, 2, 3, .).每次募集的费用为money,每次募集之后总费用为sum,则sum可以用 如下的式子表示:sum= 20+ 25+30+...于是这个问题就可以转化为:当sum ≥500时,求num的值。(2)设计算法。根据上述的分析,设计算法如下:①令num=1;②令money=20;③令sum=20;④num=num+1;⑤money= money+5;⑥sum=sum+money;⑦如果sum<500,则返回步骤④;⑧榆出num的值;⑨结束。(3)编写程序。根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本素材\程序4-6”)如下:(4)调试程序将程序4-6输入计算机进行调试运行,得出结果为12。交流各小组讨论、交流如下问题:(1)如何根据上述解法的自然语言描述画出其算法流程图 (2)对于上述问题的解法,如果改变几个变量的初始值,假设令"num=0, money =20,sum=0",那么,while循环体中的程序段应该如何编写 它们之间的语序能改变吗 为什么 4.4.3 循环嵌套的应用单独使用for循环或while循环单循环语句,往往无法解决复杂的问题。如需要解决类似“工作要做很多遍,而每一遍工作都是需要重复做一些事情” 的问题,就要用到多重循环,即“循环嵌套”。如果某一种循环语句中包含着自身或其他循环语句,就称为循环的“嵌套”。for循环或while循环之间可以相互嵌套。问题项目小组经过讨论,最后选择购买单价分别为1.8元的笔记本、1.9元的笔、2.1元的小饰品作为活动的奖品和纪念品,每一种物品至少买100件,并且尽可能地用完1000元经费。如何设计方案,才能实现购买物品数量最多呢 如数量相同的情况下余额最小的方案为最佳,则最佳方案中每一种物品的数量是多少 余额是多少 思考如何运用循环嵌套的方法编程解决上述的最优采购方案设计问题 观察要解决这个问题,需要用到循环嵌套的知识,下面提供了其中一种解法:(1)分析问题。设购买单价为1.8元、1.9元、2.1元的物品数量分别为x,y,z,当前余额为r元,所买物品总数量为s,根据题意有下面关系式:1.8x+1.9y+2.1z≤1000 ( x,y, zEN',N"为自然数),我们分别将x,y,z从100至555,526,476逐个穷举,如果x,y,z的值满足式子1.8x+1.9y+2.1z≤1000 (x,y, zEN',N'表示自然数),如x+y+z>s,则s=x+y+z,r=1000-( 1.8&+1.9y+2.1z),并记录此时x,y,z的值;如x+y+z=s,且1000- ( 1.8x+1.9y+2.1z )(2)设计算法。根据上述的分析,可设计出如下的算法:①令x1=100,令y1=100,令z1=100,令s=300,令r=1000- ( 100×1.8+100×1.9+100×2.1) ;②x从100~555穷举;③y从100~526穷举;④z从100~476穷举;⑤如果1.8x+1.9y+2.1z≤1000,若x+y+z>s,则s=x+y+z,r=1000- ( 1.8x+1.9y+2.1z) ,x 1=x,y1=y,z1=z;若x+y+z=s ,且1000-(1.8x+1.9y+2.1z)⑥转步骤④;⑦转步骤③;⑧转步骤②;⑨输出x1,y1, z1,s和r的值。(3)编写程序。根据上面设计的算法,编写出解决该问题的程序(见配套学习资源包“第四章\课本素材\程序4-7”)如下:( 4)调试运行。将程序4—7输入计算机进行调试运行,结果如下:交流各小组讨论、交流for循环、while循环语句在格式、功能、应用等方面的异同及其各自的特点。实践1.我们用or循环计算了从1到10的累加值,并且使用的循环控制变量为还增方式。借助此问题的学习,尝试设计用递减方式的循环控制编写代码。2.用while循环编程实现计 算从1到10的累加值,并对for循环、 while循环的使用进行对比。4.4.4 循环控制的应用循环控制包含控制循环变址的变化方式和控制循环的跳转。无论是or循环还是while街环,都需要一个控制循环的变量来控制循环的执行。但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。实现控制循环的跳转需要用到rrak flcontinwe两个关键字。其中,break 是中断循环,continue 是跳出本次循环体的执行。1. break语句在循环结构中,可以用break语句跳出 当前循环体,从而中断当前循环。在实际运用中,往往是在循环体中使用某一个条件来选择 是否中断循环,即跳出当前循环,维面执行当前循环外的下一条语句。也就是说,当某个条件成立的时候,需要立即退出循环,不再运行循环中余下的代码,也不管循环控制变量的条件测试的结果如何。使用brak语句, 即可让程序能按照要求执行要执行的代码。2. continue语句continue语句是对trrak语句的补充。continue不是立即跳出循环体,而是当条件符合需要跳转的时候,跳过该次循环结束前的语句,回到循环开头的条件测试部分,重新开始执行循环。同理,在实际运用中,往往是在循环体中使用某一个条件来选择是否跳转循环。项目实施各小组根据项目选题及权订的项目方案,结合本节所学知识,比较程序设计几种基本结构的特点,利用几种程序结构完成相应的程序编写,进一步完善该项目方案中的各项学习活动,并参照项目范例的样式,撰写相应的项目成果报告。成果交流各小组运用数字化学习工具,将所完成的项目成果,在小组或班级上进行展示与交流,共享创造、分享快乐。 活动评价各小组根据项目选题、权订的项目方案、实施情况以及所形成的项目成果,利用教科书附录2的“项目活动评价表",开展项目学习活动评价。拓展:函数的定义与调用在面对较大项目的时候,随着堆砌的代码越来越多,编程人员发现有很多功能重复的模块被反复地键入和执行。因此需要考虑是否可以将这些功能具体且经常使用的代码段,从程序中抽离出来单独封装。于是,函数的概念出现在编程语言里。在对函数的设计方面,我们可以向函数提供必要的参数输入,同时可以调用函数获取所需的返回值。Python采用def作为关键词来定义一个函数,具体例子如下:定义和调用函数getValue(b,r,n),根据本金b、年利率r和年数n,计算最终收益u。提示:v=b(1+r)"。程序运行结果为:1276.2815625000003。本章扼要回顾同学们通过本章学习,根据“程序设计基础”知识结构图,扼要回顾,总结、归纳学过的内容,建立自己的知识结构体系。本章学业评价同学们完成下列测试题(更多的测试题可以在教科书的配套学习资源包中查看),并通过“本章扼要回顾”以及本章的项目活动评价,综合评价自己在信息技术知识与技能.解决实际问题的过程与方法。以及相关情感态度与价值观的形成等方面,是否达到了本章的学习目标。1.单选题(1)在Python中,元素是无序不重复的是()A.列表 B.元组 C.集合D.字符串(2)在以下运算符中,优先级最低的运算符是()A.* B. != C.+ D. =(3)有以下程序段:程序的运行结果为()A.24 5 B.120 5 C.24 4 D.120 42.思考题编写函数,接收一个正偶数为参数, 输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。3.情境题依法纳税是每一个公4民应尽的义务。同学们上网学习2018年8月31日第七次修正的《中华人民共和国个人所得税法》,了解居民个人应纳税所得额的含义和个人所得税税率表(综合所得适用),试设计一个程序计算以下人员应缴个人所得税额。 展开更多...... 收起↑ 资源预览