Python习题选编版Word下载.docx
- 文档编号:222596
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:26
- 大小:49.14KB
Python习题选编版Word下载.docx
《Python习题选编版Word下载.docx》由会员分享,可在线阅读,更多相关《Python习题选编版Word下载.docx(26页珍藏版)》请在冰点文库上搜索。
if((year%4==0andyear%100!
=0)or(year%400==0)):
print(year,"
isaleapyear."
else:
isnotaleapyear."
5.用Python编程,假设一年期定期利率为3.25%,计算一下需要过
多少年,一万元的一年定期存款连本带息能翻番?
参考代码:
cunkuan=10000#本金10000元years=0
whilecunkuan<
20000:
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):
'
))ifscore>
100:
grade="
输入错误!
elifscore>
=90:
grade='
=80:
=70:
C'
=60:
D'
=0:
print(grade)
7.猜数游戏。
预设一个0~9之间的整数,让用户猜一猜并输入所猜的数,如果大于预设的数,显示“太大”;
小于预设的数,显示“太小”,如此循环,直至猜中该数,显示“恭喜!
你猜中了!
”。
num=7
whileTrue:
guess=int(input('
请输入你猜的数(0〜9):
ifguess==num:
恭喜!
break;
elifguess>
num:
太大"
太小"
8.输入一个数,判断这个数是否为素数,并输出判断结果。
(所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。
下
图为参考流程图)
ZT
]柿“I
n斤的金数耳丁
(缩車)
importmath
n=int(input(”请输入一个数:
x=int(math.sqrt(n))
i,w=2,0
foriinrange(2,x+1):
ifn%i==0:
w=1
ifw==1:
print(n,"
不是素数。
print(n,"
是素数。
或
n=int(input('
请输入一个数:
))i,w=2,0
whilei<
=int(math.sqrt(n))andw==0:
ifn%i==0:
w=1
break
i=i+1
ifw==0:
是素数!
不是素数!
importmathn=int(input('
请输入一个数:
'
))i=2
=int(math.sqrt(n)):
ifn%i==0:
)breakelse:
i=i+1
9.输入一个时间(小时:
分钟:
秒),输出该时间经过5分30秒后的时间。
参考答案:
hour,minute,second=input('
请输入一个时间(h:
m:
s):
).split('
:
)hour=int(hour)minute=int(minute)second=int(second)
second+=30ifsecond>
second=second-60
minute+=1
minute+=5ifminute>
minute=minute-60
hour+=1ifhour==24:
hour=0print('
%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
L1.append(i)
ifs==0:
完数:
%d,因子包括:
%a,end="
forjinrange(1,len(L1)):
%d"
%L1[j],end="
"
\n"
11.编程,解决猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想吃时,只剩下一个桃子了。
求第一天共摘多少个桃子。
(迭代法)
day=9
x=1
whileday>
0:
x=(x+1)*2
day-=1
total="
二.输入输出与文件部分:
1.编写一个python程序,输入两个数,输出两数之和。
x=int(input("
Pleaseenterfirstinteger:
y=int(input("
Pleaseentersecondinteger:
Thesumis:
);
print(x+y);
2.在当前目录下有一个文件名为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()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=i
ifL2[i]<
minVal:
minVal=L2[i]minDay=i
这周第"
+str(maxDay+1)+吠最热,最高"
+str(maxVal)+'
摄氏度"
)print("
+str(minDay+1)+"
天最冷,最低"
+str(minVal)+"
3.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。
假设在气象意义上,入春标准是连续5天日均气温超过10C,根据这一
周的气象数据是否能判断上海已经入春?
flname="
))f.close()
L3=[]
foriinrange(len(L1)):
L2[i]=int(L2[i])
L3.append(int((L1[i]+L2[i])/2))
sum=0k=0foriinrange(len(L3)):
sum=sum+L3[i]
ifL3[i]>
=10:
k+=1
k=0
avg=int(sum/len(L3))
周平均气温为:
avg)
ifk>
=5:
上海这周已入春。
上海这周未入春。
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=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)
if90<
f_score<
=100:
L2[0]+=1
eliff_score>
=80:
L2[1]+=1
=70:
L2[2]+=1
=60:
L2[3]+=1
L2[4]+=1
count+=1
sum+=f_score
f2.write(str(f_score)+"
line=(f.readline()).strip()
f.close()
f2.close()
avg_score=int(sum/count)
学生总人数为%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))
a=f.readlines()
dela[0]
forlineina:
line=line.strip()
L3.append([L1[0],f_score])
c=[0,0,0,0,0]
f2=open("
,'
f2.write("
forL2inL3:
L2[1]<
c[0]+=1
elifL2[1]>
c[1]+=1
c[2]+=1
c[3]+=1
c[4]+=1
sum+=L2[1]
f2.write(L2[0]+"
+str(L2[1])+"
学生总人数为%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.当前目录下有一个文本文件sample12.txt,其内容包含小写字母和大写字母。
请将该文件复制到另一文件sample12_copy.txt,并将原文件中的小写字母全部转换为大写字母,其余格式均不变。
sample12.txt"
L1=f.readlines()
sample12_copy.txt"
forlineinL1:
f2.write(line.upper())
6.当前目录下有一个文件名为class_score.txt的文本文件,存放着某班学生的学号、数学课成绩(第2列)和语文课成绩(第3列)。
请编程完成下列要求:
(1)分别求这个班数学和语文的平均分(保留1位小数)并输出。
(2)找出两门课都不及格(<
60)的学生,输出他们的学号和各科成绩。
(3)找出两门课的平均分在90分以上的学生,输出他们的学号和各科成绩。
建议用三个函数分别实现以上要求。
defoutput_avg(L):
sum1,sum2=0,0
forlineinL:
L1=line.strip().split()
sum1+=int(L1[1])
sum2+=int(L1[2])
count=len(L)
avg1=round(sum1/count,1)
avg2=round(sum2/count,1)
这个班的数学平均分为:
%4.1f,语文平均分为:
%4.1f"
%(avg1,avg2))
defoutput_notpass(L):
两门课均不及格的学生学号及数学、语文成绩为:
ifint(L1[1])<
60andint(L1[2])<
60:
print(line)
defoutput_good(L):
两门课平均分在90分以上的学生学号及数学、语文成绩为:
f_score=round((int(L1[1])+int(L1[2]))/2)
iff_score>
=90:
class_score.txt"
)L=f.readlines()
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)!
L1.append(int(num_str))num_str=input('
print('
排序后结果:
bubble(LI))或
冒泡排序:
foriinrange(0,len(List)-1):
forjinrange(len(List)-1,i,-1):
ifList[j-1]>
List[j-1],List[j]=List[j],List[j-1]returnList
L1.append(int(num_str))
num_str=input('
bubble(LI))
上述两个程序算法的时间复杂度均为O(n2).
2.从键盘接收一个正整数n,输出对应斐波那契(Fibonacci)数列的前n项(计算数列中某项的值请用递归函数实现)。
另外,请指出所用算法的复杂度。
有能力的同学还可进一步改进算法的效率。
deffib(n):
ifn==0orn==1:
returnn
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,1List.append(a)whileb<
=n:
List.append(b)
a,b=b,a+bn=int(input('
))L1=[]fib(n,L1)print(L1)算法的时间复杂性为O(n)
3.当前目录下有一个文件名为score2.txt的文本文件,存放着某班学生的计算机课成绩,共有学号、总评成绩两列。
请查找最高分和最低分的学生,并在屏幕上显示其学号和成绩。
L2=[]
L2.append(L1[0])
L3.append(L1[1])
f.close()maxScore=L3[0]maxIndex=0minScore=L3[0]minIndex=0foriinrange(1,len(L3)):
ifL3[i]>
maxScore:
maxScore=L3[i]maxIndex=iifL3[i]<
minScore:
minScore=L3[i]minIndex=i
最高分为:
+str(maxScore)+"
分,该学生学号为:
+str(L2[maxIndex]))print("
最低分为:
+str(minScore)+"
+str(L2[minIndex]))时间复杂度为O(n).
四.数据结构部分:
1.编程,输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
letters,space,digit,other=0,0,0,0s=input("
请输入一行字符:
)foriinrange(len(s)):
if(s[i]>
='
a'
ands[i]<
z'
)or(s[i]>
Z'
):
letters+=1
elifs[i]=='
space+=1
elifs[i]>
0'
9'
digit+=1
other+=1
字母数:
%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<
andi>
)or(i<
)):
a+=1
elif(i=='
b+=1
elif(i>
andi<
c+=1
d+=1
print('
英文字母的个数为:
+str(a))
空格的个数为:
+str(b))
数字的个数为:
+str(c))
其他字符的个数为:
+str(d))
letter,space,digit,other=0,0,0,0
s=input('
inputastring:
forcins:
ifc.isalpha():
letter+=1
elifc.isspace():
space+=1
elifc.isdigit():
digit+=1
other+=1
%d\n其他字符数:
%(letter,space,digit,other))
2.小王希望用电脑记录他每天掌握的英文单词。
请设计程序和相应的数据结构,使小王能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 习题 选编