资源简介 中小学教育资源及组卷应用平台项目七用计算机计算圆周率———设计简单数值数据算法第二课时设计算法实现用随机投点法计算■教材分析“设计算法实现用随机投点法计算”这一小节,使用随机投点法计算圆周率,该算法的设计思路完全不同于公式法,是对解决问题思维的扩展。在教学中,教师可引导学生讨论使用for或while循环语句实现算法,并总结for、while语句的使用方法,分析其使用条件,让学生熟练掌握循环结构的设计方法。活动7.2是对本项目内容的总结和升华,通过让学生比较、感受不同算法的效率,帮助学生更加熟练地应用选择结构和循环结构实现简单算法。■教学目标1、知识和技能for和while循环语句实现算法。2、过程与方法分析其使用条件,让学生熟练掌握循环结构的设计方法。3、情感态度与价值观(1)体验程序设计和内涵及魅力,产生对程序设计的求知欲,形成积极主动地学习态度;(2)通过问题的分析与解决,帮助学生克服程序设计的畏难情绪,培养他们严谨、缜密、科学的程序设计作风。■教学重点:for和while循环语句的使用。■教学难点:for和while循环语句的选择。■教学准备计算机教室,Python,投影机。■教学素材教材案例的源代码.■教学过程:一.条件表达式在选择结构中需要根据判断条件是否被满足来执行不同的分支语句,在循环结构中则需要根据判断条件是否被满足来决定是否继续执行循环体语句。程序中表示判断条件的式子称为条件表达式,它由关系运算或逻辑运算构成,执的结果为布尔值True或False.1.关系运算符关系运算符也称为比较运算符,它的作用是对两个数据的值进行比较,比较的结果是一个布尔值。用关系运算符连接的表达式称为关系表达式。如果表达式成立,其值为Tue;如果表达式不成立,其值为False。Python语言中的6种常用的关系运算符如下表所示。Python运算符数学符号名称示例(dist=0.87)结果<<小于dist<1True<=≤小于等于dist<=1True>>大于dist>1False>=≥大于等于dist>=1False===等于dist==1False!=≠不等于dist!=1True特别要注意的是,Python语言使用“”表示赋值语句,使用“=”表示“等于”。此外,Python语言支持连续比较,例如,判断一个数x否为100到200之间的一个数,其条件表达式为:100<=x<=200。字符和字符串也可以进行比较运算,字符的比较对应字符ASCⅡ码值的大小;字符串的比较则按照字典顺序进行,举例如下。2.逻辑运算符在实际问题中,对一些复杂的条件,需要用几个关系达式组合起来表示,这种组合操作就是逻辑运算。常用的逻辑运算符包括与(and)或(or)、非(not)。这三种运算符的运算顺序是先not,再and,最后or,但可以使用括号来调整运算的先后顺序。例如,判断一个学生是否为体重(weight)大于50千克或者身高(height)小于155厘米的女生(gender:Female),条件表达式可写为:(gender=="Female")and(weight>50orheight<155)表达式中的括号可以用于定义运算的优先级,这与数中括号的作用相同。上式中先执行括号里的or运算,再执行and运算。如果不用括号,使用了如下的条件表达式gender=="Female"andweight>50orheight<155那么表达先执行and运算,再执行or运算,其含义改变为判断一个学生是否为体重大于50千克的女生,或者身高小于155厘米的学生(不论男女)二、实现选择结构的语句Python语言用if语句实现选择结构,它包括以下三种基本形式(表3-8):单分支语句双分支语句多分支语句If条件表达式:语句块1If条件表达式:语句块1Else:语句块2If条件表达式:语句块1Elif条件表达式2:语句块2……Else:语句块n语句块是if语句的条件被满足时执行的一个或多个语句序列。语句块中的语句通过与if、else、elif等关键字所在行形成缩进格式来表示包含关系。1.单分支语句if语句首先运算条件表达式,如果结果为True,则执行语句块里的语句序列;如果结果为False,则语句块里的语句会被跳过。单分支结构流程图如右图所示。例如,求x的绝对值的语句如下。2.双分支语句Python语言用if-else语句来实现双分支结构,语句块1是if语句的条件被满足时执行的一个或多个语句序列,语句块2是if语句的条件不被满足时执行的一个或多个语句序列.双分支语句针对条件的两种可能结果True或者False,分别形成两条执行路径。双分支结构流程图如下图所示。例如,编写一个让小学生练习100以内正整数减法的程序,程序随机产生两个正整数x、y,然后向学生提问类似“92-14=”这样的问题,学生回答问题后,程序显示答案是否正确。这个程序要完成两次判断。第一次,产生的两个随机数x和y,应满足x≥y才能得到非负整数的结果,如果不是,出题目的时候应该改为y-x。第二次,要将学生输入的答案与正确答案进行比较,给出“正确”或“错误”的反馈。这两个判断都是双分支结构。程序中要用到随机函数randint(a,b),产生一个[a,b]中的整数。具体语句如下。3.多分支语句Python语言用if-elif-else语句来实现多分支结构,多分支结构是双分支结的扩展。程序运行时依次判断if语句和elif语句的条件是否被满足,如果结果为True,则执行该条件下的语句块,语句块执行结束后跳出整个if-elif-else结构,执行后面的语句;如果结果为False,则转向下一个条件进行判断。如果没有任何条件被满足,则执行else下面的语句块。else子句是可选的。多分支结构流程图如下图所示。例如,编写程序,输入身高和体重,计算身体的质量指数BMI值,并给出健康信息。这个问题可以用两种分支结构来实现,语句分别如下。上面程序中eval函数的作用是将字符串参数转化为有效的表达式,求值并返回计算结果,具体到此处为自动识别输入的身高字符串和体重字符串,并转化为数值数据。两个程序的运行结果是相同的,但是它们的算法效率有明显差异。例如,当计算出的BMI值为18时,对比它们的执行过程:若执行多分支语句,进入第一个分支,输出结果后,程序执行结束;若执行单分支语句,第一个if条件满足,输出结果后,还要继续依次执行后三条if语句,并运算条件表达式的值。所以多分支语句的算法效率更高。三、设计算法实现用随机投点法计算随机投点法是通过在正方形内随机投点,用随机模拟的方法来估算圆周率。随机在正方形里撒一把豆子,每一颗豆子落在正方形内任何一点的可能性都是相等的,落在每个区域中的豆子数与这个区域的面积近似成正比。落在每个区域中的豆子数是可以数出来的,设落在扇形内的豆子数为hits,总豆子数为darts,则:由圆周率等于圆的面积与半径平方之比可知:观察图可知,单位圆的面积等于第一象限中扇形面积的4倍,单位圆半径的平方正好是图中单位正方形的面积。因此,这样,就可以通过数出落在每个区域中的豆子数得到π的近似值。豆子撒得越多,结果就越精确。(1)分析问题使用计算机模拟随机投豆(也就是投点)的整个过程如下。首先,确定总的投点数darts。然后,在边长为1的正方形中投点,并判断这个点是否在扇形区域内,如果是,则扇形区域的投点数hits增加1。(每个投点的x坐标和y坐标都是[0,1)中的随机数;若x2+y2<1,则判断该点投在扇形区域内。)最后,在所有点投完后,计算圆周率的近似值pi。这里涉及的数据变量有:总的投点数darts,,每个点的坐标值x、y,扇形区域的投点数hits,圆周率的近似值pi。(2)设计算法,编写程序用随机投点法计算圆周率的算法如下该算法的流程图和用Python语言编写的程序如下,请把它们补充完整。程序中用到了Python标准库random模块提供的系统函数random,它可随机产生一个[0,1)中的实数。算法中哪几步在重复执行?(3)运行、调试程序在Python中创建并运行程序,检查运行结果。可以发现,当总投点数为1000时,pi值的精确度还是很低的。通过增加总投点数,可以提高pi值的精确度。1.分别输入1000、5000、10000,得到圆周率的近似值分别可以精确到第几位?2.多次输入同样的总投点数1000,会得到不同的结果,这是为什么?如何减少这种不确定性?圆周率π是一个无限不循环小数,无论是用数学公式计算,还是用随机投点法计算,本质上都是对π的精确值的无限逼近。选择合适的计算方法,并设计出高效的算法正是用计算机解决类似问题的一般思路。四、课后作业对比两种计算圆周率的算法。(见P98页)>>>"Python"=="Python"True>>>"Python">"Python"False>>>"C"<"Python"TrueIfx<0:X=-Ximportrandomx,y=random.randint(1,100),random.randint(1,100)if(x>=y):print(“%d-%d=”%(x,y))answer=x-yelse:print(“%d-%d=”%(y,x))answer=y-xyouranswer=int(input())ifyouranswer==answer:print(“正确”)else:print(“错误”)height=eval(input(“请输入身高(米):”))weight=eval(input(“请输入体重(千克):”))bmi=weight/pow(height,2)print(“BMI数值为:%.2f”%bmi)Ifbmi<18.5:#<18.5print(“BMI指标为:偏瘦”)elifbmi<25:#18.5<=bmi<25print(“BMI指标为:正常”)elifbmi<30:#25<=bmi<30print(“BMI指标为:偏胖”)else:print(“BMI指标为:肥胖”)height=eval(input(“请输入身高(米):”))weight=eval(input(“请输入体重(千克):”))bmi=weight/pow(height,2)print(“BMI数值为:%.2f”%bmi)ifbmi<18.5:print(“BMI指标为:偏瘦”)if18.5<=bmi<25:print(“BMI指标为:正常”)if25<=bmi<30:print(“BMI指标为:偏胖”)ifbmi>=30:print(“BMI指标为:肥胖”)1011.输入总的投点数darts2.令hits=0;3.循环i从0到dars-1,step1;输出圆周率的近似值3.1获取x,y的随机值3.2如果x2+y2<1,则hits增加1;4.计算圆周率的近似值;5.输出圆周率的近似值;fromrandomimportrandomdarts=int(input(“请输入总的投点数:”))hits=0foriinrange(darts):x,y=random(),random()if_________________________________________________pi=4(hits/darts)print(“pi的值是”,pi)21世纪教育网www.21cnjy.com精品试卷·第2页(共2页)HYPERLINK"http://21世纪教育网(www.21cnjy.com)"21世纪教育网(www.21cnjy.com)(共38张PPT)第二课时设计算法实现用随机投点法计算信息技术沪教版必修1项目七用计算机计算圆周率——设计简单数值数据算法随机投点法课后作业选择结构语句条件表达式目录一、条件表达式1.关系运算符2.逻辑运算符在选择结构中需要根据判断条件是否被满足来执行不同的分支语句,在循环结构中则需要根据判断条件是否被满足来决定是否继续执行循环体语句。程序中表示判断条件的式子称为条件表达式,它由关系运算或逻辑运算构成,执的结果为布尔值True或False.Python语言中的6种常用的关系运算符Python运算符数学符号名称示例(dist=0.87)结果<<小于dist<1True<=≤小于等于dist<=1True>>大于dist>1False>=≥大于等于dist>=1False===等于dist==1False!=≠不等于dist!=1True1.关系运算符>>>"Python"=="Python"True>>>"Python">"Python"False>>>"C"<"Python"True字符和字符串也可以进行比较运算,字符的比较对应字符ASCⅡ码值的大小;字符串的比较则按照字典顺序进行,举例如下。2.逻辑运算符在实际问题中,对一些复杂的条件,需要用几个关系达式组合起来表示,这种组合操作就是逻辑运算。常用的逻辑运算符包括与(and)或(or)、非(not)。这三种运算符的运算顺序是先not,再and,最后or,但可以使用括号来调整运算的先后顺序。非not与and或or例如,判断一个学生是否为体重(weight)大于50千克或者身高(height)小于155厘米的女生(gender:Female),条件表达式可写为:(gender=="Female")and(weight>50orheight<155)表达式中的括号可以用于定义运算的优先级,这与数中括号的作用相同。上式中先执行括号里的or运算,再执行and运算。如果不用括号,使用了如下的条件表达式:gender=="Female"andweight>50orheight<155二、选择结构的语句三种基本形式If条件表达式:语句块1单分支语句If条件表达式:语句块1Else:语句块2双分支语句if条件表达式:语句块1Elif条件表达式2:语句块2……Else:语句块n多分支语句1.单分支语句if语句首先运算条件表达式,如果结果为True,则执行语句块里的语句序列;如果结果为False,则语句块里的语句会被跳过。单分支结构流程图如右图所示。1.单分支语句1.单分支语句例如,求x的绝对值的语句如下。Ifx<0:X=-X2.双分支语句Python语言用if-else语句来实现双分支结构,语句块1是if语句的条件被满足时执行的一个或多个语句序列,语句块2是if语句的条件不被满足时执行的一个或多个语句序列。双分支语句针对条件的两种可能结果True或者False,分别形成两条执行路径。双分支结构流程图如右图所示。2.双分支语句2.双分支语句例如:编写一个让小学生练习100以内正整数减法的程序。2.双分支语句importrandomx,y=random.randint(1,100),random.randint(1,100)if(x>=y):print(“%d-%d=”%(x,y))answer=x-yelse:print(“%d-%d=”%(y,x))answer=y-xyouranswer=int(input())ifyouranswer==answer:print(“正确”)else:print(“错误”)3.多分支语句Python语言用if-elif-else语句来实现多分支结构,多分支结构是双分支结的扩展。程序运行时依次判断if语句和elif语句的条件是否被满足,如果结果为True,则执行该条件下的语句块,语句块执行结束后跳出整个if-elif-else结构,执行后面的语句;如果结果为False,则转向下一个条件进行判断。如果没有任何条件被满足,则执行else下面的语句块。else子句是可选的。 展开更多...... 收起↑ 资源列表 项目七第二课时设计算法实现用随机投点法计算.doc 项目七第二课时设计算法实现用随机投点法计算.pptx