Python基础PTA习题答案
文章目录
- 一、前言
- 二、函数题
- 三、编程题
- 1-1 打印菜单
- 1-2 投资小计算
- 1-3 计算钱包有多少零钱?
- 1-4 输入输出练习
- 1-5 计算三角形面积
- 1-6 海洋单位距离的换算
- 1-7 jmu-python-简单四则运算
- 2-1 圆环面积
- 2-2 三年级A班的成绩
- 2-3 企业根据利润提成发放奖金问题
- 2-4 水仙花数
- 2-5 小明今天做什么
- 2-6 美琪花了多少钱
- 2-7 小智是三好学生吗
- 3-1 生成字符串
- 3-2 敏感词替换
- 3-3 刮刮乐
- 3-4 阿福的年龄
- 3-6 重要的事情说N遍
- 3-5 号码牌的制作
- 3-7 你能上学了吗?
- 4-5 定义函数打印餐厅菜单
- 4-6 函数定义计算存款利息
- 4-7 递归函数打印斐波那契数列
- 5-1 身份证校验
- 5-2 中文数字对照表
- 5-3 单词识别
- 5-4 分析活动投票情况
- 5-5 输出字母在字符串中位置索引
- 5-6 图的字典表示
- 6-1 用户类的定义与实例化
- 6-2 用户账户登录功能
一、前言
题目均在PTA平台满分,仅提供一种方法,仅作分享(。・ω・。)
二、函数题
4-1 jmu-python-函数-找钱
买单时,营业员要给用户找钱。营业员手里有10元、5元、1元(假设1元为最小单位)几种面额的钞票,其希望以尽可能少(张数)的钞票将钱换给用户。比如,需要找给用户17元,那么其需要给用户1张10元,1张5元,2张1元。而不是给用户17张1元或者3张5元与2张1元。
def giveChange(money):
a = money//10
b = (money-a*10)//5
c = money-a*10-b*5
print('%d = %d*10 + %d*5 + %d*1' %(money,a,b,c))
4-2 缩写词
缩写词是由一个短语中每个单词的第一个字母组成,均为大写。例如,CPU是短语“central processing unit”的缩写。
def acronym(phrase):
L = phrase.split()
result = ""
for i in L:
result += i[0].upper()
return result
4-3 使用函数求素数和
使用函数求素数和prime( p ), 其中函数prime当用户传入参数p为素数时返回True,否则返回False.
PrimeSum(m,n),函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数1<=m<n。
def prime(p):
if p == 1:
return False
for i in range(2, p):
if p % i == 0:
return False
return True
def PrimeSum(m, n):
sums = 0
for i in range(m, n + 1):
if prime(i) == True:
sums += i
return sums
4-4 使用函数输出指定范围内Fibonacci数的个数
本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目。
所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,fib(0)=fib(1)=1。其中函数fib(n)须返回第n项Fibonacci数;函数PrintFN(m,n)用列表返回[m, n]中的所有Fibonacci数。
def fib(n):
a,b=0,1
for i in range(n+1):
a,b=b,a+b
return a
def PrintFN(m,n):
lst=[]
a,b=0,0
while(True):
if fib(a)<m:
a+=1
if fib(b)<=n:
b+=1
if fib(a)>=m and fib(b)>n:
break
for i in range(a,b):
lst.append(fib(i))
return lst
三、编程题
1-1 打印菜单
请打印出快餐店点餐菜单
print('欢迎光临***快餐店\n1 汉堡 10元\n2 鸡翅 10元\n3 可乐 8元\n4 薯条 8元')
1-2 投资小计算
假设你有100元,现在有一个投资渠道,可以每年获得10%的利息,如此,一年以后将拥有1001.1=110元,两年以后将拥有1001.11.1=121元。请编写程序,计算7年以后,将拥有多少钱?
a=100*1.1**7
print('After 7 years,you will have %.2f.' %a)
1-3 计算钱包有多少零钱?
用户输入1元,5元,10元钱币的个数,计算用户的钱包里有多少零钱,并输出结果。
one=int(input())
five=int(input())
ten=int(input())
print('您的钱包里有%d元' %(one+five*5+ten*10))
1-4 输入输出练习
从键盘读入2个字符串,然后输出。提示使用print函数中的sep和end参数。
str1=input()
str2=input()
print(str1,str2,sep='-',end='!')
1-5 计算三角形面积
已知三角形边长度分别为 x、y、z,其半周长为 ,其半周长为 q,根据海伦公式计算三角形面积 S。
三角形半周长和面积公式分别如下所示:
三角形半周长 q=(x+y+z)/2
三角形面积 S = (q*(q-x)(q-y)(q-z))**0.5
本实例要求编写程序 ,实现接收用户输入的三角形边长,计算三角形面积功能 。
a=int(input())
b=int(input())
c=int(input())
q=(a+b+c)/2
squre=(q*(q-a)*(q-b)*(q-c))**0.5
print('三角形的面积为%.1f' %squre)
1-6 海洋单位距离的换算
在陆地上可以使用参照物确定两点间的距离,使用厘米、米、公里等作为计量单位,而海上缺少参照物,人们将赤道上经度的一分对应的距离记为一海里,使用海里做为海上计量单位。公里与海里可以通过以下公式换算:
海里 = 公里 / 1.852
本实例要求编写程序,输入一个以公里为单位的数值,根据公里与海里的换算规则,输出以海里为单位时对应的数值,保留小数点后1位小数。
n1=float(input())
print('换算后的海里数为%.1f海里' %(n1/1.852))
1-7 jmu-python-简单四则运算
本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。
num1=int(input())
num2=int(input())
print('%d + %d = %d' %(num1,num2,num1+num2))
print('%d - %d = %d' %(num1,num2,num1-num2))
print('%d * %d = %d' %(num1,num2,num1*num2))
print('%d / %d = %d' %(num1,num2,num1//num2))
2-1 圆环面积
环可以看作一大一小两个圆,以圆心为基准叠加在一起,形成的形状。
小李想要有一个小工具,可以帮助他非常方便的计算出圆环的面积。他只需要分别输入圆的半径,就可以得到圆环的面积了。
提示:Π的值使用3.14来做计算,最终结果保留两位小数。
r1=float(input())
r2=float(input())
square=abs((r2**2-r1**2)*3.14)
print('%.2f' %square)
2-2 三年级A班的成绩
又到了期末考试的时候,三年A班的数学老师想要把班上的考试情况统计一下。三年A班不超过30个学生,数学老师依次输入每个同学的成绩。最后,想要得到班上的数学平均成绩。当输入成绩大于0时,可以继续输入成绩,如果输入一个负数,就表明停止输入成绩。
sum=0
cnt=0
while True:
score=float(input())
if score<0:
break
sum+=score
cnt+=1
average=sum/cnt
print('%.2f' %average)
2-3 企业根据利润提成发放奖金问题
企业根据利润提成发放奖金问题。利润高于或等于0万元,低于或等于10万元时,奖金可提10%;利润高于10万元,低于或等于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%; 高于100万元时,超过100万元的部分按1%提成。从键盘输入当月利润,求应发放奖金总数?
wealth=float(input())
if wealth>=0 and wealth<=1E+5:
money=0.1*wealth
elif wealth<=2E+5:
money=1E+4+0.075*(wealth-1E+5)
elif wealth<=4E+5:
money=(1E+4)+0.075*(1E+5)+0.05*(wealth-2E+5)
elif wealth<=6E+5:
money=(1E+4)+0.075*(1E+5)+0.05*(2E+5)+0.03*(wealth-4E+5)
elif wealth<=1E+6:
money=(1E+4)+0.075*(1E+5)+0.05*(2E+5)+0.03*(2E+5)+0.015*(wealth-6E+5)
elif wealth>1E+6:
money=(1E+4)+0.075*(1E+5)+0.05*(2E+5)+0.03*(2E+5)+0.015*(4E+5)+0.01*(wealth-1E+6)
print('%.1f' %money)
2-4 水仙花数
水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
可以使用变量a、b、c分别代表该三位数i的百位、十位、个位。则a=i//100,c=i%10。
num=100
while num<1000:
if(((num//100)**3+(num%100//10)**3+(num%10)**3)==num):
print(num)
num+=1
2-5 小明今天做什么
小明是一个巨纠结的人,他需要一个程序帮他来决定今天要做什么。请输入今天星期的数字(1-7分别代表星期一到星期日),如果为周一至周五,则输出“好好学习!”,如果为周末,则输出“出去Happy!”
输入格式:输入星期的数字(1-7分别代表星期一到星期日)
输出格式:如果为周一至周五,则输出“好好学习!”,如果为周末,则输出“出去Happy!”
输入样例:1
输出样例:好好学习!
输入样例:7
输出样例:出去Happy!
day=int(input())
if day>=1 and day<=5:
print('好好学习!')
elif day==6 or day==7:
print('出去Happy!')
2-6 美琪花了多少钱
美琪最喜欢做的事情是买买买。在巨能买商场购物,有以下结算规则:
若购物金额在500以下,则付款金额即为购物金额;
若购物金额在500~1000,则付款金额为购物金额的92折;
若购物金额在1000~10000,则付款金额为购物金额的8折;
若购物金额在10000以上,则付款金额为购物金额的7折。
现输入今天美琪的购物金额,请显示美琪的付款金额为多少(保留两位小数)。
buy=float(input())
if buy<=500:
pay=buy
elif buy<=1000:
pay=0.92*buy
elif buy<=10000:
pay=0.8*buy
elif buy>10000:
pay=0.7*buy
print('%.2f' %pay)
2-7 小智是三好学生吗
“真美好”学校要评选三好学生。三好学生的评选条件是,语数外三门课程均要及格,并且三门课程的平均成绩为80分以上。现需要一个小程序可以帮忙判断小智是否是三好学生。现需要按照以下要求完成该小程序:
(1) 程序的输入要求为,输入必须为数字,若为其他字符,显示“请重新输入!”
(2)输入的分数必须在0-100之间,若不在该区间,则显示“请输入0~100之间的数字!”
(3)输入三个符合要求的分数后,得到平均分,并判断是否是三好学生,显示平均分及判断结果。
def is_number(list):
try:
for i in range(3):
list[i]=int(list[i])
except:
print('请重新输入!')
return 0
return 1
while 1:
list=input().split()
if is_number(list):
if(0<=list[0]<=100 and 0<=list[1]<=100 and 0<=list[2]<=100):
aver=(list[0]+list[1]+list[2])/3
if(aver>=80 and list[0]>=60 and list[1]>=60 and list[2]>=60):
print('平均分:{:.1f},是三好学生!'.format(aver))
break
else:
print('平均分:{:.1f},不是三好学生!'.format(aver))
break
print('请输入0~100之间的数字!')
else:
break
3-1 生成字符串
完成一个Python程序,要求由用户输入一段英文文本,程序返回由该段文本中的前两个和后两个字符组成的新的字符串。如果给定的文本长度少于2,那么返回“Empty String”。
str=input()
if len(str)<2:
print('Empty String')
else:
print(str[:2]+str[-2:])
3-2 敏感词替换
敏感词是指带有敏感政治倾向、暴力倾向、不健康色彩的词或不文明的词语。大部分网站、论坛、社交软件都会使用敏感词过滤系统,考虑到该系统的复杂性,这里使用字符串中的 replace()方法模拟敏感词过滤,将含有敏感词的语句使用“*”符号进行替换。本实例要求编写程序,实现替换语句中敏感词功能。
list=input() #敏感词
str=input() #文字
for i in str:
if i in list:
str=str.replace(i,'*')
print(str)
3-3 刮刮乐
刮乐的玩法多种样,彩民只要去上银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖 区,每个兑奖区对应着不同的获奖信息,包括“一等奖”、“二等奖”、”三等奖“和“谢谢惠顾”。假设现在有一张刮刮乐,该卡片上面共有8个刮奖区,每个刮奖区对应的兑奖信息为“谢谢惠顾”、“一等奖”、“三等奖”、“谢谢惠顾”、“谢谢惠顾”、“三等奖”、“二等奖”、“谢谢惠顾”,大家只能刮开其中一个区域。请编程实现模拟刮刮乐刮奖的过程。输入1-8之间的数字,输出对应的兑奖信息。输入其他的数字,输出error。
dic={'1':'谢谢惠顾','2':'一等奖','3':'三等奖','4':'谢谢惠顾','5':'谢谢惠顾','6':'三等奖','7':'二等奖','8':'谢谢惠顾'}
num=input()
if num in dic.keys():
print(dic.get(num))
else:
print('error')
3-4 阿福的年龄
公元2080的某一天,是阿福生日。大家要给阿福准备生日蜡烛,需要多少?这得看阿福的年龄。还好你有阿福的身份证号码,来算吧~
str=input()
birthday=int(str[6:10])
print(2080-birthday)
3-6 重要的事情说N遍
对重要的事情,阿福老师会反复说N多遍。
提示:用字符串 * 和 +
word=input()
times=int(input())
print((word+'!')*times)
3-5 号码牌的制作
打印一个号码牌。号码牌由边框和号码构成,组成边框的字符分为角落字符,水平字符和垂直字符。
输入格式:
输入一个字符(如:±|2008161876)串,字符串的前三个字符分别代表组成边框的角落字符,水平字符和垂直字符,从第四个字符开始到最后表示号码数字。
输出格式:
打印出由边框包围的号码
num=input()
times=len(num)-3
print(num[0]+num[1]*times+num[0])
print(num[2]+num[3:]+num[2])
print(num[0]+num[1]*times+num[0])
3-7 你能上学了吗?
根据相关规定,当年8月31日之前年满6周岁的儿童可以报名上小学。现在需要根据身份证号审核儿童是否具有报名资格。
输入格式:
第一行输入一个整数n,表示报名儿童人数;后面每行输入一个儿童的18位身份证号。
输出格式:
每行输出相应儿童的审核结果,若该儿童截至今年8月31日年满6周岁则具备报名资格,输出“YES”,否则输出"NO"。最后一行分别输出通过审核和未通过审核的人数。
num=int(input())
pass_num=0
for i in range(num):
id=input()
date=id[6:14]
date_int=int(date)
if(date_int<=20140831):
print('YES')
pass_num+=1
else:
print('NO')
print('Pass: %d; Fail: %d' %(pass_num,num-pass_num))
4-5 定义函数打印餐厅菜单
定义函数menu(),能打印出菜品的编号、名字、价格以及口味的信息。
该函数调用形式:
menu(1,“鱼香肉丝”,25.0,“甜酸辣”)
def menu(num,name,price,taste):
print(num)
print(name)
print(price)
print(taste)
menu(1,"鱼香肉丝",25.0,"甜酸辣")
menu(2,"番茄鸡蛋",17.0,"酸甜")
4-6 函数定义计算存款利息
编写lixi(money,year,rate)函数计算存款利息,money代表存款金额,year代表存款年限,rate代表年利率。
已知银行存款利息计算公式:
总金额=存款金额*(1+年利率)**存款年限
注意:lixi函数仅完成利息的计算,不完成数据的输入和输出。
money=float(input())
year=int(input())
rate=float(input())
print('%.2f元存款%d年后,您可以获得%.2f元利息' %(money,year,(money*(1+rate)**year-money)))
4-7 递归函数打印斐波那契数列
斐波那契数列又称为兔子数列, 因数学家昂纳多·斐波那契以兔子繁殖为例子引入, 这个数列中的据满足以下公式:
F(1)=1, F(2)=1, F(n)= F(n-1) + F(n-2) (n>=3,n∈N*)
本实例要求编写程序,现根据用户输入的数字出斐波那契列功能。
分析:
根据实例描述中的公式,可以定义一个递归函数 根据实例描述中的公式,可以定义一个递归函数fibonacci (n),该函数中 n表示斐波那契数,边界条件为 n=1或 n=2,递归公式为 fibonacci(n -1)+ fibonacci(n -2) 。
def fibonacci(n):
if (n==1 or n==2):
return 1
if n>=3:
return (fibonacci(n-1)+fibonacci(n-2))
n=int(input())
for i in range(n):
print(fibonacci(i+1),end=' ')
5-1 身份证校验
根据GB 11643-1999中有关公民身份号码的规定,我国公民身份证有18位,最后1位是由前17位数字按照一系列计算得到的校验码。一个身份证号码的前17位按照一系列计算得到的校验码若与该身份证号码的最后一位相同(身份证号码中最后一位X是罗马数字,代表阿拉伯数字10),说明该身份证号码是正确的身份证号码,否则是错误的身份证号码。校验码计算方法如下:
第一步:从第一位到第17位的系数分别是(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)。将身份证号码前17位数字按顺序分别乘以上述系数并相加。
第二步:将上步加得的和除以11取余数
第三步:使用(12-余数)%11计算得到验证码。
编程实现:输入一个身份证号码,按上述说明计算得到验证码,与输入的身份证号码的最后一位比对,输出判断结果。
id=input()
id_cut=id[:-1]
last=id[-1]
sum=0
paramas=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
all=zip(id_cut,paramas)
for i,j in all:
sum+=int(i)*int(j)
left=sum%11
code=(12-left)%11
if last == 'X':
last=10
if int(last) == code:
print('这是一个正确的身份证号码')
else:
print('这是一个错误的身份证号码')
5-2 中文数字对照表
阿拉伯数字因其具有简单易写、方便使用的特点成为了最流行的数字书写方式,但在使用阿拉伯数字计数时,可以对某些数字不漏痕迹地修改为其它数字。例如,将“3”修改为 “8”。为了避免引起不必要的麻烦,可以使用中文大写数字(如壹、贰)替换阿拉伯数字。替换规则如下图所示。要求编写程序,实现将输入的阿拉伯数字转换为中文大写数字的功能。
d={'0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖'}
enter=input()
for i in enter:
t=d.get(i)
print(t,end='')
5-3 单词识别
周一到周日的英文依次为:monday、tuesday、wednesday、thursday、friday、saturday和sunday。这些单词的首字母基本都不相同,在这7个单词的范围之内,通过第一或前两个字母即可判断对应的是哪个单词。
本题目要求编写程序,实现根据第一或前两个字母输出monday、tuesday、wednesday、thursday、friday、saturday和sunday之中完整单词的功能。如果输入的字符不正确,则输出“请输入正确字符”。
week={'m':'monday','e':'tuesday','w':'wednesday','f':'friday','a':'saturday','h':'thursday','u':'sunday'}
letter_1=input()
if(letter_1!='m' and letter_1!='t' and letter_1!='w' and letter_1!='f' and letter_1!='s'):
print('请输入正确字符')
else:
if(week.get(letter_1)==None):
letter_2=input()
if(letter_1=='t' and letter_2=='u'):
t=week['e']
elif(letter_1=='t' and letter_2=='h'):
t=week['h']
elif(letter_1=='s' and letter_2=='a'):
t=week['a']
else:
t=week['u']
else:
t=week[letter_1]
print(t)
5-4 分析活动投票情况
利用集合分析活动投票情况。第一小队有五名队员,序号是1,2,3,4,5;第二小队也有五名队员,序号6,7,8,9,10。输入一个得票字符串,求第二小队没有得票的队员
n = list(map(int, input().split(',')))
s = []
for i in range(6, 11):
if i not in n:
s.append(i)
print(*s, sep=' ')
5-5 输出字母在字符串中位置索引
输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。
s=input()
m,n=input().split()
for i in range(len(s)-1,-1,-1):
if s[i]==m:
print("%d %s"%(i,m))
if s[i]==n:
print("%d %s"%(i,n))
5-6 图的字典表示
图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:
{‘O’:{‘A’:2,‘B’:5,‘C’:4}}。用eval函数处理输入,eval函数具体用法见第六章内置函数。
n=int(input())
num=0
sum=0
for i in range(n):
dic=eval(input())
for j in dic:
temp=dic[j]
for key in temp:
num+=1
sum+=temp[key]
print("{:d} {:d} {:d}".format(n,num,sum))
6-1 用户类的定义与实例化
创建一个名为User的类,其中包含属性first_name,last_name,phone,在类User中定义一个名为describe_user()的方法,
它打印用户信息摘要,在定义一个名为greet_user()的方法,它向用户发出个性化问候。
User类实例化及方法调用代码如下:
user1=User(‘hua’,‘Zhang’,17262717727)
user1.describe_user()
user1.greet_user()
class User:
def __init__(self,first_name,last_name,phone):
self.first_name=first_name
self.last_name=last_name
self.phone=phone
def describe_user(self):
print('个人信息:\n{}\n{}\n{}'.format(self.first_name,self.last_name,self.phone))
def greet_user(self):
print('问候:\nHello!!!{}{}'.format(self.last_name,self.first_name))
user1=User('hua','Zhang',17262717727)
user1.describe_user()
print()
user1.greet_user()
6-2 用户账户登录功能
创建一个名为User的类,其中包含属性用户名uname和密码upass,在类User中定义一个名为login()的方法,
它可以实现用户账户登录验证,用户名和密码都正确,提示“登陆成功!”,当用户名不正确时,提示“用户名不正确!”,
当密码不正确时,提示“密码不正确!”。
所有用户名和密码存放在一个字典dt中:
dt={‘Alice’:‘a123’,‘Mike’:‘good’,‘John’:‘456’,‘Kate’:‘ktt’}
User类实例化及方法调用代码如下:
uname=input(“”)
upass=input(“”)
user1=User(uname,upass)
user1.login()
dt={'Alice':'a123','Mike':'good','John':'456','Kate':'ktt'}
class User:
def __init__(self,uname,upass):
self.uname=uname
self.upass=upass
def login(self):
if (self.uname) in dt.keys():
if(self.upass) in dt.values():
print('登陆成功!')
else:
print('密码不正确!')
else:
print('用户名不正确!')
uname=input("")
upass=input("")
user1=User(uname,upass)
user1.login()
更多推荐
所有评论(0)