Python 习题选编
华东师大信息学院计算中心
一.程序结构与算法部分:
1. 编写一个 python 程序,输入两个数,比较它们的大小并输出其中较大者。
参考代码:
x = int(input("Please enter first integer: "))
y = int(input("Please enter secondinteger: "))
if (x ==y):
print(" 两数相同! ")
elif (x > y):
print(" 较大数为: ",x)
else:
print(" 较大数为: ",y);
2.写一个算法(流程图和 python 程序):输入三个数,输出其最大者。
参考代码:
a,b,c=3,4,5
if a <=b:
if c < b:
print ("b 是最大的数 ")
else:
print ("c 是最大的数 ")
else:
if c < a:
print ("a 是最大的数 ")
else:
print ("c 是最大的数 ")
3.使用 Python 编程,求 1~100 间所有偶数的和。
参考代码:
sum=0
for x in range(1,101):
if x %2==0:
print(x)
sum=sum+x
print(" 累加和是 :",sum)
4.用 Python 编写程序,输入一年份,判断该年份是否是闰年并输出结果。
注:凡符合下面两个条件之一的年份是闰年。
(1) 能被 4 整除但不能被 100 整除。
(2) 能被 400 整除。
参考代码:
year = int(input("Please enter the year: "))
if
((year%4==0and year%100!=0)or (year%400==0)): 加个括号即可
print(year,"is a leap year.")
else:
print(year,"is not a leap year.")
5.用 Python 编程,假设一年期定期利率为 3.25%,计算一下需要过多少年,一
万元的一年定期存款连本带息能翻番?
参考代码:
cunkuan = 10000 #本金 10000 元
years=0
while cunkuan<20000:
years+=1
cunkuan=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): '))
if score > 100:
grade = "输入错误! "
elif score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
elif score >= 0:
grade = 'E'
else:
无需写小于什么什么的 因为 elif 就已经是除了这个之外的了
grade = "输入错误! "
print(grade)
7.猜数游戏。预设一个 0~9 之间的整数,让用户猜一猜并输入所猜的数,如果
大于预设的数,显示“太大” ;小于预设的数,显示“太小” ,如此循环,直至猜
中该数,显示“恭喜!你猜中了! ”。
参考答案:
num=7
while True:
guess=int(input('请输入你猜的数( 0~9):'))
if guess== num:
print(" 恭喜!你猜中了! ")
break;
elif guess> num:
print(" 太大 ")
else:
print(" 太小 ")
8.输入一个数,判断这个数是否为素数,并输出判断结果。
(所谓素数,是指除了 1 和该数本身之外,不能被其它任何整数整除的数。下
图为参考流程图 )
参考答案:
import math
n=int(input(" 请输入一个数 :"))
x=int(math.sqrt(n))
i,w=2,0
for i in range (2,x+1):
if n%i==0:
w=1
if w==1:
print(n," 不是素数。 ")
else:
print(n," 是素数。 ")
或
import math
n=int(input(' 请输入一个数: '))
i,w=2,0
while i <= int(math.sqrt(n)) and w==0:
if n%i == 0:
w = 1
break
else:
i = i+1
if w==0:
print(n," 是素数! ")
else:
print(n," 不是素数! ")
或
import math
n=int(input(' 请输入一个数: '))
i=2
while i <= int(math.sqrt(n)) :
if n%i == 0:
print(n," 不是素数! ")
break
else:
i=i+1
else:
print(n," 是素数! ")
9.一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如, 6 的因子
为 1、2、3,而 6=1+2+3,因此 6 是完数。编程,找出 1000 之内的所有完数,并
输出该完数及对应的因子。 (枚举法)
参考答案:
m=1000
for a in range(2,m+1):
s=a
L1=[]
for i in range(1,a):
if a%i==0:
s-=i
L1.append(i)
if s==0:
print(" 完数: %d,因子包括: "%a,end="")
for j in range(1,len(L1)): 为啥不是 0 开头的
print("%d"%L1[j],end=",")
print("\n")
10.编程,解决猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将
剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到
第 10 天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子。
(迭代法)
参考答案:
day=9
x=1
while day>0:
x=(x+1)*2
day-=1
print("total=",x)
二.文件部分:
1. 在当前目录下有一个文件名为 temp.txt 的文件,存放着上海从 2014 年 3 月
10 日(周一)到 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)):
暂且先只读一行
此处再读第二行
L1[i]=int(L1[i])
L2[i]=int(L2[i])
maxVal=L1[0]
maxDay=0
minVal=L2[0]
minDay=0
for i in range(1,len(L1)):
if L1[i]>maxVal:
可用 max.(L1)
maxVal=L1[i]
maxDay=i
if L2[i]=10:
k+=1
else:
k=0
这还要写吗???
avg=int(sum/len(L3))
print(" 周平均气温为: ",avg)
if k>=5:
print(" 上海这周已入春。 ")
else:
print(" 上海这周未入春。 ")
3.当前目录下有一个文件名为 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=0
sum=0
while (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)
if 90=80:
L2[1]+=1
elif f_score>=70:
L2[2]+=1
elif f_score>=60:
L2[3]+=1
else:
L2[4]+=1
count+=1
sum+=f_score
f2.write(str(f_score)+"\n")
line=(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()
del a[0]
L3=[]
for line in a:
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=0
sum=0
f2=open("score2.txt",'w')
f2.write(" 学号 平均成绩 \n");
for L2 in L3:
if 90=80:
c[1]+=1
elif L2[1]>=70:
c[2]+=1
elif L2[1]>=60:
c[3]+=1
else:
c[4]+=1
count+=1
sum+=L2[1]
f2.write(L2[0]+" "+str(L2[1])+"\n")
f2.close()
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))
4.当前目录下有一个文本文件 sample12.txt ,其内容包含小写字母和大写字母。
请将该文件复制到另一文件 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()