1、Python 习题选编华东师大信息学院计算中心一程序结构与算法部分:1. 编写一个 python 程序,输入两个数,比较它们的大小并输出其中较大者。参考代码:x = int(input(“Please enter first integer: “)y = int(input(“Please enter second integer: “)if (x = y):print(“两数相同!“)elif (x y):print(“较大数为:“,x)else: print(“较大数为:“,y);2. 写一个算法(流程图和 python 程序):输入三个数,输出其最大者。参考代码:a,b,c=3,4,5i
2、f a 100:grade = “输入错误!“elif score = 90:grade = Aelif score = 80:grade = Belif score = 70:grade = Celif score = 60:grade = Delif score = 0:grade = Eelse:grade = “输入错误!“print(grade)7. 猜数游戏。预设一个 09 之间的整数,让用户猜一猜并输入所猜的数,如果大于预设的数,显示“太大” ;小于预设的数,显示“太小” ,如此循环,直至猜中该数,显示“恭喜!你猜中了!” 。参考答案:num=7while True:guess=
3、int(input(请输入你猜的数(09):)if guess = num:print(“恭喜!你猜中了! “)break;elif guess num:print(“太大“)else:print(“太小“)8. 输入一个数,判断这个数是否为素数,并输出判断结果。(所谓素数,是指除了 1 和该数本身之外,不能被其它任何整数整除的数。下图为参考流程图)参考答案:import mathn=int(input(“请输入一个数:“)x=int(math.sqrt(n)i,w=2,0for i in range (2,x+1):if n%i=0:w=1if w=1:print(n,“不是素数。“)els
4、e:print(n,“是素数。“)或import mathn=int(input(请输入一个数: )i,w=2,0while i = 60:second = second-60minute += 1minute+=5if minute = 60:minute = minute-60hour += 1if hour = 24:hour = 0print(%d:%d:%d%(hour,minute,second)10. 一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如,6 的因子为 1、2、3,而 6=1+2+3,因此 6 是完数。编程,找出 1000 之内的所有完数,并输出该完数及对
5、应的因子。 (枚举法)参考答案:m=1000for a in range(2,m+1):s=aL1=for i in range(1,a):if a%i=0:s-=iL1.append(i)if s=0:print(“完数:%d,因子包括:“%a,end=“)for j in range(1,len(L1):print(“%d“%L1j,end=“,“)print(“n“)11编程,解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想吃时,只剩下一个桃子了
6、。求第一天共摘多少个桃子。 (迭代法)参考答案:day=9x=1while day0:x=(x+1)*2day-=1print(“total=“,x)二输入输出与文件部分:1. 编写一个 python 程序,输入两个数,输出两数之和。参考代码:x = int(input(“Please enter first integer: “)y = int(input(“Please enter second integer: “)print(“The sum is:“);print(x+y);2. 在当前目录下有一个文件名为 temp.txt 的文件 ,存放着上海从 2014 年 3月 10 日(周一
7、)到 3 月 16 日(周日)间一周的最高和最低气温(单位为摄氏度) 。其中,第一行为最高气温,第二行为最低气温。编程,找出这一周中第几天最热(按最高气温计算)?最高多少度?这一周中第几天最冷(按最低气温计算)?最冷多少度?参考答案:flname=“temp.txt“f=open(flname)ht=(f.readline().strip()L1=list(ht.split(,)lt=(f.readline().strip()L2=list(lt.split(,)f.close()for i in range(len(L1):L1i=int(L1i)L2i=int(L2i)maxVal=L10
8、maxDay=0minVal=L20minDay=0for i in range(1,len(L1):if L1imaxVal:maxVal=L1imaxDay=iif L2i=10:k+=1else:k=0avg=int(sum/len(L3)print(“周平均气温为:“,avg)if k=5:print(“上海这周已入春。 “)else:print(“上海这周未入春。 “)4当前目录下有一个文件名为 score1.txt 的文本文件,存放着某班学生的计算机课成绩,共有学号、平时成绩、期末成绩三列。请根据平时成绩占 40%,期末成绩占 60%的比例计算总评成绩(取整数) ,并分学号、总评成
9、绩两列写入另一文件 score2.txt。同时在屏幕上输出学生总人数,按总评成绩计 90 以上、8089、7079、6069、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,0count=0sum=0while (len(line) != 0):#print(line)L1=line.split()f2.write(L10+“ “)f_score=int
10、(int(L11)*0.4+int(L12)*0.6)if 90=80:L21+=1elif f_score=70:L22+=1elif f_score=60:L23+=1else:L24+=1count+=1sum+=f_scoref2.write(str(f_score)+“n“)line=(f.readline().strip()f.close()f2.close()avg_score=int(sum/count)print(“学生总人数为%d,按总评成绩计 ,90 以上%d 人、8089 间%d 人、70 79 间%d 人、60 69 间%d 人、60 分以下%d 人。班级总平均分为%
11、d 分。“%(count,L20,L21,L22,L23,L24,avg_score)或f=open(“score1.txt“)a=f.readlines()del a0L3=for line in a:line=line.strip()L1=line.split()f_score=int(int(L11)*0.4+int(L12)*0.6)L3.append(L10,f_score)f.close()c=0,0,0,0,0count=0sum=0f2=open(“score2.txt“,w)f2.write(“学号 平均成绩n“);for L2 in L3:if 90=80:c1+=1eli
12、f L21=70:c2+=1elif L21=60:c3+=1else:c4+=1count+=1sum+=L21f2.write(L20+“ “+str(L21)+“n“)f2.close()avg_score=int(sum/count)print(“学生总人数为%d,按总评成绩计 ,90 以上%d 人、8089 间%d 人、70 79 间%d 人、60 69 间%d 人、60 分以下%d 人。班级总平均分为%d 分。“%(count,c0,c1,c2,c3,c4,avg_score)5当前目录下有一个文本文件 sample12.txt,其内容包含小写字母和大写字母。请将该文件复制到另一文
13、件 sample12_copy.txt,并将原文件中的小写字母全部转换为大写字母,其余格式均不变。参考答案:f=open(“sample12.txt“)L1=f.readlines()f2=open(“sample12_copy.txt“,w)for line in L1:f2.write(line.upper()f.close()f2.close()6当前目录下有一个文件名为 class_score.txt 的文本文件,存放着某班学生的学号、数学课成绩(第 2 列)和语文课成绩(第 3 列) 。请编程完成下列要求:(1)分别求这个班数学和语文的平均分(保留 1 位小数)并输出。(2)找出两门
14、课都不及格(60)的学生,输出他们的学号和各科成绩。(3)找出两门课的平均分在 90 分以上的学生,输出他们的学号和各科成绩。建议用三个函数分别实现以上要求。参考答案:def output_avg(L):sum1,sum2=0,0for line in L:L1=line.strip().split()sum1+=int(L11)sum2+=int(L12)count=len(L)avg1=round(sum1/count,1)avg2=round(sum2/count,1)print(“这个班的数学平均分为: %4.1f,语文平均分为:%4.1f“%(avg1,avg2)def output_notpass(L):print(“两门课均不及格的学生学号及数学、语文成绩为:“)for line in L:L1=line.strip().split()if int(L11)60 and int(L12)60:print(line)def output_good(L):print(“两门课平均分在 90 分以上的学生学号及数学、语文成绩为:“)