Python习题选编华东师大信息学院计算中心一.程序结构与算法部分:1.编写一个python程序,输入两个数,比较它们的大小并输出其中较大者。参考代码:x=int(input(Pleaseenterfirstinteger:))y=int(input(Pleaseentersecondinteger:))if(x==y):print(两数相同!)elif(xy):print(较大数为:,x)else:print(较大数为:,y);2.写一个算法(流程图和python程序):输入三个数,输出其最大者。参考代码:a,b,c=3,4,5ifa=b:ifcb:print(b是最大的数)else:print(c是最大的数)else:ifca:print(a是最大的数)else:print(c是最大的数)3.使用Python编程,求1~100间所有偶数的和。精选文库—2参考代码:sum=0forxinrange(1,101):ifx%2==0:print(x)sum=sum+xprint(累加和是:,sum)4.用Python编写程序,输入一年份,判断该年份是否是闰年并输出结果。注:凡符合下面两个条件之一的年份是闰年。(1)能被4整除但不能被100整除。(2)能被400整除。参考代码:year=int(input(Pleaseentertheyear:))if((year%4==0andyear%100!=0)or(year%400==0)):print(year,isaleapyear.)else:print(year,isnotaleapyear.)5.用Python编程,假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?参考代码:cunkuan=10000#本金10000元years=0whilecunkuan20000:years+=1cunkuan=cunkuan*(1+0.0325)print(str(years)+年以后,存款会翻番)6.从键盘接收一百分制成绩(0~100),要求输出其对应的成绩等级A~E。其中,90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。参考答案:score=int(input('请输入成绩(0~100):'))精选文库—3ifscore100:grade=输入错误!elifscore=90:grade='A'elifscore=80:grade='B'elifscore=70:grade='C'elifscore=60:grade='D'elifscore=0:grade='E'else:grade=输入错误!print(grade)7.猜数游戏。预设一个0~9之间的整数,让用户猜一猜并输入所猜的数,如果大于预设的数,显示“太大”;小于预设的数,显示“太小”,如此循环,直至猜中该数,显示“恭喜!你猜中了!”。参考答案:num=7whileTrue:guess=int(input('请输入你猜的数(0~9):'))ifguess==num:print(恭喜!你猜中了!)break;elifguessnum:print(太大)else:print(太小)8.输入一个数,判断这个数是否为素数,并输出判断结果。(所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。下图为参考流程图)精选文库—4参考答案:importmathn=int(input(请输入一个数:))x=int(math.sqrt(n))i,w=2,0foriinrange(2,x+1):ifn%i==0:w=1ifw==1:print(n,不是素数。)else:print(n,是素数。)或importmathn=int(input('请输入一个数:'))i,w=2,0whilei=int(math.sqrt(n))andw==0:ifn%i==0:w=1breakelse:精选文库—5i=i+1ifw==0:print(n,是素数!)else:print(n,不是素数!)或importmathn=int(input('请输入一个数:'))i=2whilei=int(math.sqrt(n)):ifn%i==0:print(n,不是素数!)breakelse:i=i+1else:print(n,是素数!)9.输入一个时间(小时:分钟:秒),输出该时间经过5分30秒后的时间。参考答案:hour,minute,second=input('请输入一个时间(h:m:s):').split(':')hour=int(hour)minute=int(minute)second=int(second)second+=30ifsecond=60:second=second-60minute+=1minute+=5ifminute=60:minute=minute-60hour+=1ifhour==24:hour=0print('%d:%d:%d'%(hour,minute,second))10.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。编程,找出1000之内的所有完数,并输出该完数及对应的因子。(枚举法)参考答案:精选文库—6m=1000forainrange(2,m+1):s=aL1=[]foriinrange(1,a):ifa%i==0:s-=iL1.append(i)ifs==0:print(完数:%d,因子包括:%a,end=)forjinrange(1,len(L1)):print(%d%L1[j],end=,)print(\n)11.编程,解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子。(迭代法)参考答案:day=9x=1whileday0:x=(x+1)*2day-=1print(total=,x)二.输入输出与文件部分:1.编写一个python程序,输入两个数,输出两数之和。参考代码:x=int(input(Pleaseenterfirstinteger:))y=int(input(Pleaseentersecondinteger:))print(Thesumis:);print(x+y);2.在当前目录下有一个文件名为temp.txt的文件,存放着上海从2014年3月10日(周一)到3月16日(周日)间一周的最高和最低气温(单位为摄氏度)。其中,第一行为最高气温,第二行为最低气温。编程,找出这一周中第几天最热(按最高气温计算)?最高多少度?这一周中第几天最冷(按最低气温计算)?最冷多少度?精选文库—7参考答案:flname=temp.txtf=open(flname)ht=(f.readline()).strip()L1=list(ht.split(','))lt=(f.readline()).strip()L2=list(lt.split(','))f.close()foriinrange(len(L1)):L1[i]=int(L1[i])L2[i]=int(L2[i])maxVal=L1[0]maxDay=0minVal=L2[0]minDay=0foriinrange(1,len(L1)):ifL1[i]maxVal:maxVal=L1[i]maxDay=iifL2[i]minVal:minVal=L2[i]minDay=iprint(这周第+str(maxDay+1)+天最热,最高+str(maxVal)+摄氏度)print(这周第+str(minDay+1)+天最冷,最低+str(minVal)+摄氏度)3.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。假设在气象意义上,入春标准是连续5天日均气温超过10℃,根据这一周的气象数据是否能判断上海已经入春?参考答案:flname=temp.txtf=open(flname)ht=(f.readline()).strip()L1=list(ht.split(','))lt=(f.readline()).strip()L2=list(lt.split(','))f.close()L3=[]foriinrange(len(L1)):L1[i]=int(L1[i])L2[i]=int(L2[i])L3.append(int((L1[i]+L2[i])/2))sum=0k=0foriinrange(len(L3)):精选文库—8sum=sum+L3[i]ifL3[i]=10:k+=1else:k=0avg=int(sum/len(L3))print(周平均气温为:,avg)ifk=5:print(上海这周已入春。)else:print(上海这周未入春。)4.当前目录下有一个文件名为score1.txt的文本文件,存放着某班学生的计算机课成绩,共有学号、平时成绩、期末成绩三列。请根据平时成绩占40%,期末成绩占60%的比例计算总评成绩(取整数),并分学号、总评成绩两列写入另一文件score2.txt。同时在屏幕上输出学生总人数,按总评成绩计90以上、80~89、70~79、60~69、60分以下各成绩档的人数和班级总平均分(取整数)。参考答案:f=open(score1.txt)a=f.readline()line=(f.readline()).strip()f2=open(score2.txt,'w')f2.write(学号平均成绩\n);L2=[0,0,0,0,0]count=0sum=0while(len(line)!=0):#print(line)L1=line.split()f2.write(L1[0]+)f_score=int(int(L1[1])*0.4+int(L1[2])*0.6)if90f_score=100:L2[0]+=1eliff_score=80:L2[1]+=1eliff_score=70:L2[2]+=1eliff_score=60:L2[3]+=1else:L2[4]+=1count+=1sum+=f_scoref2.write(str(f_score)+\n)精选文库—9line=(f.readline()).strip()f.close()f2.close()avg_score=int(sum/count)print(学生总人数为%d,按总评成绩计,90以上%d人、80~89间%d人、70~79间%d人、60~69间%d人、60分以下%d人。班级总平均分为%d分。%(count,L2[0],L2[1],L2[2],L2[3],L2[4],avg_score))或f=open(score1.txt)a=f.readlines()dela[0]L3=[]forlineina:line=line.strip()L1=line.split()f_score=int(int(L1[1])*0.4+int(L1[2])*0.6)L3.append([L1[0],f_score])f.close()c=[0,0,0,0,0]count=0sum=0f2=open(score2.txt,'w')f2.write(学号平均成绩\n);forL2inL3:if90L2[1]=100:c[0]+=1elifL2[1]=80:c[1]+=1elifL2[1]=70:c[2]+=1elifL2[1]=60:c[3]+=1else:c[4]+=1count+=1sum+=L2[1]f2.write(L2[0]++str(L2[1])+\n)f2.close()avg_score=int(sum/count)print(学生