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:
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.输入一个时间(小时:
分钟:
秒),输出该时间经过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
L1。
append(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.在当前目录下有一个文件名为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=0
minVal=L2[0]
minDay=0
foriinrange(1,len(L1)):
ifL1[i]〉maxVal:
maxVal=L1[i]
maxDay=i
ifL2[i]〈minVal:
minVal=L2[i]
minDay=i
print("这周第”+str(maxDay+1)+”天最热,最高"+str(maxVal)+”摄氏度”)
print(”这周第”+str(minDay+1)+”天最冷,最低"+str(minVal)+"摄氏度")
3.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。
假设在气象意义上,入春标准是连续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(”上海这周未入春。
")
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)
if90L2[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:
if90c[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))
5.当前目录下有一个文本文件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()
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)
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))
上述两个程序算法的时间复杂度均为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
List。
append(a)
whileb〈=n:
List。
append(b)
a,b=b,a+b
n=int(input('n=’))
L1=[]
fib(n,L1)
print(L1)
算法的时间复杂性为O(n)
3.当前目录下有一个文件名为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]))
时间复杂度为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:
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))
2.小王希望用电脑记录他每天掌握的