文章目录

  • 一、前言
  • 二、函数题
  • 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<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()
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » Python基础PTA习题答案

    发表评论