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编程,假设一年期定期利率为%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
参考代码:
cunkuan=10000#本金10000元
years=0
whilecunkuan<20000:
years+=1
cunkuan=cunkuan*(1+
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(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(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(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
(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.在当前目录下有一个文件名为的文件,存放着上海从2014年3月10日(周一)到3月16日(周日)间一周的最高和最低气温(单位为摄氏度)。
其中,第一行为最高气温,第二行为最低气温。
编程,找出这一周中第几天最热(按最高气温计算)?
最高多少度?
这一周中第几天最冷(按最低气温计算)?
最冷多少度?
参考答案:
flname=""
f=open(flname)
ht=()).strip()
L1=list(','))
lt=()).strip()
L2=list(','))
()
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=L2[i]
minDay=i
print("这周第"+str(maxDay+1)+"天最热,最高"+str(maxVal)+"摄氏度")
print("这周第"+str(minDay+1)+"天最冷,最低"+str(minVal)+"摄氏度")
3.在上题的基础上,求出全周的平均气温(这一周各天平均温度的平均值,取整数)。
假设在气象意义上,入春标准是连续5天日均气温超过10℃,根据这一周的气象数据是否能判断上海已经入春?
参考答案:
flname=""
f=open(flname)
ht=()).strip()
L1=list(','))
lt=()).strip()
L2=list(','))
()
L3=[]
foriinrange(len(L1)):
L1[i]=int(L1[i])
L2[i]=int(L2[i])
(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.当前目录下有一个文件名为的文本文件,存放着某班学生的计算机课成绩,共有学号、平时成绩、期末成绩三列。
请根据平时成绩占40%,期末成绩占60%的比例计算总评成绩(取整数),并分学号、总评成绩两列写入另一文件。
同时在屏幕上输出学生总人数,按总评成绩计90以上、80~89、70~79、60~69、60分以下各成绩档的人数和班级总平均分(取整数)。
参考答案:
f=open("")
a=()
line=()).strip()
f2=open("",'w')
("学号平均成绩\n");
L2=[0,0,0,0,0]
count=0
sum=0
while(len(line)!
=0):
#print(line)
L1=()
(L1[0]+"")
f_score=int(int(L1[1])*+int(L1[2])*
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
(str(f_score)+"\n")
line=()).strip()
()
()
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("")
a=()
dela[0]
L3=[]
forlineina:
line=()
L1=()
f_score=int(int(L1[1])*+int(L1[2])*
([L1[0],f_score])
()
c=[0,0,0,0,0]
count=0
sum=0
f2=open("",'w')
("学号平均成绩\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]
(L2[0]+""+str(L2[1])+"\n")
()
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.当前目录下有一个文本文件,其内容包含小写字母和大写字母。
请将该文件复制到另一文件,并将原文件中的小写字母全部转换为大写字母,其余格式均不变。
参考答案:
f=open("")
L1=()
f2=open("",'w')
forlineinL1:
())
()
()
6.当前目录下有一个文件名为的文本文件,存放着某班学生的学号、数学课成绩(第2列)和语文课成绩(第3列)。
请编程完成下列要求:
(1)分别求这个班数学和语文的平均分(保留1位小数)并输出。
(2)找出两门课都不及格(<60)的学生,输出他们的学号和各科成绩。
(3)找出两门课的平均分在90分以上的学生,输出他们的学号和各科成绩。
建议用三个函数分别实现以上要求。
参考答案:
defoutput_avg(L):
sum1,sum2=0,0
forlineinL:
L1=().split()
sum1+=int(L1[1])
sum2+=int(L1[2])
count=len(L)
avg1=round(sum1/count,1)
avg2=round(sum2/count,1)
print("这个班的数学平均分为:
%,语文平均分为:
%"%(avg1,avg2))
defoutput_notpass(L):
print("两门课均不及格的学生学号及数学、语文成绩为:
")
forlineinL:
L1=().split()
ifint(L1[1])<60andint(L1[2])<60:
print(line)
defoutput_good(L):
print("两门课平均分在90分以上的学生学号及数学、语文成绩为:
")
forlineinL:
L1=().split()
f_score=round((int(L1[1])+int(L1[2]))/2)
iff_score>=90:
print(line)
f=open("")
L=()
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:
(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:
(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
(a)
whileb<=n:
(b)
a,b=b,a+b
n=int(input('n='))
L1=[]
fib(n,L1)
print(L1)
算法的时间复杂性为O(n)
3.当前目录下有一个文件名为的文本文件,存放着某班学生的计算机课成绩,共有学号、总评成绩两列。
请查找最高分和最低分的学生,并在屏幕上显示其学号和成绩。
另外,请指出所用算法的复杂度。
参考答案:
f=open("")
a=()
dela[0]
L2=[]
L3=[]
forlineina:
line=()
L1=()
(L1[0])
(L1[1])
()
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:
if():
letter+=1
elif():
space+=1
elif():
digit+=1
else:
other+=1
print("字母数:
%d\n空格数:
%d\n数字数:
%d\n其他字符数:
%d\n"%(letter,space,digit,other))
2.小王希望用电脑记录他每天掌握的英文单词。
请设计程序和相应的数据结构,使小王能记录新学的英文单词和其中文翻译,并能很方便地根据英文来查找中文。
(参考:
数据结构建议用集合。
集合添加:
dic[key]=value判断key是否在集合中:
ifkeyindic)。
参考答案:
defadd_dic(dic):
whileTrue:
word=input("请输入英文单词(直接按回车结束):
")
iflen(word)==0:
break;
meaning=input("请输入中文翻译:
")
dic[word]=meaning
print("该单词已添加到字典库。
")
return
defsearch_dic(dic):
whileTrue:
word=input("请输入要查询的英文单词(直接按回车结束):
")
iflen(word)==0:
break;
ifwordindic:
print("%s的中文翻译是%s"%(word,dic[word]))
else:
print("字典库中未找到这个单词")
return
worddic=dict()
whileTrue:
print("请选择功能:
\n1:
输入\n2:
查找\n3:
退出")
c=input()
ifc=="1":
add_dic(worddic)
elifc=="2":
search_dic(worddic)
elifc=="3":
break
else:
print("输入有误!
")
五.异常处理部分:
1.以下是两数