python程序设计教学基础实例-课程word公开课.docx
《python程序设计教学基础实例-课程word公开课.docx》由会员分享,可在线阅读,更多相关《python程序设计教学基础实例-课程word公开课.docx(47页珍藏版)》请在咨信网上搜索。
1、Python程序设计教学基础实例浙江省普通高中Python程序设计教学基础实例浙江省浦江中学 方春林目 录第一讲 取数问题 . 3第二讲 最值问题 . 5第三讲 累加专题 . 7 数字累加 字符串累加第四讲 秦九韶算法 12第五讲 对称数(回文) . 14第六讲 进制转换专题 17 十进制数转二进制数 二进制数转十进制数 二进制与十六进制相互转换第七讲 字符串专题 23 字符串基本操作 字符串中取数字 字符串中取单词 字符串中统计 字符串加密第八讲 “数”问题 . 37 质数 最大公约数 斐波那契数列第九讲 约瑟夫问题 . 42第一讲 取数问题中国象棋是中国的一种二人对抗性游戏的棋戏,可以修心
2、养性,陶冶情操,丰富文化生活,深受广大群众的喜爱。玩象棋时,必须先确定动哪一个“棋子”,然后将“棋子”移动到下一步;数学上计算两数之和,要先确定是哪2个数做加法运算;在windows中要删除某个文件,需要先选择要删除的文件,然后再执行删除操作;我们做任何事,必须先弄清对象,然后再执行相应的操作。编写程序,就是将任务用计算机能看懂的语言一行行地写好,然后交给计算机一步一步执行。计算机执行指令,也需要先确定要操作的对象,比如做加法指令,必须确定要操作的两个数据。而很多时候,需要指定数据中获取需要的数据这就是取数问题。根据目标数据类型不同,取数问题可以分为整数型中取数问题和字符串中取数问题。下面分这
3、两种类型分别讲解如何取数。1.整数型对于整数型数据,利用整除和取余方法获取各位上的数字 已知一个两位数x,写出该数的个位数a及十位数b的python表达式a = x % 10 # x除以10的余数就是个位数b = x / 10 # 整除10得到十位数 写出三位数x的个位数a,十位数b,百位数c的python表达式a = x % 10b = x / 10 % 10 (或者 b = x % 100 / 10)c = x / 100 2.字符串型 字符串取子串用切片;sstart:end:step表示从索引start开始取,直到索引end为止,但不包括索引end,步长step。举例如下:练习 写出计
4、算一个三位整数x的各位数之和的python表达式。 根据18位身份证号码sfz,写出计算年龄的python表达式。 写出以一个三位数x开头的对称数的python表达式,如x=123,则输出123321。 写出以n位字符串s开头的长度2n-1位的对称字符串的python表达式,如s=abcdef,则输出abcdefedcba。第二讲 最值问题最值指在一个数据范围中的最大值或最小值。比如2500名学生成绩数据中找出成绩最好的学生;在一段字符串中找出最大的字符等等。1.求最值一般的思路 假定第一个数据最大并赋值给Maxx; 取出下一个数与最大值Maxx比较,若大于最大值Maxx,则更新最大值Maxx
5、,直到枚举完所有数据;2.求最值程序模板Maxx = List0 #List为数据集合for item in List1: #第2个元素开始枚举数据if item Maxx: #取出的数据大于Maxx的更新MaxxMaxx = item3.实例讲解输入一串字符串,输出该字符串中最大的字符。思路:该问题是最值问题,可以直接应用求最值的程序模板,代码如下:4.python方法求最值python中提供了函数max(),min()分别求最大值,最小值。max()函数原型max(iterable, *,key,default)参数:iterable,表示可迭代对象,数据集合函数功能:取传入的多个参数中(
6、或可迭代对象元素中)的最大值。min()函数原型min(iterable,*,key,default)参数:iterable,表示可迭代对象,数据集合函数功能:取传入的多个参数中(或可迭代对象元素中)的最小值。举例如下:上述实例,可以利用max()函数实现,代码为:maxchar = max(strs)练习 输入批量数据,编程输出该批量数据中的最大值,最小值。 输入一个三位数,将该数各位上的数字重新排列得到新整数,求最大整数和最小整数。 输入一个正整数,将该数各位上的数字重新排列得到新的整数,求最大整数和最小整数。第三讲 累加专题 3.1 数值累加道德经 :“九层高台,起于累土。” 累:积累,
7、叠加。加:增加。累加:在原有基础上添加。我们讲累加是指批量数据做加法运算。根据数据类型的不同,分数值累加和字符串累加两类问题进行讲解。本节介绍数值累加。1.问题引入计算s=1+2+3的和我们可以按如下分步运算s=0s=s+1s=s+2s=s+3经过以上4个步骤,可以得到s的结果。如果计算s=1+2+3+100呢,也可以分步完成s=0s=s+1s=s+2.s=s+100如何将上述计算过程转化为程序代码呢?编程也可以像数学上的提取公因数法,取出每个语句的公共部分,然后加上不同的部分来写代码。上述的100(n=100)条语句可以简化为一条语句s=s+ x ,然后让x在1,n之间逐一枚举。要实现1,n
8、之间逐一枚举,可以使用for语句和range对象实现。因此计算s=1+2+3+.+100的代码可以如下:2.数值累加模板累加程序的代码可以用以下通用模板(写程序也可以用模板,简化写程序的过程)。在该模板中,程序将实现n个X的累加;X是每一个需要累加的数据,可以用python表达式表示,累加程序关键是变量X如何表达。3.python方法实现累加python使用函数sum()函数累加。该函数的原型如下sum(iterable,start)参数说明:iterable - 可迭代对象,如:列表、元组、集合。start - 指定相加的参数,如果没有设置这个值,默认为0。返回值:计算结果。4.实例讲解 编
9、程实现计算s=1+1/2+1/3+1/n 的值(n=100)本问题是n个数相加的问题,可以应用累加模板,计算范围是1,n,变量X = 1 / i。因此该问题可以写成如下代码:【pythonic】利用函数sum()计算累加,构造好迭代对象即可。s = sum(1 / k for k in range(1,n + 1) ,其中1 / k for k in range(1,n + 1)为列表生成式,该表达式生成列表1,1/2,1/3,.,1/n。 编程实现s=1+3+5+n (n=100)本问题是n个数相加的问题,可以应用累加模板,计算范围是1,n,变量x是范围中的奇数。代码如下:【pythonic
10、】先生成迭代对象,再利用函数sum()求和k for k in range(1,n,2)该列表生成式生成1,3,5,范围内的奇数。代码如下: s=sum(k for k in range(1,n,2) 练习 编程计算s=1+(1+2)+(1+2+3)+(1+2+3+n) (n=10000)。 编程计算s=1-2+3-4+n(n=10000)。 编程实现100以内能被3整除数的和。3.2 字符串累加字符串累加是指批量字符串前后连接起来,生成新的字符串。1. 问题引入 输入5,屏幕上显示”12345”。本题的结果是将数据1,2,3,4,5前后拼接得到,这是字符串的累加。按1,2,3,4,5的先后顺
11、序将数据累加。最先出现的1在最前面,最后出现的5在最后面。这就像排队时,先来的人排在前面,后来的人排在后面。我把它称为“排队累加”。代码如下:运行结果如下: 输入5,屏幕是上显示”54321”。本题也是将数据1,2,3,4,5拼接得到的结果,拼接的时候是最先出现的1在最后面,最后出现的5在最前面。这就像排队时,后来的人插队,排在了前面。我把它称为“插队累加”。代码如下:运行结果如下:2.字符串累加模板“排队累加”中看出变量i从1递增到5,程序每次将i累加到字符串s的后面。程序模板如下:x是待累加的字符串数据,s是累加的结果。“插队累加”中看出变量i从1递增到5,程序每次将i累加到字符串s的前面
12、。程序模板如下:x是待累加的字符串数据,s是累加的结果。3.实例讲解输入数据5,在屏幕上打印如下的数字图形。排队累加插队累加从图上看出输出共5行,第i行打印的数据是第i-1行的内容加上i,因此这是字符串累加问题。再观察发现左边的是字符串的排队累加,右边的是插入累加,代码如下:练习 十进制数转BCD码。5421BCD码是一种采用四位二进制数表示一位十进制是的编码,其各位的权依次为5,4,2,1,并要求大于等于5的十进制数所对应的编码最高位为1(如十进制数7所对应的“5421BCD”码为1010)。转换时,将十进制数从右往左按位转换成对应的“5421BCD”码,然后依次连接。(程序运行如右图) .
13、输入1个整数,输出如下的图形。第四讲 秦九韶算法秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。1.数学描述把一个n次多项式改写如下所示:求多项式的值时,首先计算最内层括号内一次多项式的值,ans0 = anans1 = ans0 * x +an-1然后由内向外逐层计算一次多项式的值,即ans2 =ans1 * x +an-iansn=ansn-1*x+a0这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。2.算法描述 输入f(x)的系数a0,a1,an,输入
14、x的值 答案ans初始化为an 对于I =1,2,3,n,循环执行ans=ans * x +an-i 输出ans3.流程图描述4.程序代码n = int(input(请输入多项式项数n)xs = list(map(int,input().split()x = int(input(输入x的值)ans = xsnfor i in range(1,n + 1): ans = ans * x + xsn - iprint(ans)xs列表中存放多项式系数,多项式格式为:f(x)=xsn*x*n+xsn-1*x*(n-1)+xs1*x+xs0练习 输入一个正整数,计算各位数之和。第五讲 对称数(回文)对
15、称数是指从左到右读和从右到左读是完全一样的数据。下面分数值类型和字符串类型两类进行描述。1.对称数1.1 对称数的判断思路及算法判断某数是否为对称数,只需要生成该数的逆序数,然后判断这两者是否一致。生成逆序数的方法可以使用秦九韶算法。如数据x = 12321,生成它的逆序数的方法逆序数结果保存在变量rst中,首先赋初值0即rst = 0,接下来的步骤如下:取出倒数第1位1,并计入结果变量rst中,rst = 10 * rst + 1取出倒数第2位2,并计入结果变量rst中,rst = 10 * rst + 2取出倒数第5位12,并计入结果变量rst中,rst = 10 * rst + 1最后再
16、判断x 和rst是否相同,相同为对称数,否则不是。1.2.对称数代码实现1.3.生成对称数从数字1开始连续递增生成指定长度(不超过18位)的对称数。如长度为5,则生成对称数12321,长度6,则生成123321。思路:生成n位对称数,根据n的奇数偶数分别来生成对称数。步骤如下:先生成前半部分,从1开始循环到n / 2结束,利用秦九韶算法生成整数并存储在rst;若n为奇数,则将中间数(n+1) / 2,添加到rst尾部;再生成后半部分,从n/2开始到1结束,利用秦九韶算法生成整数并存储在rst;1.4 生成对称数代码方法1:对称数分前后2部分分别生成方法2:1个循环生成对称数(n为正奇数)分析:
17、奇数个数的对称数的特点,如对称数123454321,中间数mid=5。第1个数x=1,与mid 相差y=4第2个是x=2,与mid 相差y=3第3个是x=3,与mid 相差y=2第7个数x=3,与mid相差y=2第8个数x=2,与mid相差y=3第9个数x=1,与mid相差y=4发现规律没有?x 加 y(x与mid的差值的绝对值)等于1个常量(mid的值)。代码如下:2 对称字符串(或回文)2.1 对称字符串的判断2个思路思路1:与对称数的判断方法一样,利用字符串累加方法生成原始字符串的逆序字符串,然后判断生成的字符串与原始字符串是否相同。(代码请同学们完成)思路2:假定字符串长度为n,逐个判
18、断第1个和倒数第1个是否相同,第i个与第n-i-1个是否相同,直到n / 2为止。若有一次取出的前后两个字符不相同,说明不是对称字符串,否则就是对称字符串。2.2思路2 程序代码3 生成对称字符串生成对称字符串与生成对称数类似,不同的数据类型发生改变,原来是数字,现在变成字符串。3.1 生成以字符”a”开始长度n(n=52)的字符串。思路与生成对称数一样,有两种不同的方法。思路1 分前后两部分生成。思路2 利用字符串累加原理。(请自行完成代码)思路3 利用一个循环一次生成循环序列。(请自行完成代码)思路1 程序代码:练习 生成对称字符串的其它两个思路的程序实现。 编写程序生成左下图的菱形。 第
19、六讲 进制转换专题计算机中所有数据都用二进制表示,而现实生活中更多的是十进制的数据。因此需要对不同的进制进行转换。6.1 二进制数转十进制数1.二进制数转换为十进制数算法及程序实现以二进制数”1011B”转换为十进制数为例讲解转换步骤。方法1:逐位按权值求和(从左往右)1011B=1*23+0*22+1*21+1*20 思路:上述表达式中可以看成是4个数字x相加,每个x有什么特征呢?x是二进制数的某1位数字 * 相应的权值。该过程就是一个4个数据累加的过程,因此可以用累加语句模板来实现将二进制数转换为十进制数。代码实现方法2:逐位按权值求和(从右往左),这是取的方向不一样,结果是一致的。101
20、1B=1*20+1*21+0*22+1*23 思路同方法1,只是数据的位置发生改变,代码如下:上述代码中,如果熟练了就没有必要变量a,b分步写,可以直接写一个表达式。这样写为了让学生初学时更好理解。方法3:运用秦九韶算法,该算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。通俗的说十进制数x,在其尾数加一位数y,得到新的数z,则z=10*x+y;同理对于任何二进制数x,其尾数加一位数y,得到新的数z,则z=2*x+y。将二进制数“1011B”转换为十进制数的分步过程如下表1011B二进制数每1位初始值s=0第1次取的数1s=2*s+ 1第2次取的数0s=2*s+ 0第3次取的数1s=2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 程序设计 教学 基础 实例 课程 word 公开
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。