Python基础PTA习题答案

文章目录

  • 一、前言
  • 二、函数题
    • 4-1 jmu-python-函数-找钱
    • 4-2 缩写词
    • 4-3 使用函数求素数和
    • 4-4 使用函数输出指定范围内Fibonacci数的个数
  • 三、编程题
    • 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

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

你可能感兴趣的:(Python,python,开发语言,pat考试)