资源简介 第八节 简单算法及其程序实现1. 某厂共有y件产品被抽检,其中,合格品数量为x,编写Python程序来计算该批次产品的合格率p,并保留两位小数。具体代码如下:y=int(input("共有产品:"))x=int(input("合格品数量为:"))p= print("合格率为:",p)横线上应填入的代码为( A )A. int(100*x/y+0.5)/100B. round(x/y)C. x/yD. int(10*x/y+0.5)/10【解析】 合格率=合格品数量/总数,对p按四舍五入法保留两位小数,round(x/y)按四舍五入法保留整数,x/y取整数部分,int(10*x/y+0.5)/10按四舍五入法保留1位小数。2. 若一个三位数等于其各位上数字的立方和,则称这个数为“水仙花数”。例如:371=33+73+13,371就是一个“水仙花数”。利用如下Python程序可实现判定输入的一个三位数是否为“水仙花数”:number=int(input("请输入一个三位数:"))x=number//100y= ① z=number%10if ② : print(number,"是 水仙花数 ")else: print(number,"不是 水仙花数 ")横线上应填入的代码为( B )A. ①number%100 ②x**3+y**3+z**3==numberB. ①number%100//10 ②x**3+y**3+z**3==numberC. ①number/10%10 ②x**3+y**3+z**3==numberD. ①number/10 ②x**3+y**3+z**3===number【解析】 ①根据程序可知,y是取所输入三位数的十位上的数字,应填入代码为number%100//10或number//10%10;②根据“水仙花数”的定义,应填入的代码为x**3+y**3+z**3=number。3. 某Python程序如下:a=[2, 4, 5, 7, 1]m=0s=0for i in range(5) : if a[i]>m: m=a[i]+1 else: m=a[i]-1 s=s+mprint(s)程序运行后,输出的结果是( A )A. 20 B. 21C. 22 D. 23【解析】 第一次循环:2>0,m=3;第二次循环:4>3,m=5;第三次循环:5=5,m=4;第四次循环:7>4,m=8;第五次循环:1<8,m=0;所以s=3+5+4+8+0=20。4. 某Python程序如下:x=int(input("输入x:"))if x<=2: y=x**2elif x<=5: y=2*x-3else: y=1/xprint(y)程序运行后,输入x的值为4,输出的结果为( C )A. 2 B. 8C. 5 D. 0.25【解析】 当输入x的值为4时,满足条件x<=5,执行语句y=2*x-3=2*4-3=5,输出的结果为5。5. 编写Python程序,实现“奇偶归一”猜想。“奇偶归一”猜想是指一个大于1的正整数x, 如果是奇数,就乘3再加1;如果是偶数,就变为原来的一半。这样经过若干次,最终变回1。具体代码如下,程序运行界面如图所示。第5题图x=int(input("输入一个大于1的正整数:"))print(x, "-", end="")while x!=1: if ① ② print(x, ">>", end="") else: ③ if ④ print(x)else: print(x, ">>", end="")横线上可选语句如下:a.x==1 b.x=x//2 c.x=3*x+1 d.x%2==1横线上依次填入的代码应为( C )A. abcd B. cdbaC. dcba D. dbca【解析】 第一个if条件语句用来判断是奇数还是偶数,并执行对应的算法,①处应填入的代码为x%2==1,②处应填入的代码为x=3*x+1,③处应填入的代码为x=x//2,第二个if条件语句是用来判断数为1时要进行的操作,④处应填入的代码为x==1。6. 下列问题中,不适合用枚举算法解决的是( D )A. 输出1000以内的素数B. 在一串钥匙中寻找能打开指定锁的钥匙C. 列出用10元和50元凑成240元的所有组合方式D. 已知小球做自由落体运动,求小球在3秒内下落的距离【解析】 A选项,需要对1000以内的每个数进行判断;B选项,需要对每把钥匙依次进行试验;C选项,设10元取a张,50元取b张,a取0和24之间的整数,b取0和4之间的整数,将a、b取值的所有可能组合逐一代入表达式10*a+50*b==240,判断是否成立,若成立,则组合方式符合要求,上述选项都符合枚举算法的思想;D选项,利用自由落体公式求下落的距离,属于解析算法思想。7. 用枚举算法求解“找出所有满足‘各位上的数字之和等于6’条件的四位数”时,下列所列举的数值范围内,算法执行效率最高的是( D )A. 从0到9999 B. 从1000到9999C. 从1000到6000 D. 从1005到6000【解析】 影响枚举算法效率的重要因素是枚举的次数,满足“各位上的数字之和等于6”条件的最小四位数是1005,最大四位数是6000。此范围内包含所有满足条件的解,且需要列举的数字最少,故在所有选项中算法的执行效率最高。8. 面额为1元、2元和5元的纸币各有10张,求总额恰好为32元的取法的算法如下:设1元取a张,2元取b张,5元取c张。a,b,c都取0和10之间的整数,将a,b,c取值的所有可能组合逐一代入表达式a+2*b+5*c==32, 判断是否成立,若成立,则输出这种取法。此算法属于( D )A. 排序算法 B. 对分查找C. 解析算法 D. 枚举算法【解析】 题中将a,b,c取值的所有可能组合逐一代入表达式,判断是否成立,若成立,则输出这种取法,这属于枚举算法。9. 某Python程序如下:import randoma=[5]*5i=1while i<=4: a[i]=a[i-1]-random.randint(0,1) random.randint(a,b)随机生成一个[a,b]范围内的整数 i+=1print(a)程序运行后,输出的结果可能是( B )A. [1,2,3,4,5]B. [5,5,4,3,2]C. [4,3,2,0,-1]D. [5,3,1,1,1]【解析】 本题主要考查Python程序的执行与调试。random.randint(a,b)随机生成一个[a,b]范围内的整数,random.randint(0,1)随机生成0或者1。由代码“a[i]=a[i-1]-random.randint(0,1)”可知,前面的元素值比后面的元素值大0或1,由选项可知,输出的结果可能是[5,5,4,3,2]。10. 元旦义卖:总共带60件商品,有钥匙扣、漫画书两种商品,钥匙扣2元一个,漫画书4元一本。若要卖出200元,需如何搭配 下列Python程序用于输出所有可能的组合:s=0 #统计所有可能的组合数量for b in range(1, 50) : a= if 2*a+4*b==200: s=s+1 print(f"组合{s}: 钥匙扣{a}个,漫画书{b}本")横线上应填入的代码是( A )A. 60-b B. 200-bC. (200-4*a) /2 D. (200-4*b) /2【解析】 由题意可知共带60件商品,a和b分别表示钥匙扣和漫画书的数量,因为枚举条件表达式为2*a+4*b=200,故a=60-b。反过来看,若为a赋值为(200-4*b) /2,则枚举条件表达式要改成a+b=60。11. 将5万元存入银行,如果首次存款时的年利率是3.25%,到期后自动转存时年利率分别是3%,3%,2%,1.75%,那么5年后存款总额是多少 现编写Python程序,请在横线上填入合适的代码:① rate=[0.0325,0.03,0.03,0.02,0.0175] ,② money=round(money*(1+i)) 。money=50000 ① for i in rate: ② print("5年后存款总额:",money,"元")input("运行完毕,请按回车键退出……")【解析】 本题主要考查Python的应用。首次存款时的年利率是3.25%,到期后自动转存时的利率分别是3%,3%,2%,1.75%,由代码“for i in rate:”可知,初始要将年利率存放在rate中,故第一空答案应为rate=[0.0325,0.03,0.03,0.02,0.0175];循环体中要计算每年到期后的金额是多少,故第二空答案应为money=round(money*(1+i))。12. 素数是指在大于1的自然数中,除了1和该整数本身外,不能被其他自然数整除的数。例如11,它只能被1和11整除,所以11是素数。回文数指正着读和反着读都一样的数,例如12321,它正着读、反着读都一样,是回文数。编写Python程序,实现如下功能:找出100~n内的所有回文素数(n为大于或等于100的正整数)。(1)如果n=1000,在本题的程序末尾添加print(151 in L),输出的结果是 True 。(2)请在横线上填入合适的代码:① n%i==0 ,② n>0或n!=0 ,③ rev(i)==i 。import mathdef prime(n): #判断n是否为素数i=2k=int(math.sqrt(n))while i<=k: if ① : break i=i+1return i>kdef rev(n):#倒转数字t=0while ② : t=t*10+n%10 n=n//10return tn=int(input( 请输入整数n: ))L=[]for i in range(100,n+1):if ③ : if prime(i)==True: L=L+[i]print ( 100~n内的回文素数: ,L)【解析】 本题主要考查Python的综合应用。(1)151是素数,同时也是回文数,故输出的结果是True。(2)若能被其他自然数整除,则表明不是素数,跳出循环,故第一空的答案应为n%i==0;将n的每一位进行倒转,直到每一位都倒转完,故第二空的答案为n>0或n!=0;第三空的答案是判断是否为回文数,即倒转后的数跟原来的数相等,故应为rev(i)==i。13. 编写程序,实现下列功能:输入一个二进制数,将二进制数转换为十进制数,并输出结果。程序运行效果如图所示。第13题图用Python语言编写的程序如下,请回答下列问题。 x=input("请输入二进制数:") ① s=0 for i in range(n): ② print("二进制数:",x,"转换为十进制数为:",s)(1)当输入二进制数为111011,则程序输出的十进制数为 59 。(2)请写出程序中横线上应填入的代码。①处应填入的代码为 n=len(x) ;②处应填入的代码为 s=s+int(x[i])*pow(2,n-i-1)或s=s+int(x[i])*2**(n-i-1) 。【解析】 本题主要考查Python循环语句。(1)根据二进制转十进制的方法计算可得,111011B=59D,因此答案为59。(2)根据语句range(n)可知,n为字符串的长度,因此①处代码为n=len(x);将二进制转换为十进制数的方法为用二进制位上的数字乘2y,y为该数从右往左的位置号减1,也可从左往右计算,最高位为2的(二进制长度-1)次方,以此类推,从左往右第i位为2n-i-1,因此②处代码为s=s+int(x[i])*pow(2,n-i-1),也可以写为s=s+int(x[i])*2**(n-i-1)。14. 某邮箱的密码信息如下:①密码是六位数,前两位为81。②最后两位数字相同。③能被16和86整除。编写Python程序找出可能的密码,具体代码如下:for i in range(0, 10000, ① ): s=810000+i if s%86=0: a= ② b=s//10%10 if a==b: print(s)请回答下列问题:(1)解决此问题的算法是 枚举算法 (填“枚举算法”或“解析算法”)。(2)请在横线上填入合适的代码:① 16 ,② s%10 或 i%10 。【解析】 (1)此题中列出所有可能的情况,并验证是否正确,符合枚举算法的基本思想。(2)根据range函数的语法结构,程序中①处只能填写range函数的步长(step),题干中说明密码能被16和86整除,但代码中只判断了s是否能被86整除,说明要通过控制i的值确保s能被16整除,又因为810000恰好能被16整除,故步长是16;易知变量a和b分别存储个位上的数字和十位上的数字,故a=s%10或a=i%10。15. 人民币是中华人民共和国的法定货币,单位是元。现将一张100元钞票换成面额为20元、10元、5元、1元的等值钞票,要求每次换成30张钞票,且每种至少有1张,找出所有的换法并统计换法种数。现编写如下Python程序实现该问题的求解,请在横线上填入合适的代码:① c in range(1,14) ,② d=30-a-b-c ,③ i+=1 。i=0for a in range(1, 5) : for b in range(1, 8) : for ① : ② if 20*a+10*b+5*c+d==100: ③ print(“20元、10元、5元和1元的张数分别为:”,a, b, c, d)print(“共有”+str(i) +“种换法”)【解析】 由于4种面额的钞票每种至少有一张,所以可换成20元的张数范围是1到4,可换成10元的张数范围是1到7,可换成5元的张数范围是1到13,则30减去前三者的张数后剩下的即为1元的张数。如此嵌套循环,当符合条件时输出结果并统计换法种数。16. “百钱买百鸡”是中国古代数学家张丘建在《算经》一书中提出的一个著名数学问题:“今有鸡翁,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何 ”假设每一种鸡的数量都不少于1只,则可以写出如下程序:n= ① for Jiweng in range(1,21): for Jimu in range(1,34): Jichu= ② if (Jiweng*5+Jimu*3+Jichu/3==100): print("鸡翁:%d 鸡母:%d 鸡雏:%d"%(Jiweng,Jimu,Jichu)) n=n+1print(n)请在横线上填入合适的代码:① 0 ,② 100-Jiweng-Jimu 。【解析】 本题主要考查Python程序设计。变量n用于统计有多少种可能,初始值为0,故①处填0。一共100只鸡,即鸡翁、鸡母和鸡雏共100只,②处表示Jichu的数量,故为100-Jiweng-Jimu。17. 角谷猜想。任意一个大于1的正整数n,重新进行下列运算:◆ 若n为奇数,n的值替换为 3 * n + 1◆ 若n为偶数,n的值替换为 n // 2经过若干次上述变换,正整数n的最终值一定会是1。请你编写Python程序代码,检测上面的角谷猜想是否可行。n=int(input("请输入n的值:"))step=0while n!=1: step=step+1 if n%2==0: print( 第 , step, 步: ,n, //2= , n//2) n= ① else: print( 第 , step, 步: 3* , n, +1= , 3*n + 1) n= ② (1)请在横线上填入合适的代码:① n//2 ,② 3*n+1 。(2)代码分析:若输入n的值是5,则程序结束后变量step的值是 5 。【解析】 程序运行步骤如下:第 1 步: 3* 5 +1= 16第 2 步: 16 //2= 8第 3 步: 8 //2= 4第 4 步: 4 //2= 2第 5 步: 2 //2= 118. 完全数又称完美数或完备数,是一类特殊的自然数。它的所有真因子(即一个数除去它自身以外的约数)的和(即因子函数),恰好等于它本身。Python程序代码如下,找出1000以内的所有完全数。请在横线上填入合适的代码:① 2, m//2+1 ,② m%i==0 。def perfect(m): if m <=1: return False sum=1 for i in range( ① ): if ② : sum+=i return m==sumlist1=[]for i in range(1, 1001): if perfect(i): list1.append(i)print(list1)【解析】 本题采用枚举算法,由于1是所有数的因子,所以我们只枚举除1和m之外的所有因子,①答案为:2,m-1。但从算法效率思考:由于最小因子是2,最大因子是m//2,所以最佳答案为2,m//2+1,这样处理算法的效率将提升一倍。②处需要判断i是否为m的约数,应填写的代码是 m%i==0。19. 小张收集了章回体小说《三国演义》第1回至第120回的120个文件,文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写Python程序,对书中人物同时出现的情况进行简单分析,将人物及其别名(如“孟德”是“曹操”的别名)当作同一个人进行处理。运行程序,用户输入“曹操|孟德 刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操、刘备在第11回至第28回同时出现。第19题图请回答下列问题:(1)观察上图,可知曹操与刘备在第36回中 A (单选,填字母)出现。A. 同时 B. 不同时主程序如下: 输入姓名、别名,姓名存入列表 names,如 names=["曹操","刘备"]统计各回中,列表 names 中每个人物(含别名)出现的次数,将结果存入字典 total,如 total={"曹操":[2,5,7,...], "刘备": [50,47,0,...]},表示曹操在第1,2,3,...回分别出现了2,5,7,...次代码略 num, result=calculate(total)mlen=getMaxLen(result)print("人物同时出现的回数为:", num, ",回依次为:")print(result)print("人物同时出现的最大连续回数是:",mlen)(2)定义函数calculate(total),功能是统计列表names中人物同时出现的回数,以及同时出现的回,结果示例如上图所示,请在横线上填入合适的代码: num+=1 或num=num+1 。def calculate(total): num, length=0,0 num保存120回中人物同时出现的回数 result=[] result[i][0]、result[i][1]分别存储第i+1段回的起、止回号 k=-1 for i in range(0, 120): if allIn(total, i): if length==0: begin=i+1 result.append([begin, begin]) # 在列表 result 末尾添加一个元素 k+=1 length+=1 result[k][1]=i+1 else: length=0 return num, result(3)定义函数 getMaxLen(result),功能是统计最大连续回数,请在横线上填入合适的代码: mlen 。def getMaxLen(result): mlen=0 for item in result: t=item[1]-item[0]+1 if t > : mlen=t return mlen(4)定义函数allIn(total, cno),功能是判断列表names中人物是否同时出现在第cno+1回中,若同时出现,返回True,请在横线上填入合适的代码: total[item][cno]==0 。def allIn(total, cno): for item in names: if : return False return True【解析】 本题考查Python语言基础及字符串处理的综合知识。(1)观察图可知,第36回出现在[31,45]中,表明曹操与刘备这两个人物在第36回同时出现。(2)由于num保存120回中人物同时出现的回数,其初始值为0,因此若检查到符合条件时,即调用函数allIn(total, cno)且其值为True时,计数器num加1,因此其表达式为num+=1。(3)此处统计最大连续回数,变量mlen即为返回值。在循环中,将连续回数t与最大值mlen进行比较,若有比最大值mlen更大的值t,则将t赋值给mlen,故答案是mlen。(4)由于 total={"曹操":[2,5,7,...],"刘备":[50,47,0,...]},表示曹操在第1,2,3,...回分别出现了2,5,7,...次。根据这个信息可知total是一个字典,item是某人物名,cno是某回号的值,因此若total[item][cno]==0,则表明人物item在回号cno中出现的次数为0,故函数返回值为False,反之则返回True。(共34张PPT)第八节 简单算法及其程序实现信息技术 必修1 数据与计算算法的程序实现第三章必备知识练1. 某厂共有y件产品被抽检,其中,合格品数量为x, 编写Python程序来计算该批次产品的合格率p,并保留两位小数。具体代码如下:y=int(input("共有产品:"))x=int(input("合格品数量为:"))p= print("合格率为:",p)横线上应填入的代码为( )A. int(100*x/y+0.5)/100B. round(x/y)C. x/yD. int(10*x/y+0.5)/10【解析】 合格率=合格品数量/总数,对p按四舍五入法保留两位小数,round(x/y)按四舍五入法保留整数,x/y取整数部分,int(10*x/y+0.5)/10按四舍五入法保留1位小数。A2. 若一个三位数等于其各位上数字的立方和,则称这个数为“水仙花数”。例如:371=33+73+13,371就是一个“水仙花数”。利用如下Python程序可实现判定输入的一个三位数是否为“水仙花数”:number=int(input("请输入一个三位数:"))x=number//100y= ① z=number%10if ② : print(number, "是 水仙花数 ")else: print(number,"不是 水仙花数 ")横线上应填入的代码为( )A. ①number%100 ②x**3+y**3+z**3==numberB. ①number%100//10 ②x**3+y**3+z**3==numberC. ①number/10%10 ②x**3+y**3+z**3==numberD. ①number/10 ②x**3+y**3+z**3===numberB【解析】 ①根据程序可知,y是取所输入三位数的十位上的数字,应填入代码为number%100//10或number//10%10;②根据“水仙花数”的定义,应填入的代码为x**3+y**3+z**3=number。3. 某Python程序如下:a=[2, 4, 5, 7, 1]m=0s=0for i in range(5) : if a[i]>m: m=a[i]+1 else: m=a[i]-1 s=s+mprint(s)程序运行后,输出的结果是( )A. 20 B. 21C. 22 D. 23【解析】 第一次循环:2>0,m=3;第二次循环:4>3,m=5;第三次循环:5=5,m=4;第四次循环:7>4,m=8;第五次循环:1<8,m=0;所以s=3+5+4+8+0=20。A4. 某Python程序如下:x=int(input("输入x:"))if x<=2: y=x**2elif x<=5: y=2*x-3else: y=1/xprint(y)程序运行后,输入x的值为4,输出的结果为( )A. 2 B. 8C. 5 D. 0.25【解析】 当输入x的值为4时,满足条件x<=5,执行语句y=2*x-3=2*4-3=5,输出的结果为5。C5. 编写Python程序,实现“奇偶归一”猜想。“奇偶归一”猜想是指一个大于1的正整数x, 如果是奇数,就乘3再加1;如果是偶数,就变为原来的一半。这样经过若干次,最终变回1。具体代码如下,程序运行界面如图所示。输入一个大于1的正整数:55-16>>8>>4>>2>>1x=int(input("输入一个大于1的正整数:"))print(x, "-", end="")while x!=1: if ① ② print(x, ">>", end="") else: ③ if ④ print(x)else: print(x, ">>", end="")横线上可选语句如下:a.x==1 b.x=x//2 c.x=3*x+1 d.x%2==1横线上依次填入的代码应为( )A. abcd B. cdbaC. dcba D. dbca【解析】 第一个if条件语句用来判断是奇数还是偶数,并执行对应的算法,①处应填入的代码为x%2==1,②处应填入的代码为x=3*x+1,③处应填入的代码为x=x//2,第二个if条件语句是用来判断数为1时要进行的操作,④处应填入的代码为x==1。C6. 下列问题中,不.适.合.用枚举算法解决的是( )A. 输出1000以内的素数B. 在一串钥匙中寻找能打开指定锁的钥匙C. 列出用10元和50元凑成240元的所有组合方式D. 已知小球做自由落体运动,求小球在3秒内下落的距离【解析】 A选项,需要对1000以内的每个数进行判断;B选项,需要对每把钥匙依次进行试验;C选项,设10元取a张,50元取b张,a取0和24之间的整数,b取0和4之间的整数,将a、b取值的所有可能组合逐一代入表达式10*a+50*b==240,判断是否成立,若成立,则组合方式符合要求,上述选项都符合枚举算法的思想;D选项,利用自由落体公式求下落的距离,属于解析算法思想。D7. 用枚举算法求解“找出所有满足‘各位上的数字之和等于6’条件的四位数”时,下列所列举的数值范围内,算法执行效率最高的是( )A. 从0到9999 B. 从1000到9999C. 从1000到6000 D. 从1005到6000【解析】 影响枚举算法效率的重要因素是枚举的次数,满足“各位上的数字之和等于6”条件的最小四位数是1005,最大四位数是6000。此范围内包含所有满足条件的解,且需要列举的数字最少,故在所有选项中算法的执行效率最高。D8. 面额为1元、2元和5元的纸币各有10张,求总额恰好为32元的取法的算法如下:设1元取a张,2元取b张,5元取c张。a,b,c都取0和10之间的整数,将a,b,c取值的所有可能组合逐一代入表达式a+2*b+5*c==32, 判断是否成立,若成立,则输出这种取法。此算法属于( )A. 排序算法 B. 对分查找C. 解析算法 D. 枚举算法【解析】 题中将a,b,c取值的所有可能组合逐一代入表达式,判断是否成立,若成立,则输出这种取法,这属于枚举算法。D9. 某Python程序如下:import randoma=[5]*5i=1while i<=4: a[i]=a[i-1]-random.randint(0,1) random.randint(a,b)随机生成一个[a,b]范围内的整数 i+=1print(a)程序运行后,输出的结果可能是( )A. [1,2,3,4,5] B. [5,5,4,3,2]C. [4,3,2,0,-1] D. [5,3,1,1,1]【解析】 本题主要考查Python程序的执行与调试。random.randint(a,b)随机生成一个[a,b]范围内的整数,random.randint(0,1)随机生成0或者1。由代码“a[i]=a[i-1]-random.randint(0,1)”可知,前面的元素值比后面的元素值大0或1,由选项可知,输出的结果可能是[5,5,4,3,2]。B10. 元旦义卖:总共带60件商品,有钥匙扣、漫画书两种商品,钥匙扣2元一个,漫画书4元一本。若要卖出200元,需如何搭配 下列Python程序用于输出所有可能的组合:s=0 #统计所有可能的组合数量for b in range(1, 50) : a= if 2*a+4*b==200: s=s+1 print(f"组合{s}: 钥匙扣{a}个,漫画书{b}本")横线上应填入的代码是( )A. 60-b B. 200-bC. (200-4*a) /2 D. (200-4*b) /2【解析】 由题意可知共带60件商品,a和b分别表示钥匙扣和漫画书的数量,因为枚举条件表达式为2*a+4*b=200,故a=60-b。反过来看,若为a赋值为(200-4*b) /2,则枚举条件表达式要改成a+b=60。A关键能力练11. 将5万元存入银行,如果首次存款时的年利率是3.25%,到期后自动转存时年利率分别是3%,3%,2%,1.75%,那么5年后存款总额是多少 现编写Python程序,请在横线上填入合适的代码:①___________________________________________,②__________________________________。 money=50000 ① for i in rate: ② print("5年后存款总额:",money,"元")input("运行完毕,请按回车键退出……")【解析】 本题主要考查Python的应用。首次存款时的年利率是3.25%,到期后自动转存时的利率分别是3%,3%,2%,1.75%,由代码“for i in rate:”可知,初始要将年利率存放在rate中,故第一空答案应为rate=[0.0325,0.03,0.03,0.02,0.0175];循环体中要计算每年到期后的金额是多少,故第二空答案应为money=round(money*(1+i))。rate=[0.0325,0.03,0.03,0.02,0.0175]money=round(money*(1+i))12. 素数是指在大于1的自然数中,除了1和该整数本身外,不能被其他自然数整除的数。例如11,它只能被1和11整除,所以11是素数。回文数指正着读和反着读都一样的数,例如12321,它正着读、反着读都一样,是回文数。编写Python程序,实现如下功能:找出100~n内的所有回文素数(n为大于或等于100的正整数)。(1)如果n=1000,在本题的程序末尾添加print(151 in L),输出的结果是__________。 True(2)请在横线上填入合适的代码:①___________,②______________,③_____________。 import mathdef prime(n): #判断n是否为素数i=2k=int(math.sqrt(n))while i<=k: if ① : break i=i+1return i>kdef rev(n):#倒转数字t=0while ② : t=t*10+n%10 n=n//10return tn=int(input( 请输入整数n: ))L=[]for i in range(100,n+1):if ③ : if prime(i)==True: L=L+[i]print ( 100~n内的回文素数: ,L)n%i==0n>0或n!=0rev(i)==i【解析】 本题主要考查Python的综合应用。(1)151是素数,同时也是回文数,故输出的结果是True。(2)若能被其他自然数整除,则表明不是素数,跳出循环,故第一空的答案应为n%i==0;将n的每一位进行倒转,直到每一位都倒转完,故第二空的答案为n>0或n!=0;第三空的答案是判断是否为回文数,即倒转后的数跟原来的数相等,故应为rev(i)==i。13. 编写程序,实现下列功能:输入一个二进制数,将二进制数转换为十进制数,并输出结果。程序运行效果如图所示。输入二进制数:110111二进制数110111转换为十进制数为55 x=input("请输入二进制数:") ① s=0 for i in range(n): ② print("二进制数:",x,"转换为十进制数为:",s)(1)当输入二进制数为111011,则程序输出的十进制数为__________。 (2)请写出程序中横线上应填入的代码。①处应填入的代码为__________; ②处应填入的代码为________________________________________________________。 【解析】 本题主要考查Python循环语句。(1)根据二进制转十进制的方法计算可得, 111011B=59D,因此答案为59。(2)根据语句range(n)可知,n为字符串的长度,因此①处代码为n=len(x);将二进制转换为十进制数的方法为用二进制位上的数字乘2y,y为该数从右往左的位置号减1,也可从左往右计算,最高位为2的(二进制长度-1)次方,以此类推,从左往右第i位为2n-i-1,因此②处代码为s=s+int(x[i])*pow(2,n-i-1),也可以写为s=s+int(x[i])*2**(n-i-1)。59n=len(x)s=s+int(x[i])*pow(2,n-i-1)或s=s+int(x[i])*2**(n-i-1)14. 某邮箱的密码信息如下:①密码是六位数,前两位为81。②最后两位数字相同。③能被16和86整除。编写Python程序找出可能的密码,具体代码如下:for i in range(0, 10000, ① ): s=810000+i if s%86=0: a= ② b=s//10%10 if a==b: print(s)请回答下列问题:(1)解决此问题的算法是__________(填“枚举算法”或“解析算法”)。 (2)请在横线上填入合适的代码:①__________,②______________。 【解析】 (1)此题中列出所有可能的情况,并验证是否正确,符合枚举算法的基本思想。 (2)根据range函数的语法结构,程序中①处只能填写range函数的步长(step),题干中说明密码能被16和86整除,但代码中只判断了s是否能被86整除,说明要通过控制i的值确保s能被16整除,又因为810000恰好能被16整除,故步长是16;易知变量a和b分别存储个位上的数字和十位上的数字,故a=s%10或a=i%10。枚举算法16s%10 或 i%1015. 人民币是中华人民共和国的法定货币,单位是元。现将一张100元钞票换成面额为20元、10元、5元、1元的等值钞票,要求每次换成30张钞票,且每种至少有1张,找出所有的换法并统计换法种数。现编写如下Python程序实现该问题的求解,请在横线上填入合适的代码:①________________,②__________________,③__________。 i=0for a in range(1, 5) : for b in range(1, 8) : for ① : ② if 20*a+10*b+5*c+d==100: ③ print(“20元、10元、5元和1元的张数分别为:”,a, b, c, d)print(“共有”+str(i) +“种换法”)【解析】 由于4种面额的钞票每种至少有一张,所以可换成20元的张数范围是1到4,可换成10元的张数范围是1到7,可换成5元的张数范围是1到13,则30减去前三者的张数后剩下的即为1元的张数。如此嵌套循环,当符合条件时输出结果并统计换法种数。c in range(1,14)d=30-a-b-ci+=116. “百钱买百鸡”是中国古代数学家张丘建在《算经》一书中提出的一个著名数学问题:“今有鸡翁,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何 ”假设每一种鸡的数量都不少于1只,则可以写出如下程序:n= ① for Jiweng in range(1,21): for Jimu in range(1,34): Jichu= ② if (Jiweng*5+Jimu*3+Jichu/3==100): print("鸡翁:%d 鸡母:%d 鸡雏:%d"%(Jiweng,Jimu,Jichu)) n=n+1print(n)请在横线上填入合适的代码:①__________,②__________________________。 【解析】 本题主要考查Python程序设计。变量n用于统计有多少种可能,初始值为0,故①处填0。一共100只鸡,即鸡翁、鸡母和鸡雏共100只,②处表示Jichu的数量,故为100-Jiweng-Jimu。0100-Jiweng-Jimu17. 角谷猜想。任意一个大于1的正整数n,重新进行下列运算:◆ 若n为奇数,n的值替换为 3 * n + 1◆ 若n为偶数,n的值替换为 n // 2经过若干次上述变换,正整数n的最终值一定会是1。请你编写Python程序代码,检测上面的角谷猜想是否可行。n=int(input("请输入n的值:"))step=0while n!=1: step=step+1 if n%2==0: print( 第 , step, 步: ,n, //2= , n//2) n= ① else: print( 第 , step, 步: 3* , n, +1= , 3*n + 1) n= ② (1)请在横线上填入合适的代码:①__________,②__________。 (2)代码分析:若输入n的值是5,则程序结束后变量step的值是__________。 n//23*n+15【解析】 程序运行步骤如下:第 1 步: 3* 5 +1= 16第 2 步: 16 //2= 8第 3 步: 8 //2= 4第 4 步: 4 //2= 2第 5 步: 2 //2= 118. 完全数又称完美数或完备数,是一类特殊的自然数。它的所有真因子(即一个数除去它自身以外的约数)的和(即因子函数),恰好等于它本身。Python程序代码如下,找出1000以内的所有完全数。请在横线上填入合适的代码:①______________,②____________。 def perf____ect(m): if m <=1: return False sum=1 for i in range( ① ): if ② : sum+=i return m==sumlist1=[]for i in range(1, 1001): if perfect(i): list1.append(i)print(list1)2, m//2+1m%i==0【解析】 本题采用枚举算法,由于1是所有数的因子,所以我们只枚举除1和m之外的所有因子,①答案为:2,m-1。但从算法效率思考:由于最小因子是2,最大因子是m//2,所以最佳答案为2,m//2+1,这样处理算法的效率将提升一倍。②处需要判断i是否为m的约数,应填写的代码是 m%i==0。19. 小张收集了章回体小说《三国演义》第1回至第120回的120个文件,文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写 Python 程序,对书中人物同时出现的情况进行简单分析,将人物及其别名(如“孟德”是“曹操”的别名)当作同一个人进行处理。运行程序,用户输入“曹操|孟德 刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操、刘备在第11回至第 28回同时出现。人物同时出现的回数为:72,回依次为:[[1,2],[5,6],[11,28],[31,45],[47,52],[54,58],[60,74],[77,82],[106,106],[119,120]]人物同时出现的最大连续回数是:18请回答下列问题:(1)观察上图,可知曹操与刘备在第36回中__________(单选,填字母)出现。 A. 同时 B. 不同时主程序如下: 输入姓名、别名,姓名存入列表 names,如 names=["曹操","刘备"]统计各回中,列表 names 中每个人物(含别名)出现的次数,将结果存入字典 total,如 total={"曹操":[2,5,7,...], "刘备": [50,47,0,...]},表示曹操在第 1,2,3,...回分别出现了 2,5,7,...次代码略 num, result=calculate(total)mlen=getMaxLen(result)print("人物同时出现的回数为:", num, ",回依次为:")print(result)print("人物同时出现的最大连续回数是:",mlen)A(2)定义函数 calculate(total),功能是统计列表 names 中人物同时出现的回数,以及同时出现的回,结果示例如上图所示,请在横线上填入合适的代码:_____________________________。 def calculate(total): num, length=0,0 num保存120回中人物同时出现的回数 result=[] result[i][0]、result[i][1]分别存储第i+1段回的起、止回号 k=-1 for i in range(0, 120): if allIn(total, i): if length==0: begin=i+1 result.append([begin, begin]) # 在列表 result 末尾添加一个元素 k+=1 length+=1 result[k][1]=i+1 else: length=0 return num, resultnum+=1 或num=num+1(3)定义函数 getMaxLen(result),功能是统计最大连续回数,请在横线上填入合适的代码:__________。 def getMaxLen(result): mlen=0 for item in result: t=item[1]-item[0]+1 if t > : mlen=t return mlenmlen(4)定义函数allIn(total, cno),功能是判断列表names中人物是否同时出现在第cno+1回中,若同时出现,返回True,请在横线上填入合适的代码:_______________________。 def allIn(total, cno): for item in names: if : return False return Truetotal[item][cno]==0【解析】 本题考查Python语言基础及字符串处理的综合知识。(1)观察图可知,第36回出现在[31,45]中,表明曹操与刘备这两个人物在第36回同时出现。(2)由于num保存120回中人物同时出现的回数,其初始值为0,因此若检查到符合条件时,即调用函数allIn(total, cno)且其值为True时,计数器num加1,因此其表达式为num+=1。 (3)此处统计最大连续回数,变量mlen即为返回值。在循环中,将连续回数t与最大值mlen进行比较,若有比最大值mlen更大的值t,则将t赋值给mlen,故答案是mlen。(4)由于 total={"曹操":[2,5,7,...], "刘备": [50,47,0,...]},表示曹操在第 1,2,3,...回分别出现了 2,5,7,...次。根据这个信息可知total是一个字典,item是某人物名,cno是某回号的值,因此若total[item][cno]==0,则表明人物item在回号cno中出现的次数为0,故函数返回值为False,反之则返回True。 展开更多...... 收起↑ 资源列表 第八节 简单算法及其程序实现.docx 第八节 简单算法及其程序实现.pptx