Python习题选编.docx
- 文档编号:29109424
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:28
- 大小:22.59KB
Python习题选编.docx
《Python习题选编.docx》由会员分享,可在线阅读,更多相关《Python习题选编.docx(28页珍藏版)》请在冰豆网上搜索。
Python习题选编
华东师大信息学院计算中心
一.程序结构与算法部分:
1.编写一个python程序,输入两个数,比较它们的大小并输出其中较大者。
参考代码:
x=int(input("Pleaseenterfirstinteger:
"))
y=int(input("Pleaseentersecondinteger:
"))
if(x==y):
print("两数相同!
")
elif(x>y):
print("较大数为:
",x)
else:
print("较大数为:
",y);
2.写一个算法(流程图和python程序):
输入三个数,输出其最大者。
参考代码:
a,b,c=3,4,5
ifa<=b:
ifc print("b是最大的数") else: print("c是最大的数") else: ifc print("a是最大的数") else: print("c是最大的数") 3.使用Python编程,求1~100间所有偶数的和。 参考代码: sum=0 forxinrange(1,101): ifx%2==0: print(x) sum=sum+x print("累加和是: ",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编程,假设一年期定期利率为%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番? 参考代码: cunkuan=10000#本金10000元 years=0 whilecunkuan<20000: years+=1 cunkuan=cunkuan*(1+ 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): ')) ifscore>100: 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=7 whileTrue: guess=int(input('请输入你猜的数(0~9): ')) ifguess==num: print("恭喜! 你猜中了! ") break; elifguess>num: print("太大") else: print("太小") 8.输入一个数,判断这个数是否为素数,并输出判断结果。 (所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。 下图为参考流程图) 参考答案: importmath n=int(input("请输入一个数: ")) x=int(n)) i,w=2,0 foriinrange(2,x+1): ifn%i==0: w=1 ifw==1: print(n,"不是素数。 ") else: print(n,"是素数。 ") 或 importmath n=int(input('请输入一个数: ')) i,w=2,0 whilei<=int(n))andw==0: ifn%i==0: w=1 break else: i=i+1 ifw==0: print(n,"是素数! ") else: print(n,"不是素数! ") 或 importmath n=int(input('请输入一个数: ')) i=2 whilei<=int(n)): ifn%i==0: print(n,"不是素数! ") break else: i=i+1 else: print(n,"是素数! ") 9.输入一个时间(小时: 分钟: 秒),输出该时间经过5分30秒后的时间。 参考答案: hour,minute,second=input('请输入一个时间(h: m: s): ').split(': ') hour=int(hour) minute=int(minute) second=int(second) second+=30 ifsecond>=60: second=second-60 minute+=1 minute+=5 ifminute>=60: minute=minute-60 hour+=1 ifhour==24: hour=0 print('%d: %d: %d'%(hour,minute,second)) 10.一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。 编程,找出1000之内的所有完数,并输出该完数及对应的因子。 (枚举法) 参考答案: m=1000 forainrange(2,m+1): s=a L1=[] foriinrange(1,a): ifa%i==0: s-=i (i) ifs==0: print("完数: %d,因子包括: "%a,end="") forjinrange(1,len(L1)): print("%d"%L1[j],end=",") print("\n") 11.编程,解决猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想吃时,只剩下一个桃子了。 求第一天共摘多少个桃子。 (迭代法) 参考答案: day=9 x=1 whileday>0: x=(x+1)*2 day-=1 print("total=",x) 二.输入输出与文件部分: 1.编写一个python程序,输入两个数,输出两数之和。 参考代码: x=int(input("Pleaseenterfirstinteger: ")) y=int(input("Pleaseentersecondinteger: ")) print("Thesumis: "); print(x+y); 2.在当前目录下有一个文件名为的文件,存放着上海从2014年3月10日(周一)到3月16日(周日)间一周的最高和最低气温(单位为摄氏度)。 其中,第一行为最高气温,第二行为最低气温。 编程,找出这一周中第几天最热(按最高气温计算)? 最高多少度? 这一周中第几天最冷(按最低气温计算)? 最冷多少度? 参考答案: flname="" f=open(flname) ht=()).strip() L1=list(',')) lt=()).strip() L2=list(',')) () foriinrange(len(L1)): L1[i]=int(L1[i]) L2[i]=int(L2[i]) maxVal=L1[0] maxDay=0 minVal=L2[0] minDay=0 foriinrange(1,len(L1)): ifL1[i]>maxVal: maxVal=L1[i] maxDay=i ifL2[i] minVal=L2[i] minDay=i print("这周第"+str(maxDay+1)+"天最热,最高"+str(maxVal)+"摄氏度") print("这周第"+str(minDay+1)+"天最冷,最低"+str(minVal)+"摄氏度") 3.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。 假设在气象意义上,入春标准是连续5天日均气温超过10℃,根据这一周的气象数据是否能判断上海已经入春? 参考答案: flname="" f=open(flname) ht=()).strip() L1=list(',')) lt=()).strip() L2=list(',')) () L3=[] foriinrange(len(L1)): L1[i]=int(L1[i]) L2[i]=int(L2[i]) (int((L1[i]+L2[i])/2)) sum=0 k=0 foriinrange(len(L3)): sum=sum+L3[i] ifL3[i]>=10: k+=1 else: k=0 avg=int(sum/len(L3)) print("周平均气温为: ",avg) ifk>=5: print("上海这周已入春。 ") else: print("上海这周未入春。 ") 4.当前目录下有一个文件名为的文本文件,存放着某班学生的计算机课成绩,共有学号、平时成绩、期末成绩三列。 请根据平时成绩占40%,期末成绩占60%的比例计算总评成绩(取整数),并分学号、总评成绩两列写入另一文件。 同时在屏幕上输出学生总人数,按总评成绩计90以上、80~89、70~79、60~69、60分以下各成绩档的人数和班级总平均分(取整数)。 参考答案: f=open("") a=() line=()).strip() f2=open("",'w') ("学号平均成绩\n"); L2=[0,0,0,0,0] count=0 sum=0 while(len(line)! =0): #print(line) L1=() (L1[0]+"") f_score=int(int(L1[1])*+int(L1[2])* if90 L2[0]+=1 eliff_score>=80: L2[1]+=1 eliff_score>=70: L2[2]+=1 eliff_score>=60: L2[3]+=1 else: L2[4]+=1 count+=1 sum+=f_score (str(f_score)+"\n") line=()).strip() () () 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("") a=() dela[0] L3=[] forlineina: line=() L1=() f_score=int(int(L1[1])*+int(L1[2])* ([L1[0],f_score]) () c=[0,0,0,0,0] count=0 sum=0 f2=open("",'w') ("学号平均成绩\n"); forL2inL3: if90 c[0]+=1 elifL2[1]>=80: c[1]+=1 elifL2[1]>=70: c[2]+=1 elifL2[1]>=60: c[3]+=1 else: c[4]+=1 count+=1 sum+=L2[1] (L2[0]+""+str(L2[1])+"\n") () avg_score=int(sum/count) print("学生总人数为%d,按总评成绩计,90以上%d人、80~89间%d人、70~79间%d人、60~69间%d人、60分以下%d人。 班级总平均分为%d分。 "%(count,c[0],c[1],c[2],c[3],c[4],avg_score)) 5.当前目录下有一个文本文件,其内容包含小写字母和大写字母。 请将该文件复制到另一文件,并将原文件中的小写字母全部转换为大写字母,其余格式均不变。 参考答案: f=open("") L1=() f2=open("",'w') forlineinL1: ()) () () 6.当前目录下有一个文件名为的文本文件,存放着某班学生的学号、数学课成绩(第2列)和语文课成绩(第3列)。 请编程完成下列要求: (1)分别求这个班数学和语文的平均分(保留1位小数)并输出。 (2)找出两门课都不及格(<60)的学生,输出他们的学号和各科成绩。 (3)找出两门课的平均分在90分以上的学生,输出他们的学号和各科成绩。 建议用三个函数分别实现以上要求。 参考答案: defoutput_avg(L): sum1,sum2=0,0 forlineinL: L1=().split() sum1+=int(L1[1]) sum2+=int(L1[2]) count=len(L) avg1=round(sum1/count,1) avg2=round(sum2/count,1) print("这个班的数学平均分为: %,语文平均分为: %"%(avg1,avg2)) defoutput_notpass(L): print("两门课均不及格的学生学号及数学、语文成绩为: ") forlineinL: L1=().split() ifint(L1[1])<60andint(L1[2])<60: print(line) defoutput_good(L): print("两门课平均分在90分以上的学生学号及数学、语文成绩为: ") forlineinL: L1=().split() f_score=round((int(L1[1])+int(L1[2]))/2) iff_score>=90: print(line) f=open("") L=() delL[0] output_avg(L) output_notpass(L) output_good(L) 三.算法分析与设计部分 1.编程,从键盘接收若干个整数(直接输入回车表示结束),用冒泡法或选择法进行排序(从小到大),并将排序结果在屏幕上输出。 同时估计算法的复杂度。 参考答案: 选择排序: defbubble(List): num=len(List) foriinrange(0,num-1): forjinrange(i+1,num): ifList[i]>List[j]: List[i],List[j]=List[j],List[i] returnList L1=[] num_str=input('请输入一个需排序的整数: ') whilelen(num_str)! =0: (int(num_str)) num_str=input('请输入一个需排序的整数: ') print('排序后结果: ',bubble(L1)) 或 冒泡排序: defbubble(List): foriinrange(0,len(List)-1): forjinrange(len(List)-1,i,-1): ifList[j-1]>List[j]: List[j-1],List[j]=List[j],List[j-1] returnList L1=[] num_str=input('请输入一个需排序的整数: ') whilelen(num_str)! =0: (int(num_str)) num_str=input('请输入一个需排序的整数: ') print('排序后结果: ',bubble(L1)) 上述两个程序算法的时间复杂度均为O(n2). 2.从键盘接收一个正整数n,输出对应斐波那契(Fibonacci)数列的前n项(计算数列中某项的值请用递归函数实现)。 另外,请指出所用算法的复杂度。 有能力的同学还可进一步改进算法的效率。 参考答案: deffib(n): ifn==0orn==1: returnn else: returnfib(n-1)+fib(n-2) n=int(input('n=')) foriinrange(n+1): print(fib(i),end="") 算法时间复杂度为O(n*2n). 可改进为: deffib(n,List): a,b=0,1 (a) whileb<=n: (b) a,b=b,a+b n=int(input('n=')) L1=[] fib(n,L1) print(L1) 算法的时间复杂性为O(n) 3.当前目录下有一个文件名为的文本文件,存放着某班学生的计算机课成绩,共有学号、总评成绩两列。 请查找最高分和最低分的学生,并在屏幕上显示其学号和成绩。 另外,请指出所用算法的复杂度。 参考答案: f=open("") a=() dela[0] L2=[] L3=[] forlineina: line=() L1=() (L1[0]) (L1[1]) () maxScore=L3[0] maxIndex=0 minScore=L3[0] minIndex=0 foriinrange(1,len(L3)): ifL3[i]>maxScore: maxScore=L3[i] maxIndex=i ifL3[i] minScore=L3[i] minIndex=i print("最高分为: "+str(maxScore)+"分,该学生学号为: "+str(L2[maxIndex])) print("最低分为: "+str(minScore)+"分,该学生学号为: "+str(L2[minIndex])) 时间复杂度为O(n). 四.数据结构部分: 1.编程,输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 参考答案: letters,space,digit,other=0,0,0,0 s=input("请输入一行字符: ") foriinrange(len(s)): if(s[i]>='a'ands[i]<='z')or(s[i]>='A'ands[i]<='Z'): letters+=1 elifs[i]=='': space+=1 elifs[i]>='0'ands[i]<='9': digit+=1 else: other+=1 print("字母数: %d\n空格数: %d\n数字数: %d\n其他字符数: %d\n"%(letters,space,digit,other)) 或 p=input('请输入一行字符: ') a,b,c,d=0,0,0,0 foriinp: if((i<='Z'andi>='A')or(i<='z'andi>='a')): a+=1 elif(i==''): b+=1 elif(i>='0'andi<='9'): c+=1 else: d+=1 print('英文字母的个数为: '+str(a)) print('空格的个数为: '+str(b)) print('数字的个数为: '+str(c)) print('其他字符的个数为: '+str(d)) 或 letter,space,digit,other=0,0,0,0 s=input('inputastring: ') forcins: if(): letter+=1 elif(): space+=1 elif(): digit+=1 else: other+=1 print("字母数: %d\n空格数: %d\n数字数: %d\n其他字符数: %d\n"%(letter,space,digit,other)) 2.小王希望用电脑记录他每天掌握的英文单词。 请设计程序和相应的数据结构,使小王能记录新学的英文单词和其中文翻译,并能很方便地根据英文来查找中文。 (参考: 数据结构建议用集合。 集合添加: dic[key]=value判断key是否在集合中: ifkeyindic)。 参考答案: defadd_dic(dic): whileTrue: word=input("请输入英文单词(直接按回车结束): ") iflen(word)==0: break; meaning=input("请输入中文翻译: ") dic[word]=meaning print("该单词已添加到字典库。 ") return defsearch_dic(dic): whileTrue: word=input("请输入要查询的英文单词(直接按回车结束): ") iflen(word)==0: break; ifwordindic: print("%s的中文翻译是%s"%(word,dic[word])) else: print("字典库中未找到这个单词") return worddic=dict() whileTrue: print("请选择功能: \n1: 输入\n2: 查找\n3: 退出") c=input() ifc=="1": add_dic(worddic) elifc=="2": search_dic(worddic) elifc=="3": break else: print("输入有误! ") 五.异常处理部分: 1.以下是两数相加的程序: x=int(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 习题 选编