200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析⑤

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析⑤

时间:2021-11-06 00:25:17

相关推荐

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析⑤

大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!!

本次为师傅们带来的是“红亚杯”Python编程专题赛——满分解析系列的第⑤期,是“Python综合编程”篇章哦!

第①期完整赛题、第②期Python基础编程(1)、第③期Python基础编程(2)和第④期Python基础编程(3)的链接在下面,师傅们想看完整赛题、Python基础编程(1)、Python基础编程(2)、Python基础编程(3)的请安心享用:

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析①_爱波吉的阿尼亚的博客-CSDN博客

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析②_爱波吉的阿尼亚的博客-CSDN博客

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析③_爱波吉的阿尼亚的博客-CSDN博客

【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析④_爱波吉的阿尼亚的博客-CSDN博客

目录

Python综合编程

九九乘法表

手机号分类

人民币大小写切换

查找关系密切的组合

根据身份证号计算退休年龄

Python综合编程

Python综合编程:主要是涉及Python综合应用能力,通过训练可以使学生根据实际工作中的问题,通过编程方式完成工作任务,共计5项综合任务。

环境中已安装python3.6.8,可使用python或python3即可查看;

环境中已经安装基础的依赖库,可使用pip list进行查看,也可自行下载;

推荐使用本地环境(选手电脑)上的VsCode ssh-remote插件连接主机;

九九乘法表

学习编程,循环是必备能力之一,本题需要使用while循环结构编写程序打印九九乘法表(正三角),请你按程序文件的注释,将Python代码补充完整。

要求如下:

代码保存地址为:/root/python2/form.py,补全代码;

使用占位符%对十进制整数进行结果格式化输出,要求整型占位符宽度为2,默认右对齐方式输出,使用end关键字在每个计算结尾处添加空格;

满足循环条件,则执行程序,更新变量循环参数,否则结束循环;

请你按程序文件的注释,将Python代码补充完整,运行程序,输出的结果。输出的结果形式如下:

1*1= 1

1*2= 2 2*2= 4

1*3= 3 2*3= 6 3*3= 9

1*4= 4 2*4= 8 3*4=12 4*4=16

1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25

1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

考核条件如下:

1. 编写程序,判断程序文件中是否涉及指定数据及知识点,验证程序结果是否正确。

操作环境: python

# -*- coding:utf-8 -*-i=1while i<10:j=1while j<=i:print("%d*%d=%2d"%(i,j,i*j),end=' ')j+=1print("")i+=1

手机号分类

项目背景:

某学校要统计所有学生手机号为哪些运营商的情况,手工统计非常耗时。请你按程序文件的注释,将Python代码补充完整,使用程序完成统计任务,运行程序并输出结果。

选手须知:

1.了解三大运营商的号段分布;

a)中国联通:130,131,132,155,156,185,186,145,176

b)中国移动:134, 135 , 136, 137, 138, 139, 147, 150, 151,152, 157, 158, 159, 178, 182, 183, 184, 187, 188

c)中国电信:133,153,189

2.判断手机号是否合法,依次按照长度(11位)、字符(只包含数字)、号段进行判断归类,若一个手机号长度和字符都不合法,按照顺序,需要将其划分到长度不合法里面;

3.判断手机号是否重复;

4.根据给定的学生信息进行手机号数据文件导入;

5.运行后输出格式为:移动数量为?个,联通数量为?个,电信数量为?个,长度不合法数量为?个,号段不合法数量为?个,字符不合法为?个。(英文字符)

6.代码保存地址为:/root/python2/phone.py,要求使用元素索引判定phone_prefix中号段是否合法;

7.数据文件地址为:/root/python_data/phone.txt

考核条件如下:

1. 编写程序,判断程序文件中是否涉及指定数据及知识点,验证程序结果是否正确。

操作环境: python

cm = 0 # 中国移动cu = 0 # 中国联通ct = 0 # 通过电信lenerr = 0 # 长度不合法preerr = 0 # 号段不合法digiterr = 0 # 字符不合法# 字段phone_prefix = ['130','131','132','155','156','185','186','145','176','134','135','136','137','138','139','147','150','151','152','157','158','159','178','182','183','184','187','188','133','153','189']with open('/root/python_data/phone.txt','r') as file: phone_list = file.readlines() # 读取数据plist=[]for phone_num in phone_list: # 补充代码,确认手机号是否合法,依次判断长度,字符(纯数字),号段phone_num=phone_num.replace("\n","")if len(phone_num) != 11:lenerr += 1else:if phone_num.isnumeric():if (int(phone_num[:3])in phone_prefix[0:9]):if (phone_num not in plist):pl.append(phone_num)cu += 1elif (int(phone_num[:3])in phone_prefix[9:28]):if (phone_num not in plist):pl.append(phone_num)cm += 1elif (int(phone_num[:3])in phone_prefix[28:]):if (phone_num not in plist):pl.append(phone_num)ct += 1else:preerr += 1else:digiterr += 1print('移动数量为%d个,联通数量为%d个,电信数量为%d个,长度不合法数量为%d个,号段不合法数量为%d个,字符不合法为%d个.' % (cm, cu, ct,lenerr,preerr,digiterr))

人民币大小写切换

项目背景:

工作中常常需要报销差旅费等其他费用,但是由于报销单需要进行大小写规范,因此很多人进行大写数字书写时,常常需要进行资料查找。这里需要选手设计一个万位以内的数值大写转换(例如9999.99,最高为千位,最多两位小数),请你编写程序文件cnyswitch.py,运行程序,输入小写数值,返回对应的大写数字。

实例如下:

终端输入:python /root/python2/cnyswitch.py 1234.56

终端输出:壹仟贰佰叁拾肆圆伍角陆分

选手须知:

1.重点考核选手根据要求,自定义代码规则,创建函数满足对应功能;

2.中文金额数字大写分别为“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、圆、角、分、零、整”。

3.按照数位顺序表,万以内数值转换,最高位为千位,数值最多包含两位小数(角、分)。

4.代码保存地址:/root/python2/cnyswitch.py

考核条件如下:

1. 编写程序,判断程序文件中是否涉及指定数据及知识点,验证程序结果是否正确。

操作环境: python

import syslist = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']list_pos_a = ['圆','拾','佰','仟']list_pos_b = ['分','角']money = sys.argv[1]money_Chinese = ''temp = ''if ("." not in money):if len(money)<=4:for value in range(len(money)):#每一次取出来一个value值,作为下标取出来汉字money_Chinese = money_Chinese + list[int(money[value])] + list_pos_a[int(len(money)-value-1)]print(money_Chinese+"整")else:money_a=money.split('.')[0]money_b=money.split('.')[1]if len(money_a)<=4:for value in range(len(money_a)):#每一次取出来一个value值,作为下标取出来汉字money_Chinese = money_Chinese + list[int(money_a[value])] + list_pos_a[int(len(money_a)-value-1)]if len(money_b)<=2:for value in range(len(money_b)):#每一次取出来一个value值,作为下标取出来汉字money_Chinese = money_Chinese + list[int(money_b[value])] + list_pos_b[int(len(money_b)-value-1)]print(money_Chinese)

查找关系密切的组合

项目背景:

作为一个电影爱好者,常常会对电影相关信息进行分析,我们会发现很多演员会在不同的电影里进行合作,如果想要找出合作最为亲密的两个演员,手工查找分析是非常慢的,请你按程序文件的注释,将Python代码补充完整,从/root/python_data/film.xlsx中找出合作密切的两位演员,并用程序输出结果;

选手须知:

要了解频繁项集:经常一起出现的物品的集合。如果某个项集是频繁的,那么它的所有子集都是频繁的;如果某个项集不是频繁的,那么它的所有超集都不是频繁的。这一点是避免项集数量过多的重要基础,使得快速计算频繁项集成为可能。

1)代码文件地址为:/root/python2/film.py

2)数据文件地址为:/root/python_data/film.xlsx(注意文件是否正确,xlsx文件借助vscode上Excel Viewer进行查看,选中文件右键’open preview‘即可)

3)运行代码,结果输出实例如下:

终端输入: python /root/python2/film.py

终端输出:关系最好的2个演员是演员a,演员b,他们共同出演的电影数量是c.(其中标点符号使用英文)

备注:其中a,b,c为计算后的真实内容,这里仅做结果样式介绍。

考核条件如下:

1. 编写程序,判断程序文件中是否涉及指定数据及知识点,验证程序结果是否正确。

操作环境: python

import openpyxlfrom itertools import combinationsfrom functools import reduce from openpyxl import Workbookdef getData(filename):actors = dict()# 打开xlsx文件,并获取第一个worksheetwb = openpyxl.load_workbook(filename)ws = wb.worksheets[0]# 遍历Excel文件中的所有行for index, row in enumerate(ws.rows):if index==0:# 绕过第一行的表头continuefilmName, actor = row[0].value, row[2].value.split(' ') # 获取电影名称和演员列表# 遍历该电影的所有演员,统计参演电影for a in actor:actors[a] = actors.get(a, set())actors[a].add(filmName)return actorsdata = getData('/root/python_data/film.xlsx') # 获取数据,代码中使用Excel数据def relations(n): # 查找关系最好的n个人allFilms = reduce(lambda x,y:x|y,data.values(),set()) # 全部电影合集combiData = combinations(data.items(),n) # 关系最好的n个演员和参演的电影trueLove = max(combiData,key=lambda item: len(item[0][1] & item[1][1]))return("关系最好的2个演员是{0},{1},他们共同出演的电影数量是{2}".format(trueLove[0][0],trueLove[1][0],len(set(trueLove[0][1])&set(trueLove[1][1]))))# 共同参演电影最多的n个演员print(relations(2)) # 查找共同参演电影最多的2个演员

根据身份证号计算退休年龄

题目背景:

已知当前法定退休年龄为男性60周岁,女性55周岁,现要求根据某公司员工身份证信息进行年龄和退休时间统计,请你按程序文件的注释,将Python代码补充完整,实现年龄和退体时间的计算,运行代码,保存运行结果。结果中单条数据实例如下(字段为:姓名,身份证号,当前年龄,退休日期):

赵峰平 57111519670183 54 -02-01

选手须知:

注意数据文件的读取。

日期时间对象和字符串之间的相互转换。

获取当前时间可以使用datetime.now()

字符串格式化与排版。

员工信息数据/root/python_data/staff.csv,数据字段为姓名、身份证号;

身份证号码是18位数,其中第7-10位是出生年份,第11-12位是出生月份,第13-14位是出生日,第17位是性别判断,奇数为男,偶数为女。

代码保存地址:/root/python2/retire.py

结果保存地址:/root/python_data/staffretire.txt,字段为姓名,身份证号,当前年龄,退休日期;

考核条件如下:

1. 编写程序,判断程序文件中是否涉及指定数据及知识点,验证程序结果是否正确。

操作环境: python

import csvfrom datetime import datetime ,date ,timedeltastaff_retire = open("/root/python_data/staffretire.txt", mode='a', encoding='utf-8')# 结果保存文件with open("/root/python_data/staff.csv",encoding="utf-8") as f: # 数据文件reader = csv.reader(f)for index,row in enumerate(reader):if index == 0: #剔除首行表头continueelse :Name,idCardNum = row[0], row[1] # 获取姓名,身份证号for i in Name:year=idCardNum[6:10] # 年month=idCardNum[10:12] # 月份,不够两位前面补0day=idCardNum[12:14] # 日birthday = year+"-"+month+"-"+day # 出生年月日birthday = datetime(int(year),int(month),int(day)) # 出生日期转换为日期时间对象age = int(f'{datetime.now().year:04d}')-int(f'{birthday.year:04d}') # 年龄为当前年份减去出生年份if int(idCardNum[-2])%2 ==1:# 根据身份证倒数第二位进行性别判断,奇数为男,偶数为女workYears=60else:workYears=55 retirDate = birthday+timedelta(days=365*workYears)#退休日期retirDate = date(retirDate.year,birthday.month,birthday.day).strftime('%Y-%m-%d')staff_retire.write('{:<3} {:<18} {:<2} {:<10}\n'.format(row[0],row[1],age,retirDate)) # 输出格式为:姓名 身份证号 当前年龄 退休年月日(注意换行)staff_retire.close()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。