华东师范大学Python习题选编.docx

上传人:b****7 文档编号:10707217 上传时间:2023-02-22 格式:DOCX 页数:23 大小:36.77KB
下载 相关 举报
华东师范大学Python习题选编.docx_第1页
第1页 / 共23页
华东师范大学Python习题选编.docx_第2页
第2页 / 共23页
华东师范大学Python习题选编.docx_第3页
第3页 / 共23页
华东师范大学Python习题选编.docx_第4页
第4页 / 共23页
华东师范大学Python习题选编.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

华东师范大学Python习题选编.docx

《华东师范大学Python习题选编.docx》由会员分享,可在线阅读,更多相关《华东师范大学Python习题选编.docx(23页珍藏版)》请在冰豆网上搜索。

华东师范大学Python习题选编.docx

华东师范大学Python习题选编

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编程,假设一年期定期利率为3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?

参考代码:

cunkuan=10000#本金10000元

years=0

whilecunkuan<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):

'))

ifscore>100:

grade="输入错误!

"

elifscore>=90:

grade='A'

elifscore>=80:

grade='B'

elifscore>=70:

无需写小于什么什么的因为elif就已经是除了这个之外的了

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(math.sqrt(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(math.sqrt(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(math.sqrt(n)):

ifn%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

forainrange(2,m+1):

s=a

L1=[]

foriinrange(1,a):

ifa%i==0:

s-=i

L1.append(i)

ifs==0:

print("完数:

%d,因子包括:

"%a,end="")

forjinrange(1,len(L1)):

为啥不是0开头的

print("%d"%L1[j],end=",")

print("\n")

10.编程,解决猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想吃时,只剩下一个桃子了。

求第一天共摘多少个桃子。

(迭代法)

参考答案:

day=9

x=1

whileday>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()

foriinrange(len(L1)):

L1[i]=int(L1[i])

L2[i]=int(L2[i])

maxVal=L1[0]可用max.(L1)

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)+"摄氏度")

2.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。

假设在气象意义上,入春标准是连续5天日均气温超过10℃,根据这一周的气象数据是否能判断上海已经入春?

参考答案:

flname="temp.txt"

f=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=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("上海这周未入春。

")

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)

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

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()

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=0

sum=0

f2=open("score2.txt",'w')

f2.write("学号平均成绩\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]

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')

forlineinL1:

f2.write(line.upper())

f.close()

f2.close()

5.当前目录下有一个文件名为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)

print("这个班的数学平均分为:

%4.1f,语文平均分为:

%4.1f"%(avg1,avg2))

defoutput_notpass(L):

print("两门课均不及格的学生学号及数学、语文成绩为:

")

forlineinL:

L1=line.strip().split()

ifint(L1[1])<60andint(L1[2])<60:

print(line)

defoutput_good(L):

print("两门课平均分在90分以上的学生学号及数学、语文成绩为:

")

forlineinL:

L1=line.strip().split()

f_score=round((int(L1[1])+int(L1[2]))/2)

iff_score>=90:

print(line)

f=open("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)!

=0:

L1.append(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:

L1.append(int(num_str))

num_str=input('请输入一个需排序的整数:

')

print('排序后结果:

',bubble(L1))

2.当前目录下有一个文件名为score2.txt的文本文件,存放着某班学生的计算机课成绩,共有学号、总评成绩两列。

请查找最高分和最低分的学生,并在屏幕上显示其学号和成绩。

参考答案:

f=open("score2.txt")

a=f.readlines()

dela[0]

L2=[]

L3=[]

forlineina:

line=line.strip()

L1=line.split()

L2.append(L1[0])

L3.append(L1[1])

f.close()

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]))

3.编程,输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

参考答案:

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:

ifc.isalpha():

letter+=1

elifc.isspace():

space+=1

elifc.isdigit():

digit+=1

else:

other+=1

print("字母数:

%d\n空格数:

%d\n数字数:

%d\n其他字符数:

%d\n"%(letter,space,digit,other))

四.函数部分:

1.写一判素数的函数,在主函数中输入一个整数,调用该函数进行判断并输出结果。

参考答案:

defshushu(n):

importmath

i,w=2,0

ifn<=1:

w=1

whilei<=int(math.sqrt(n))andw==0:

ifn%i==0:

w=1

break

else:

i=i+1

returnw

n=int(input('n='))

ifshushu(n)==0:

print(n,"是素数!

")

else:

print(n,"不是素数!

")

2.当前目录下有一个文件名为score3.txt的文本文件,存放着某班学生的学号和其两门专业课的成绩。

分别用函数实现以下功能:

(1)定义函数function1,计算每个学生的平均分(取整数),并将所有学生的学号和平均分在屏幕上输出。

(函数参数为要读取文件的文件名)

deffunction1(flname):

#函数代码

function1("c:

\\test\\score3.txt")

参考答案:

deffunction1(flname):

f=open(flname)

a=f.readlines()

dela[0]

L3=[]

forlineina:

line=line.strip()

L1=line.split()

avg_score=int((int(L1[1])+int(L1[2]))/2)

L3.append([L1[0],avg_score])

f.close()

print("学号平均分")

forL2inL3:

print(L2[0]+""+str(L2[1]))

(2)定义函数calAvg(),计算某一门课程的平均分(函数参数为某门课成绩对应的列表名,返回值为该门课的平均分)

defcalAvg(L):

#函数代码

f=open("c:

\\test\\score3.txt")

a=f.readlines()

dela[0]

L2=[]

L3=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1