资源简介 课时6 While循环语句及程序实现课时目标1.掌握while循环语句的语法格式,理解while循环的功能。2.熟练使用while循环语句解决实际问题。1.while循环的功能While循环在执行时,首先会判断条件是否为真,如果条件为真,执行一次循环体,再次判断条件是否为真,如果仍为真,那么再执行一次循环体,以此类推,直到条件为假时退出while语句。2.while循环语句格式while<条件>:<循环体>3.while循环适用场合(1)循环次数未知,但循环结束的条件已知。(2)循环条件有两个或两个以上。①在while循环前应对变量赋初值。②循环变量的变化要在循环体内通过赋值语句来实现。例1 输入一个正整数,输出所有的质因子。如24=2*2*2*3。实现上述功能的Python代码如下:n=int(input("输入一个正整数:"))i=2while ① : if n %i==0: n=n/i print(i) else: ② (1)在程序划线处填入合适的代码。(2)按照上述算法,输入60,依次输出的质因子是 。 答案 (1)①n>1或n!=1 ②i+=1 (2)2 2 3 5解析 最小的质因数是2,如果能被2整除,则反复相除,当不能被2整除时,将i增加1,尝试被3整除,如果还不能除通,往上增加到4,由于前面反复除2操作,因此不可能被不是质数的数除通。当相除的结果为1时,终止循环。输入60,可以被2除2次,被3除1次,被5除1次。变式训练1 工作人员手中有人民币100、50、20、10和1元5个币种,输入一个金额,按最大票面优先兑换的原则,输出相应的人民币及张数。实现上述功能的Python代码如下:je=int(input("请输入金额!"))rmb=[100,50,20,10,1]i,t=0,0while je>0: if① : t=je∥rmb[i] ② print("兑换"+str(rmb[i])+"元"+str(t)+"张") else: i+=1(1)在程序划线处填入合适的代码。(2)按照上述算法,输入356,依次输出人民币100、50、20、10和1元5个币种的总的数量是 。 答案 (1)①je>=rmb[i] ②je=je-rmb[i]*t (2)10解析 当所剩金额大于或等于当前币种时,计算可以兑换的张数t,接着减去当前币种的金额,如果金额小于当前金额时,找到下一种较小的金额进行尝试,直到全部兑换完毕。输入356元,可以换3张100元,1张50元和6张1元。例2 十进制数转换成二进制数:十进制可以用按权展开相加的表达式来表示,如13D=1×23+1×22+0×21+1×20。若十进制数大于k位上的权值,则k位上数为1,否则为0。设计的Python程序如下所示:n=int(input("输入一个十进制数"))ss=""k=0while 2**k k+=1whilen>0 and k>0: t=2**(k-1) if n>=t: ss=ss+"1" ① else: ss=ss+"0" ② print(ss)(1)加框处代码有误,请修正这个错误。(2)请在程序划线处填入合适的代码。答案 (1)n>0 or k>0 (2)①n=n-t ②k-=1解析 变量k表示转换成二进制的长度,每次需减去k位上的权值t,若n大于等于t,表示该位上数为1,完成该位转换,同时需减去该位上的可能权值。若n已经为零,但k并没有达到最低位0,例如12D,减去8减去4后,得到0,但只输出2个1,此时k=2,还需输出2个0。变式训练2 下列程序的功能是:计算表达式1×3+2×3+3×3+…100×3的值,并输出计算结果。s=0i=1while i<=100: i+=1print(s)(1)刚退出循环时,变量i的值是 。 (2)为了实现上述表达式的计算,程序中划线处的语句为 。 答案 (1)101 (2)s=s+i*3或s+=i*3解析 本题主要考查的是while循环的程序实现。(1)循环变量i的初值为1,步长为1,循环条件为i<=100,即当i=101时,循环结束。(2)根据表达式可知,划线处语句的功能是将i*3的值进行累加,从print(s)语句可知,累加和存放在变量s中,因此划线处的语句为s=s+i*3,也可以写为s+=i*3。例3 判断一个字符串是否为回文串。如果一个字符串,从左到右读和从右到左读是完全一样的,那么这个字符串称为回文串。下面程序的功能是:输入一个字符串,检测是否为回文串。s=input("输入一个字符串")i=0j=len(s)-1flag=Truewhile① : if s[i]==s[j]: i+=1 j-=1 else: ② print(flag)(1)请在程序划线处填入合适的代码。(2)上述程序的功能与语句print(s==s[::-1])功能 (填:是/否)一致。 答案 (1)①i解析 本题考查的是多条件循环。变量i和j分别表示首尾两个位置,对首尾的字符依次比较,如果相等,分别后移和前移,如果不相等,表示不是回文,循环结束。s[::-1]表示将字符串s首尾互换,若两者相等,表示是回文字符。变式训练3 用下列公式计算的π近似值,直到最后一项的绝对值小于10-8为止。提示:≈1-+-+-…实现上述功能的程序如下,请在程序划线处填入合适的代码。n=t=1s=0flag=1while① : s=s+t flag=-flag n=n+2 ② print("π=%f"%(4*s),"t=",t,"n=",n)运行结果:π=3.141593 t=9.9999999e-09 n=100000001答案 ①abs(t)>=1e-8 ②t=flag*1.0/n或t=flag*1/n解析 本题主要考查的是while循环的灵活应用。条件是最后一项的绝对值小于10-8,需要使用绝对值函数abs,10-8用科学计数法来表示为1e-8,因此①处代码为abs(t)>=1e-8;用flag变量来表示正负符号,每一项的值为实数,用1.0/n来表示,因此②处代码为t=flag*1.0/n。例4 有如下Python程序段:s=input("输入字符串:")n=len(s)i,j=0,n-1result=""while i=n∥2: if s[i]>s[j]: result+=s[i]; j-=1 elif s[i] result+=s[j]; i+=1 else: i+=1;j-=1print(result)执行该程序段,分别输入下列选项中的字符串,输出结果不为“555”的是 ( ) A."51234" B."12535" C."54321" D."55123"答案 B解析 本题考查字符串的操作。该程序段的作用是将字符串 s 中左半部分与右半部分按照从大到小的顺序交替排列,生成一个新的字符串 result。输入 s 字符串为 12535 时,输出结果为 55。 1.有如下Python程序段:n=int(input("请输入一个正整数:"))s=0;i=1while i if n%i==0: s=s+i i=i+1print(s)运行程序,输入18输出s的值是 ( )A.5 B.21 C.39 D.6答案 B解析 本题考查循环结构。把n的因子进行相加。2.有如下Python程序段:m=int(input("输入一个数字串"))s=""flag=Truewhile m>0: r=m%10 m=m∥10 if flag and r%2!=0: s=str(r)+s flag=not flagprint(flag,s)若输入的值为“5201314”,执行该程序段后,输出的结果是 ( )A.False 1 B.True 1 C.False 2 D.True 4答案 A解析 本题考查循环控制结构和逻辑变量运用。语句r=m%10取出m的个位数,语句m=m∥10去除m的个位数,因此该循环是从后向前取出数字串的各个数字,当条件flag and r%2!=0成立时,把r变成字符并联接入s中,语句flag=not flag的作用是把flag的值变为False,该程序的功能是找到第一个奇数。3.有如下Python程序段:s="CixiStudent"f=[0]*26;t=s[4:];i=0while i if 'A'<=t[i]<="Z": i+=1 continue elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0: f[ord(t[i])-ord('a')]=1 i+=1for i in range(26): if f[i]==1: print(chr(i+ord('a')),end='')运行以上程序段后,输出的内容为 ( )A.dentu B.Student C.tuden D.deintux答案 A解析 本题考查循环控制结构。continue语句用来告诉python跳过当前循环,进行下一个循环。列表t中的值为'Student',f列表中有26个元素,可以看成一个桶,当某个字母出现,ord(t[i])-ord('a')对应的索引号的元素值为1,表示该字母出现过。将出现过的字母从小到大输出。4.将一组数保存在列表a中,若a[0]=0,则在列表a中从左到右找到第一个大于零的元素,并与a[0]交换。用Python程序描述,下列选项中不可行的是 ( )A.i=0 while a[i]==0: i+=1 a[0],a[i]=a[i],a[0]B.for i in range(5): if a [i]>0: break a[0],a[i]=a[i],a[0]C.i=0 while True: if a[i]>0: break i+=1 a[0],a[i]=a[i],a[0]D.for i in a: if i>0: break a[0],a[i]=a[i],a[0]答案 D解析 本题考查循环结构。D选项中变量i已经是列表a中的元素,则最后进行交换的并不是a[i],正确的交换语句为:a[0],i=i,a[0]。5.有如下Python程序段:s="akpboyogirlyygirlkp"s1=s+"###";boy=0;girl=0;i=0while i a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3] if a=="b" or b=="o" or c=="y": boy=boy+1 if a=="g" or b=="i" or c=="r" or d=="1": girl=girl+1 i+=1执行该程序段后,变量boy及girl的值分别为 ( )A.1 2 B.4 2 C.4 3 D.6 9答案 B解析 本题考查列表的枚举。连续取出4个字符,若第1、2、3个字符中分别是b、o、y中一个,则boy增加1。如i等于5时,取出"yog",第2个字符是"o";取出"rly"、"lyy",第3个字符是"y"。6.有如下Python程序段:a=[3,4,2,5,6,7,7,1,2]m,c,i=1,1,1while i if a[i]>=a[i-1]: c+=1 m=max (m,c) else: c=1 i+=1print (c,m)则程序执行后,c和m的值分别是 ( )A.1 5 B.1 4 C.2 5 D.2 4答案 C7.有如下Python程序段:count=0;i=1while i<100: if int(i**0.5)==i**0.5: count+=1 i+=1print(count)运行程序后,输出的结果是 ( )A.9 B.0 C.99 D.5答案 A8.对由小写字母组成的长度相同的两个字符串s1和s2进行各字母数量检测,如"abdac"与"aabcd"所含字母数量一致,与"aabcc"所含字母数量不一致。实现该功能的Python部分程序段如下:s1="";s2=""b=[0]*26for i in range (len(s1)) : x=ord(s1[i])-97;b[x]+=1 y=ord(s2[i])-97; (1) j=0while j<26: if (2) : break j+=1if j==26: print("所含字母数量一致")else: print("所含字母数量不一致")上述程序段中划线处可选语句为:①b[y]+=1 ②b[y]-=1 ③b[j]!=0④b[j]==0则(1)(2)处语句依次应为 ( )A.①③ B.②④ C.②③ D.①④答案 C9.有如下Python程序:a = [0] * 10 ; c = 0n = int(input("输入n的值:"))while n > 0: a[n % 10] += 1 if a[n % 10] == 2: c += 1 n ∥= 10print(c)运行该程序后,输出结果为2,则输入n的值可能为 ( )A.135553 B.234125C.202222 D.112233答案 A一、基础巩固1.有如下Python程序段:s1='blgr';s2='bollymgpric'i=0;j=0;s3=''while i<=len(s1)-1 and j<=len(s2)-1: if s1[i]==s2[j]: i+=1 else: s3=s3+s2[j] j+=1print(s3)执行该程序段后,输出的内容为 ( )A.oymp B.olymp C.olympic D.oympic答案 B2.有如下Python程序段:code="0123456789ABCDEF"numstr=input("请输入一个二进制整数:")numlen=len(numstr)s=0;ss=""for i in range(numlen): x=int(numstr[i])*2**(numlen-i-1) s+=xt=swhile t>0: ss=code[t%16]+ss t=t∥16print(ss)运行该程序段,输入1100111,程序结果为 ( )A.110 B.103C.67 D.1100111答案 C3.有如Python下程序段:s1=[12,15,28]s2=[15,28,32]i=0while i<=len(s1)-1: if s1[i] not in s2: print(s1[i]) i=i+1以下说法正确的是 ( )A.该程序输出结果为32B.该程序的算法是解析算法C.该程序输出的结果为[12]D.该程序实现的功能是得到s1中有但s2中没有的元素答案 D4.有下面一段程序:a=[9,5,2,3,0,-9,5,0,7,-10]s,i=0,0while a[i]!=0 and i < len(a): s+=1 i+=1运行该程序后s的值为 ( )A.4 B.5 C.8 D.10答案 A解析 本题考查循环结构while语句,当i位置上的元素值不为0且满足i比列表a长度来的小的时候可以进入循环,此时s,i的值分别+1,不满足任一条件时循环结束,可以看到列表中有元素0,此时i的值为4,因此结束时s的值也是4。5.小明用Python编写了一个找最大值的程序,程序功能是:用户输入数字串,数据间用逗号分隔,最后以逗号结尾,程序执行后输出最大的数值。程序段如下,划线处代码正确的是 ( )s=input("请输入数字串:")i=j=max=0c=t=""while j c=s[j] if c==",": t=s[i:j] if int(t)>max: max=int(t) ① ② print(max)A.①i=i+1 ②j=j+1B.①i=j+1 ②j=j+1C.①j=j+1 ②i=i+1D.①j=i+1 ②i=i+1答案 B解析 本题考查循环结构嵌套分支结构找最值模型,i表示数字的左索引,j表示数字后逗号的索引值,t为逗号前完整的数字,当找到比当前最大值还要大的值时,更新最大值并且更新左边界和右边界的值继续往下找,因此答案为B。6.在一次抽奖活动中,需要在8人中随机抽取3个幸运奖,对应的Python程序如下:import randomxm=["A","B","C","D","E","F","G","H"] #用字母代表人名hj=[""]*3bz=[False]*8i=0while i<=2: n=random.randint(0,7) #产生一个0-7之间的整数n print(hj)程序划线处代码合适的是 ( )A.if bz[n]==False: hj[i]=xm[n] bz[n]=True i+=1B.if bz[n]==True: hj[i]=xm[n] bz[n]=False i+=1C.if bz[i]==False: hj[n]=xm[i] bz[i]=True i+=1D.if bz[i]==True: hj[n]=xm[i] bz[i]=True i+=1答案 A解析 本题考查随机函数的应用。列表bz中有8个元素,其初值均为False,表示该索引号对应的xm元素没有抽到奖。变量i表示第几个幸运观众,变量n表示幸运观众的索引号。7.有如下Python程序段:import randoma=[-1]*5for i in range(len(a)): a[i]=random.randint(1,10) #产生一个[1,10]之间的整数for i in range(2,4): key=a[i] j=i-1 while j>=1 and key a[j+1]=a[j] j-=1 a[j+1]=key执行该程序段后,变量a可能的值为 ( )A.[1,0,3,6,7] B.[3,2,6,7,1]C.[1,3,2,5,7] D.[3,5,6,2,7]答案 B解析 本题考查随机数应用和顺序查找。在循环体中,i的值为2或3,语句key=a[i]的功能是把a[i]的值保存到key中,同时可以腾出位置i,在他前面的数a[j],如果满足key8.将有序数组 nums 中的重复项删除,编写的 Python 程序段如下:nums=1n=len(nums);i=1 (1) while i if nums[i] !=nums[i-1]: (2) k+=1 i+=1nums=nums[:k]上述程序段中方框处可选代码为:①k=0 ② k=1 ③nums[k]=nums[i] ④nums[i-1]=nums[i] 则(1)、(2)处代码依次为 ( )A.①③ B.①④ C.②③ D.②④答案 C解析 本题考查删除重复项的代码段理解。本题的思路是:从第二个字符开始遍历有序字符串 s 的各个字符,若前后相邻两个字符不相等,把当前字符重新赋值到字符串 s 中,此时的索引用 k 来表示,若前后两个字符相等, 则跳过当前字符,不组合。以["a","a","b","b","b","c"]为例,最终会得到["a","b","c"]。9.有如下Python程序:a = [1, 5, 3, 2, 1, 4, 5, 8, 4, 3]i = 1;max_list = []while i <= len(a)-2: if a[i-1] < a[i] and a[i] > a[i+1]: max_list.append(a[i]) #append()方法用于在列表末尾添加新的对象 i += 1print(max_list)执行该程序段后,列表 max_list 的值为 ( )A.[1] B.[8] C.[5, 8] D.[5, 1, 8]答案 C10.有如下Python程序段:s=input("请输入字符串:")i=0;j=1;t=0;s1="";maxs=""while i if s[i]<=s[i+1]: j+=1 s1=s[t:t+j] if len(maxs)<=len(s1): maxs=s1 else: s1="" t=i+1 j=1 i+=1print(maxs)执行该程序,当输入“p8579yt559h6”时,输出的结果为 ( )A.579 B.579y C.559h D.t559h答案 C二、能力提升11.学校举办“十佳歌手”比赛,经初赛选拔,共有15位同学进入决赛。现需制定一个决赛出场顺序,即为每位进入决赛的同学随机分配一个出场序号。编写的Python程序段如下:import random # 导入随机模块name=["张**","李**","王*","许*","林**","王**","陈*","洪**","鲍**","罗*","张*","吴**","方*","郑*","章*"]seq={};a=[];i=0while i<=14: m=random.randint(1,15) #产生[1,15]范围内的随机整数 if m not in a: # ① a+=[m] seq[name[i]]=m i+=1 # ②print(seq) # ③运行上述程序段后,下列说法正确的是 ( )A.列表a中的元素不会重复B.①处语句最多执行15次C.②处语句缩进应与①处语句对齐,避免程序死循环D.③处语句缩进应与①处语句对齐,否则只输出一个序号答案 A解析 本题考查循环语句、字典和随机函数。当数m不在列表a中时,才会将数m放入列表中,因此列表a中的元素不会重复。变量m是随机产生的整数,则并不能保住m每次都不同,若是产生了重复的数,则程序会再次进入循环,重新产生随机数,因此①处语句是最少执行15次。若②处语句缩进应与①处语句对齐,则不论变量m是否为重复的数,i的值都会加1,while循环一共循环15次,会造成部分同学没有序号的情况。若③处语句缩进应与①处语句对齐,则每进入一次循环,都会输出字典seq的值。而在原程序中,若产生了一个不重复的新序号,则会将该序号与一位同学对应起来形成字典中的键值对。因此最终输出的字典中存放了所有同学与之对应的序号。12.有如下程序段:import random #导入随机数模块n=random.randint(0,100) #产生0-100之间的随机整数,包含0和100m=n;k=0;s=""while n!=1: for i in range(2,n+1): if n%i==0: k=i n=n∥k s=s+str(k)+"*" breakprint(m,"=",s[0:len(s)-1])上述程序执行后,输出结果不可能的是 ( )A.67=67 B.34=2*17C.54=2*3*3*3 D.20=2*3*4答案 D13.有一组正整数,要求对其中的奇偶数进行交换。交换后偶数在前,奇数在后,并保持相对顺序不变。a=[5,10,21,7,24,14,9,11,36,37]n=len(a);b=[0]*nnum=0;k=0while k <10: if ① : b[num]=a[k] num+=1 else: ② k+=1for j in range(n-num,n): ③ print(a)将加框处的代码补充完整,正确的是 ( )A.①a[k]%2==1 ②a[k-num]=a[k] ③a[j]=b[j-n+num]B.①a[k]%2==0 ②b[k-num]=a[k] ③a[j]=b[j+num]C.①a[k]%2==0 ②a[k-num]=a[k] ③a[j]=b[j+num]D.①a[k]%2==1 ②b[k-num]=a[k] ③a[j]=b[j-n+num]答案 A14.奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位的程序,功能如下:键盘输入1~255十进制待校验数,输出该数对应的二进制值及该数的校验位值。程序运行界面如图所示。请输入待校验数:2020转换为二进制数为:11111100100 校验位值为:0>>>实现上述功能的程序如下,请在程序划线处填入合适的代码。n=int(input("请输入待校验数:"))t=0s=""while n>0: a=n%2 ① t=t+a s=str(a)+s② print("转换为二进制数为:",s,"校验位值为:",1-v)答案 ①n=n∥2 ②v=t%2解析 本题的算法思想是将整数n转化为二进制数,然后统计1的个数,再对统计个数进行校验。十进制化二进制的方法为除2取余,每得到一个余数,则将余数累加在变量t中,商为n∥2,因此①处为n=n∥2;根据print语句可知,结果为1-v,即v为1时校验位值为0,v为0时校验位值为1,因此可推断出②处语句为v=t%2。15.某次测试的答题结果存储在asht.txt文件中,该文件每行记录1个考生10道单选题的答案,每题有A、B、C、D四个选项,空白的答案标记为'K'。评分标准:正确得3分,错误得-1分,空白得0分。实现评分的Python程序如下。ANS='ACBBCDADBC' #ANS 为标准答案score=[]for line in open('asht.txt','r'): score.append(0) i=len(score)-1 j=0 while j if① : score[i]+=3 elif line[j]!='K': ② j+=1print(score)(1)若标准答案为:'ACBBCDADBC',则答案ACBBDDADKC'的得分为 。 (2)完善上述①②处代码。答案 (1)23 (2)①line[j]==ANS[j]②score[i]-=1解析 本题考查顺序查找算法。line表示asht.txt文件中每一条记录,每条记录有10道单选题答案。语句score.append(0)表示每读取一条记录,该列表增加一个值为0的元素,i表示score列表中最后一个元素的索引值。j初值为0,终值为len(ANS)-1,表示在标准答案中比对当前记录中答案,如果line[j]==ANS[j]表示当前答案与标准答案一致,得3分,不正确将扣1分。16.分解质因数是指一个整数可以写成几个质数相乘的形式。现有如下Python程序段实现对一个整数(可以为负整数)分解质因数,如输入正整数 30,输出结果为:30=2*3*5,输入负整数-4,输出结果为:-4=-1*2*2。t=int(input("输入一个整数:"))ans = str(t)+"="if t<0: t=-t ans += "-1*"i=2while t>1: while t%i==0: ans += str(i)+"*" ① i+=1print(② ) (1)当输入整数-56时,输出的结果为 。 (2)请在划线处填入合适的代码。答案 (1)-56=-1*2*2*2*7 (2)① t∥=i② ans[:-1] 或 ans[0:len(ans)-1]17.尼克斯彻定理:任何一个大于等于 1 的整数的立方等于一串连续奇数之和。如:33=7+9+11,编写一个Python 程序验证尼克斯彻定理,程序运行时,输入一个大于等于1的整数,输出验证结果如下图所示:请输入一个大于1的整数:33**3=7+9+11(1)若输入数字2,输出的结果为 (2)完善划线处的代码。n=int(input("请输入一个大于等于 1 的整数:"))for i in range(1,n**3+1,2): sum1=0 t=i while sum1 ① t+=2 if sum1==n**3: breaks=str(n)+"**"+str(3)+"="while sum1>0: sum1-=i if ② : s+=str(i) else: s+=str(i)+"+" i=③ print(s)答案 (1)2**3=3+5 (2)①sum1+=t②sum1==0 ③i+218.如果集合a的任意一个元素都是集合b的元素,那么集合a称为集合b的子集。例如集合a的元素依次为[1,3,5],集合b的元素依次为[1,2,3,4,5],集合a的任意一个元素都是集合b中的元素,所以集合a称为集合b的子集。编写Python程序,用于判断集合a是否是集合b的子集,功能如下:程序运行时随机产生na个不重复的整数存储在集合a中,随机产生nb个不重复的整数存储在集合b中。显示判断的结果,程序运行界面如图所示。[2,8,18][5,14,19,10,12,18,4,2,7,17]a不是b的子集(1)集合a中元素为[3,6,7],集合b中元素为[6,19,7,13,2,10,3],集合a是否为集合b的子集 (填字母。A.是 B.否) (2)完善划线处代码。import randomna=3;nb=10#随机产生 na 个不重复的整数存储在列表 a 中,随机产生 nb 个不重复的整数存储在列表 b 中,代码略print(a);print(b)① i=0while ② : j=0 while j if ③ : break j+=1 if j==nb: flag=False i+=1if flag: print("a 是 b 的子集")else: print("a 不是b 的子集")答案 (1)A (2)①flag=True ②i19.下列程序统计字符串(由数字或字母组成)中同一字符连续出现最多的次数,如果有多个字符连续出现次数并列最多,输出第一个字符,例如程序运行时,输入字符串:“aabb33ddddf88888q",输出结果为:8出现的次数最多,最多共连续出现了5次Python程序如下:s=input("请输入字符串:")c=0;m=0;dic={}maxlen=0;d=0while c+1<=len(s): if s[c] not in dic: dic[s[c]]=1 while s[c]==s[c+m]: m+=1 if c+m==len(s): ① if m>maxlen: dic[s[c]]=m d=c ② c+=m m=0print(③ +"出现的次数最多") print("最多共连续出现了"+str(maxlen),"次")print("位于字符串的第",d+1,"位到第",d+maxlen+1 ,"位")(1)请在划线处填入合适的代码。(2)加框处的代码还可以用 代替。 答案 (1)①break ②maxlen=m ③s[d] (2)dic[s[d]](共85张PPT)课时6 While循环语句及程序实现第三章 算法的程序实现1.掌握while循环语句的语法格式,理解while循环的功能。2.熟练使用while循环语句解决实际问题。目 录CONTENTS知识梳理01例题精析02随堂检测03巩固与提升04知识梳理11.while循环的功能While循环在执行时,首先会判断条件是否为真,如果条件为真,执行一次循环体,再次判断条件是否为真,如果仍为真,那么再执行一次循环体,以此类推,直到条件为假时退出while语句。2.while循环语句格式while<条件>:<循环体>3.while循环适用场合(1)循环次数未知,但循环结束的条件已知。(2)循环条件有两个或两个以上。①在while循环前应对变量赋初值。②循环变量的变化要在循环体内通过赋值语句来实现。例题精析2例1 输入一个正整数,输出所有的质因子。如24=2*2*2*3。实现上述功能的Python代码如下:n=int(input("输入一个正整数:"))i=2while ① : if n %i==0: n=n/i print(i) else: ② (1)在程序划线处填入合适的代码。(2)按照上述算法,输入60,依次输出的质因子是 。 答案 (1)①n>1或n!=1 ②i+=1 (2)2 2 3 5解析 最小的质因数是2,如果能被2整除,则反复相除,当不能被2整除时,将i增加1,尝试被3整除,如果还不能除通,往上增加到4,由于前面反复除2操作,因此不可能被不是质数的数除通。当相除的结果为1时,终止循环。输入60,可以被2除2次,被3除1次,被5除1次。变式训练1 工作人员手中有人民币100、50、20、10和1元5个币种,输入一个金额,按最大票面优先兑换的原则,输出相应的人民币及张数。实现上述功能的Python代码如下:je=int(input("请输入金额!"))rmb=[100,50,20,10,1]i,t=0,0while je>0: if① : D t=je∥rmb[i] ② print("兑换"+str(rmb[i])+"元"+str(t)+"张") else: i+=1(1)在程序划线处填入合适的代码。(2)按照上述算法,输入356,依次输出人民币100、50、20、10和1元5个币种的总的数量是 。 答案 (1)①je>=rmb[i] ②je=je-rmb[i]*t (2)10解析 当所剩金额大于或等于当前币种时,计算可以兑换的张数t,接着减去当前币种的金额,如果金额小于当前金额时,找到下一种较小的金额进行尝试,直到全部兑换完毕。输入356元,可以换3张100元,1张50元和6张1元。例2 十进制数转换成二进制数:十进制可以用按权展开相加的表达式来表示,如13D=1×23+1×22+0×21+1×20。若十进制数大于k位上的权值,则k位上数为1,否则为0。设计的Python程序如下所示:n=int(input("输入一个十进制数"))ss=""k=0while 2**k k+=1 t=2**(k-1) if n>=t: ss=ss+"1" ① else: ss=ss+"0" ② print(ss)(1)加框处代码有误,请修正这个错误。(2)请在程序划线处填入合适的代码。答案 (1)n>0 or k>0 (2)①n=n-t ②k-=1解析 变量k表示转换成二进制的长度,每次需减去k位上的权值t,若n大于等于t,表示该位上数为1,完成该位转换,同时需减去该位上的可能权值。若n已经为零,但k并没有达到最低位0,例如12D,减去8减去4后,得到0,但只输出2个1,此时k=2,还需输出2个0。变式训练2 下列程序的功能是:计算表达式1×3+2×3+3×3+…100×3的值,并输出计算结果。s=0i=1while i<=100: i+=1print(s)(1)刚退出循环时,变量i的值是 。 (2)为了实现上述表达式的计算,程序中划线处的语句为 。 答案 (1)101 (2)s=s+i*3或s+=i*3解析 本题主要考查的是while循环的程序实现。(1)循环变量i的初值为1,步长为1,循环条件为i<=100,即当i=101时,循环结束。(2)根据表达式可知,划线处语句的功能是将i*3的值进行累加,从print(s)语句可知,累加和存放在变量s中,因此划线处的语句为s=s+i*3,也可以写为s+=i*3。例3 判断一个字符串是否为回文串。如果一个字符串,从左到右读和从右到左读是完全一样的,那么这个字符串称为回文串。下面程序的功能是:输入一个字符串,检测是否为回文串。s=input("输入一个字符串")i=0j=len(s)-1flag=Truewhile① : if s[i]==s[j]: i+=1 j-=1 else: ② print(flag)(1)请在程序划线处填入合适的代码。(2)上述程序的功能与语句print(s==s[::-1])功能 (填:是/否)一致。 答案 (1)①i解析 本题考查的是多条件循环。变量i和j分别表示首尾两个位置,对首尾的字符依次比较,如果相等,分别后移和前移,如果不相等,表示不是回文,循环结束。s[::-1]表示将字符串s首尾互换,若两者相等,表示是回文字符。 flag=-flag n=n+2 ② print("π=%f"%(4*s),"t=",t,"n=",n)运行结果:π=3.141593 t=9.9999999e-09 n=100000001答案 ①abs(t)>=1e-8 ②t=flag*1.0/n或t=flag*1/n解析 本题主要考查的是while循环的灵活应用。条件是最后一项的绝对值小于10-8,需要使用绝对值函数abs,10-8用科学计数法来表示为1e-8,因此①处代码为abs(t)>=1e-8;用flag变量来表示正负符号,每一项的值为实数,用1.0/n来表示,因此②处代码为t=flag*1.0/n。例4 有如下Python程序段:s=input("输入字符串:")n=len(s)i,j=0,n-1result=""while i=n∥2: if s[i]>s[j]: result+=s[i]; j-=1 elif s[i] result+=s[j]; i+=1 else: i+=1;j-=1print(result)执行该程序段,分别输入下列选项中的字符串,输出结果不为“555”的是( )A."51234" B."12535" C."54321“ D."55123"解析 本题考查字符串的操作。该程序段的作用是将字符串 s 中左半部分与右半部分按照从大到小的顺序交替排列,生成一个新的字符串 result。输入 s 字符串为 12535 时,输出结果为 55。B随堂检测31.有如下Python程序段:n=int(input("请输入一个正整数:"))s=0;i=1while i if n%i==0: s=s+i i=i+1print(s)运行程序,输入18输出s的值是( )A.5 B.21 C.39 D.6B解析 本题考查循环结构。把n的因子进行相加。2.有如下Python程序段:m=int(input("输入一个数字串"))s=""flag=Truewhile m>0: r=m%10 m=m∥10 if flag and r%2!=0: s=str(r)+s flag=not flagprint(flag,s)若输入的值为“5201314”,执行该程序段后,输出的结果是 ( )A.False 1 B.True 1 C.False 2 D.True 4解析 本题考查循环控制结构和逻辑变量运用。语句r=m%10取出m的个位数,语句m=m∥10去除m的个位数,因此该循环是从后向前取出数字串的各个数字,当条件flag and r%2!=0成立时,把r变成字符并联接入s中,语句flag=not flag的作用是把flag的值变为False,该程序的功能是找到第一个奇数。A3.有如下Python程序段:s="CixiStudent"f=[0]*26;t=s[4:];i=0while i if 'A'<=t[i]<="Z": i+=1 continue elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0: f[ord(t[i])-ord('a')]=1 i+=1for i in range(26): if f[i]==1: print(chr(i+ord('a')),end='')A运行以上程序段后,输出的内容为 ( )A.dentu B.Student C.tuden D.deintux解析 本题考查循环控制结构。continue语句用来告诉python跳过当前循环,进行下一个循环。列表t中的值为'Student',f列表中有26个元素,可以看成一个桶,当某个字母出现,ord(t[i])-ord('a')对应的索引号的元素值为1,表示该字母出现过。将出现过的字母从小到大输出。B.for i in range(5): if a [i]>0: break a[0],a[i]=a[i],a[0]DA.i=0 while a[i]==0: i+=1 a[0],a[i]=a[i],a[0]C.i=0 while True: if a[i]>0: break i+=1 a[0],a[i]=a[i],a[0]D.for i in a: if i>0: break a[0],a[i]=a[i],a[0]解析 本题考查循环结构。D选项中变量i已经是列表a中的元素,则最后进行交换的并不是a[i],正确的交换语句为:a[0],i=i,a[0]。5.有如下Python程序段:s="akpboyogirlyygirlkp"s1=s+"###";boy=0;girl=0;i=0while i a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3] if a=="b" or b=="o" or c=="y": boy=boy+1 if a=="g" or b=="i" or c=="r" or d=="1": girl=girl+1 i+=1B执行该程序段后,变量boy及girl的值分别为 ( )A.1 2 B.4 2 C.4 3 D.6 9解析 本题考查列表的枚举。连续取出4个字符,若第1、2、3个字符中分别是b、o、y中一个,则boy增加1。如i等于5时,取出"yog",第2个字符是"o";取出"rly"、"lyy",第3个字符是"y"。6.有如下Python程序段:a=[3,4,2,5,6,7,7,1,2]m,c,i=1,1,1while i if a[i]>=a[i-1]: c+=1 m=max (m,c) else: c=1 i+=1print (c,m)则程序执行后,c和m的值分别是( )A.1 5 B.1 4 C.2 5 D.2 4C7.有如下Python程序段:count=0;i=1while i<100: if int(i**0.5)==i**0.5: count+=1 i+=1print(count)运行程序后,输出的结果是( )A.9 B.0 C.99 D.5A8.对由小写字母组成的长度相同的两个字符串s1和s2进行各字母数量检测,如"abdac"与"aabcd"所含字母数量一致,与"aabcc"所含字母数量不一致。实现该功能的Python部分程序段如下:s1="";s2=""b=[0]*26for i in range (len(s1)) : x=ord(s1[i])-97;b[x]+=1 y=ord(s2[i])-97; (1) j=0while j<26: if (2) : break j+=1if j==26: print("所含字母数量一致")else: print("所含字母数量不一致")上述程序段中划线处可选语句为:①b[y]+=1 ②b[y]-=1 ③b[j]!=0④b[j]==0则(1)(2)处语句依次应为( )A.①③ B.②④ C.②③ D.①④C9.有如下Python程序:a = [0] * 10 ; c = 0n = int(input("输入n的值:"))while n > 0: a[n % 10] += 1 if a[n % 10] == 2: c += 1 n ∥= 10print(c)运行该程序后,输出结果为2,则输入n的值可能为 ( )A.135553 B.234125 C.202222 D.112233A4巩固与提升基础巩固能力提升1.有如下Python程序段:s1='blgr';s2='bollymgpric'i=0;j=0;s3=''while i<=len(s1)-1 and j<=len(s2)-1: if s1[i]==s2[j]: i+=1 else: s3=s3+s2[j] j+=1print(s3)执行该程序段后,输出的内容为( )A.oymp B.olymp C.olympic D.oympicB2.有如下Python程序段:code="0123456789ABCDEF"numstr=input("请输入一个二进制整数:")numlen=len(numstr)s=0;ss=""for i in range(numlen): x=int(numstr[i])*2**(numlen-i-1) s+=xt=swhile t>0: ss=code[t%16]+ss t=t∥16print(ss)运行该程序段,输入1100111,程序结果为( )A.110 B.103C.67 D.1100111C3.有如Python下程序段:s1=[12,15,28]s2=[15,28,32]i=0while i<=len(s1)-1: if s1[i] not in s2: print(s1[i]) i=i+1以下说法正确的是 ( )A.该程序输出结果为32B.该程序的算法是解析算法C.该程序输出的结果为[12]D.该程序实现的功能是得到s1中有但s2中没有的元素D4.有下面一段程序:a=[9,5,2,3,0,-9,5,0,7,-10]s,i=0,0while a[i]!=0 and i < len(a): s+=1 i+=1运行该程序后s的值为( )A.4 B.5 C.8 D.10A解析 本题考查循环结构while语句,当i位置上的元素值不为0且满足i比列表a长度来的小的时候可以进入循环,此时s,i的值分别+1,不满足任一条件时循环结束,可以看到列表中有元素0,此时i的值为4,因此结束时s的值也是4。5.小明用Python编写了一个找最大值的程序,程序功能是:用户输入数字串,数据间用逗号分隔,最后以逗号结尾,程序执行后输出最大的数值。程序段如下,划线处代码正确的是 ( )s=input("请输入数字串:")i=j=max=0c=t=""while j c=s[j] if c==",": t=s[i:j]B if int(t)>max: max=int(t) ① ② print(max)A.①i=i+1 ②j=j+1B.①i=j+1 ②j=j+1C.①j=j+1 ②i=i+1D.①j=i+1 ②i=i+1解析 本题考查循环结构嵌套分支结构找最值模型,i表示数字的左索引,j表示数字后逗号的索引值,t为逗号前完整的数字,当找到比当前最大值还要大的值时,更新最大值并且更新左边界和右边界的值继续往下找,因此答案为B。6.在一次抽奖活动中,需要在8人中随机抽取3个幸运奖,对应的Python程序如下:import randomxm=["A","B","C","D","E","F","G","H"] #用字母代表人名hj=[""]*3bz=[False]*8i=0while i<=2: n=random.randint(0,7) #产生一个0-7之间的整数n print(hj)程序划线处代码合适的是 ( )AA.if bz[n]==False: hj[i]=xm[n] bz[n]=True i+=1B.if bz[n]==True: hj[i]=xm[n] bz[n]=False i+=1C.if bz[i]==False: hj[n]=xm[i] bz[i]=True i+=1D.if bz[i]==True: hj[n]=xm[i] bz[i]=True i+=1解析 本题考查随机函数的应用。列表bz中有8个元素,其初值均为False,表示该索引号对应的xm元素没有抽到奖。变量i表示第几个幸运观众,变量n表示幸运观众的索引号。7.有如下Python程序段:import randoma=[-1]*5for i in range(len(a)): a[i]=random.randint(1,10) #产生一个[1,10]之间的整数for i in range(2,4): key=a[i] j=i-1 while j>=1 and key a[j+1]=a[j] j-=1 a[j+1]=key执行该程序段后,变量a可能的值为 ( )A.[1,0,3,6,7] B.[3,2,6,7,1]C.[1,3,2,5,7] D.[3,5,6,2,7]解析 本题考查随机数应用和顺序查找。在循环体中,i的值为2或3,语句key=a[i]的功能是把a[i]的值保存到key中,同时可以腾出位置i,在他前面的数a[j],如果满足keyB上述程序段中方框处可选代码为:①k=0 ② k=1 ③nums[k]=nums[i] ④nums[i-1]=nums[i] 则(1)、(2)处代码依次为 ( )A.①③ B.①④ C.②③ D.②④解析 本题考查删除重复项的代码段理解。本题的思路是:从第二个字符开始遍历有序字符串 s 的各个字符,若前后相邻两个字符不相等,把当前字符重新赋值到字符串 s 中,此时的索引用 k 来表示,若前后两个字符相等, 则跳过当前字符,不组合。以["a","a","b","b","b","c"]为例,最终会得到["a","b","c"]。C9.有如下Python程序:a = [1, 5, 3, 2, 1, 4, 5, 8, 4, 3]i = 1;max_list = []while i <= len(a)-2: if a[i-1] < a[i] and a[i] > a[i+1]: max_list.append(a[i]) #append()方法用于在列表末尾添加新的对象 i += 1print(max_list)执行该程序段后,列表 max_list 的值为( )A.[1] B.[8] C.[5, 8] D.[5, 1, 8]C10.有如下Python程序段:s=input("请输入字符串:")i=0;j=1;t=0;s1="";maxs=""while i if s[i]<=s[i+1]: j+=1 s1=s[t:t+j] if len(maxs)<=len(s1): maxs=s1 else: s1="" t=i+1 j=1 i+=1print(maxs)执行该程序,当输入“p8579yt559h6”时,输出的结果为( )A.579 B.579y C.559h D.t559hC11.学校举办“十佳歌手”比赛,经初赛选拔,共有15位同学进入决赛。现需制定一个决赛出场顺序,即为每位进入决赛的同学随机分配一个出场序号。编写的Python程序段如下:import random # 导入随机模块name=["张**","李**","王*","许*","林**","王**","陈*","洪**","鲍**","罗*","张*","吴**","方*","郑*","章*"]seq={};a=[];i=0while i<=14: m=random.randint(1,15) #产生[1,15]范围内的随机整数 if m not in a: # ① a+=[m] seq[name[i]]=m i+=1 # ②print(seq) # ③运行上述程序段后,下列说法正确的是( )A.列表a中的元素不会重复B.①处语句最多执行15次C.②处语句缩进应与①处语句对齐,避免程序死循环D.③处语句缩进应与①处语句对齐,否则只输出一个序号A解析 本题考查循环语句、字典和随机函数。当数m不在列表a中时,才会将数m放入列表中,因此列表a中的元素不会重复。变量m是随机产生的整数,则并不能保住m每次都不同,若是产生了重复的数,则程序会再次进入循环,重新产生随机数,因此①处语句是最少执行15次。若②处语句缩进应与①处语句对齐,则不论变量m是否为重复的数,i的值都会加1,while循环一共循环15次,会造成部分同学没有序号的情况。若③处语句缩进应与①处语句对齐,则每进入一次循环,都会输出字典seq的值。而在原程序中,若产生了一个不重复的新序号,则会将该序号与一位同学对应起来形成字典中的键值对。因此最终输出的字典中存放了所有同学与之对应的序号。12.有如下程序段:import random #导入随机数模块n=random.randint(0,100) #产生0-100之间的随机整数,包含0和100m=n;k=0;s=""while n!=1: for i in range(2,n+1): if n%i==0: k=i n=n∥k s=s+str(k)+"*" breakprint(m,"=",s[0:len(s)-1])DA14.奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位的程序,功能如下:键盘输入1~255十进制待校验数,输出该数对应的二进制值及该数的校验位值。程序运行界面如图所示。实现上述功能的程序如下,请在程序划线处填入合适的代码。n=int(input("请输入待校验数:"))t=0s=""请输入待校验数:2020转换为二进制数为:11111100100 校验位值为:0>>> while n>0: a=n%2 ① t=t+a s=str(a)+s② print("转换为二进制数为:",s,"校验位值为:",1-v)答案 ①n=n∥2 ②v=t%2解析 本题的算法思想是将整数n转化为二进制数,然后统计1的个数,再对统计个数进行校验。十进制化二进制的方法为除2取余,每得到一个余数,则将余数累加在变量t中,商为n∥2,因此①处为n=n∥2;根据print语句可知,结果为1-v,即v为1时校验位值为0,v为0时校验位值为1,因此可推断出②处语句为v=t%2。15.某次测试的答题结果存储在asht.txt文件中,该文件每行记录1个考生10道单选题的答案,每题有A、B、C、D四个选项,空白的答案标记为'K'。评分标准:正确得3分,错误得-1分,空白得0分。实现评分的Python程序如下。ANS='ACBBCDADBC' #ANS 为标准答案score=[]for line in open('asht.txt','r'): score.append(0) i=len(score)-1 j=0 while j if① : score[i]+=3 elif line[j]!='K': ② j+=1print(score)(1)若标准答案为:'ACBBCDADBC',则答案'ACBBDDADKC'的得分为 。 (2)完善上述①②处代码。答案 (1)23 (2)①line[j]==ANS[j] ②score[i]-=1解析 本题考查顺序查找算法。line表示asht.txt文件中每一条记录,每条记录有10道单选题答案。语句score.append(0)表示每读取一条记录,该列表增加一个值为0的元素,i表示score列表中最后一个元素的索引值。j初值为0,终值为len(ANS)-1,表示在标准答案中比对当前记录中答案,如果line[j]==ANS[j]表示当前答案与标准答案一致,得3分,不正确将扣1分。16.分解质因数是指一个整数可以写成几个质数相乘的形式。现有如下Python程序段实现对一个整数(可以为负整数)分解质因数,如输入正整数 30,输出结果为:30=2*3*5,输入负整数-4,输出结果为:-4=-1*2*2。t=int(input("输入一个整数:"))ans = str(t)+"="if t<0: t=-t ans += "-1*"i=2while t>1: while t%i==0: ans += str(i)+"*" ① i+=1print(② ) (1)当输入整数-56时,输出的结果为 。 (2)请在划线处填入合适的代码。答案 (1)-56=-1*2*2*2*7 (2)① t∥=i② ans[:-1] 或 ans[0:len(ans)-1]17.尼克斯彻定理:任何一个大于等于 1 的整数的立方等于一串连续奇数之和。如:33=7+9+11,编写一个Python 程序验证尼克斯彻定理,程序运行时,输入一个大于等于1的整数,输出验证结果如下图所示:(1)若输入数字2,输出的结果为 。 (2)完善划线处的代码。n=int(input("请输入一个大于等于 1 的整数:"))for i in range(1,n**3+1,2):请输入一个大于1的整数:33**3=7+9+11 sum1=0 t=i while sum1 ① t+=2 if sum1==n**3: breaks=str(n)+"**"+str(3)+"="while sum1>0: sum1-=i if ② : s+=str(i) else: s+=str(i)+"+" i=③ print(s)答案 (1)2**3=3+5 (2)①sum1+=t ②sum1==0 ③i+218.如果集合a的任意一个元素都是集合b的元素,那么集合a称为集合b的子集。例如集合a的元素依次为[1,3,5],集合b的元素依次为[1,2,3,4,5],集合a的任意一个元素都是集合b中的元素,所以集合a称为集合b的子集。编写Python程序,用于判断集合a是否是集合b的子集,功能如下:程序运行时随机产生na个不重复的整数存储在集合a中,随机产生nb个不重复的整数存储在集合b中。显示判断的结果,程序运行界面如图所示。[2,8,18][5,14,19,10,12,18,4,2,7,17]a不是b的子集(1)集合a中元素为[3,6,7],集合b中元素为[6,19,7,13,2,10,3],集合a是否为集合b的子集 (填字母。A.是 B.否) 。(2)完善划线处代码。import randomna=3;nb=10#随机产生 na 个不重复的整数存储在列表 a 中,随机产生 nb 个不重复的整数存储在列表 b 中,代码略print(a);print(b)① i=0while ② : j=0 while j if ③ : break j+=1 if j==nb: flag=False i+=1if flag: print("a 是 b 的子集")else: print("a 不是b 的子集")答案 (1)A (2)①flag=True ②i19.下列程序统计字符串(由数字或字母组成)中同一字符连续出现最多的次数,如果有多个字符连续出现次数并列最多,输出第一个字符,例如程序运行时,输入字符串:“aabb33ddddf88888q",输出结果为:8出现的次数最多,最多共连续出现了5次Python程序如下:s=input("请输入字符串:")c=0;m=0;dic={}maxlen=0;d=0while c+1<=len(s): if s[c] not in dic: dic[s[c]]=1 while s[c]==s[c+m]: m+=1 if c+m==len(s): ① if m>maxlen: dic[s[c]]=m d=c ② c+=m m=0print(③ +"出现的次数最多") print("最多共连续出现了"+str( maxlen ),"次")print("位于字符串的第",d+1,"位到第",d+maxlen+1 ,"位")(1)请在划线处填入合适的代码。(2)加框处的代码还可以用 代替。 答案 (1)①break ②maxlen=m ③s[d] (2)dic[s[d]]课时6 While循环语句及程序实现课时目标1.掌握while循环语句的语法格式,理解while循环的功能。2.熟练使用while循环语句解决实际问题。1.while循环的功能While循环在执行时,首先会判断条件是否为真,如果条件为真,执行一次循环体,再次判断条件是否为真,如果仍为真,那么再执行一次循环体,以此类推,直到条件为假时退出while语句。2.while循环语句格式while〈条件〉:〈循环体〉3.while循环适用场合(1)循环次数未知,但循环结束的条件已知。(2)循环条件有两个或两个以上。①在while循环前应对变量赋初值。②循环变量的变化要在循环体内通过赋值语句来实现。例1 输入一个正整数,输出所有的质因子。如24=2*2*2*3。实现上述功能的Python代码如下:n=int(input(″输入一个正整数:″))i=2while ①____________: if n % i==0:n=n/iprint(i)else:②____________(1)在程序划线处填入合适的代码。(2)按照上述算法,输入60,依次输出的质因子是____________。听课笔记: 变式训练1 工作人员手中有人民币100、50、20、10和1元5个币种,输入一个金额,按最大票面优先兑换的原则,输出相应的人民币及张数。实现上述功能的Python代码如下:je=int(input(″请输入金额!″))rmb=[100,50,20,10,1]i,t=0,0while je>0: if①____________: t=je∥rmb[i] ②____________ print(″兑换″+str(rmb[i])+″元″+str(t)+″张″) else: i+=1(1)在程序划线处填入合适的代码。(2)按照上述算法,输入356,依次输出人民币100、50、20、10和1元5个币种的总的数量是____________。例2 十进制数转换成二进制数:十进制可以用按权展开相加的表达式来表示,如13D=1×23+1×22+0×21+1×20。若十进制数大于k位上的权值,则k位上数为1,否则为0。设计的Python程序如下所示:n=int(input(″输入一个十进制数″))ss=″″k=0while 2**k k+=1while: t=2**(k-1) if n>=t:ss=ss+″1″①____________ else:ss=ss+″0″②____________print(ss)(1)加框处代码有误,请修正这个错误。(2)请在程序划线处填入合适的代码。听课笔记: 变式训练2 下列程序的功能是:计算表达式1×3+2×3+3×3+…100×3的值,并输出计算结果。s=0i=1while i<=100: ____________ i+=1print(s)(1)刚退出循环时,变量i的值是____________。(2)为了实现上述表达式的计算,程序中划线处的语句为____________。例3 判断一个字符串是否为回文串。如果一个字符串,从左到右读和从右到左读是完全一样的,那么这个字符串称为回文串。下面程序的功能是:输入一个字符串,检测是否为回文串。s=input(″输入一个字符串″)i=0j=len(s)-1flag=Truewhile①____________: if s[i]==s[j]: i+=1 j-=1 else: ②____________print(flag)(1)请在程序划线处填入合适的代码。(2)上述程序的功能与语句print(s==s[::-1])功能________(填:是/否)一致。听课笔记: 变式训练3 用下列公式计算的π近似值,直到最后一项的绝对值小于10-8为止。提示:≈1-+-+-…实现上述功能的程序如下,请在程序划线处填入合适的代码。n=t=1s=0flag=1while①____________: s=s+t flag=-flag n=n+2 ②____________print(″π=%f″%(4*s),″t=″,t,″n=″,n)运行结果:π=3.141593 t=9.9999999e-09 n=100000001例4 有如下Python程序段:s=input(″输入字符串:″)n=len(s)i,j=0,n-1result=″″while i=n∥2: if s[i]>s[j]: result+=s[i]; j-=1 elif s[i] result+=s[j]; i+=1else: i+=1;j-=1print(result)执行该程序段,分别输入下列选项中的字符串,输出结果不为“555”的是( )A.″51234″ B.″12535″C.″54321″ D.″55123″听课笔记: 1.有如下Python程序段:n=int(input("请输入一个正整数:"))s=0;i=1while i if n%i==0: s=s+i i=i+1print(s)运行程序,输入18输出s的值是 ( )A.5 B.21 C.39 D.62.有如下Python程序段:m=int(input("输入一个数字串"))s=""flag=Truewhile m>0: r=m%10 m=m∥10 if flag and r%2!=0: s=str(r)+s flag=not flagprint(flag,s)若输入的值为“5201314”,执行该程序段后,输出的结果是 ( )A.False 1 B.True 1 C.False 2 D.True 43.有如下Python程序段:s="CixiStudent"f=[0]*26;t=s[4:];i=0while i if 'A'<=t[i]<="Z": i+=1 continue elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0: f[ord(t[i])-ord('a')]=1 i+=1for i in range(26): if f[i]==1: print(chr(i+ord('a')),end='')运行以上程序段后,输出的内容为 ( )A.dentu B.Student C.tuden D.deintux4.将一组数保存在列表a中,若a[0]=0,则在列表a中从左到右找到第一个大于零的元素,并与a[0]交换。用Python程序描述,下列选项中不可行的是 ( )A.i=0 while a[i]==0: i+=1 a[0],a[i]=a[i],a[0]B.for i in range(5): if a [i]>0: break a[0],a[i]=a[i],a[0]C.i=0 while True: if a[i]>0: break i+=1 a[0],a[i]=a[i],a[0]D.for i in a: if i>0: break a[0],a[i]=a[i],a[0]5.有如下Python程序段:s="akpboyogirlyygirlkp"s1=s+"###";boy=0;girl=0;i=0while i a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3] if a=="b" or b=="o" or c=="y": boy=boy+1 if a=="g" or b=="i" or c=="r" or d=="1": girl=girl+1 i+=1执行该程序段后,变量boy及girl的值分别为 ( )A.1 2 B.4 2 C.4 3 D.6 96.有如下Python程序段:a=[3,4,2,5,6,7,7,1,2]m,c,i=1,1,1while i if a[i]>=a[i-1]: c+=1 m=max (m,c) else: c=1 i+=1print (c,m)则程序执行后,c和m的值分别是 ( )A.1 5 B.1 4 C.2 5 D.2 47.有如下Python程序段:count=0;i=1while i<100: if int(i**0.5)==i**0.5: count+=1 i+=1print(count)运行程序后,输出的结果是 ( )A.9 B.0 C.99 D.58.对由小写字母组成的长度相同的两个字符串s1和s2进行各字母数量检测,如"abdac"与"aabcd"所含字母数量一致,与"aabcc"所含字母数量不一致。实现该功能的Python部分程序段如下:s1="";s2=""b=[0]*26for i in range (len(s1)) : x=ord(s1[i])-97;b[x]+=1 y=ord(s2[i])-97; (1) j=0while j<26: if (2) : break j+=1if j==26: print("所含字母数量一致")else: print("所含字母数量不一致")上述程序段中划线处可选语句为:①b[y]+=1 ②b[y]-=1 ③b[j]!=0④b[j]==0则(1)(2)处语句依次应为 ( )A.①③ B.②④ C.②③ D.①④9.有如下Python程序:a = [0] * 10 ; c = 0n = int(input("输入n的值:"))while n > 0: a[n % 10] += 1 if a[n % 10] == 2: c += 1 n ∥= 10print(c)运行该程序后,输出结果为2,则输入n的值可能为 ( )A.135553 B.234125C.202222 D.112233 展开更多...... 收起↑ 资源列表 课时6 While循环语句及程序实现 学案 浙教版(2019)必修1.doc 课时6 While循环语句及程序实现 教案 浙教版(2019)必修1.doc 课时6 While循环语句及程序实现 课件(共85张ppt)浙教版(2019)必修1.pptx