算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
modes = ["拉克", "且比亚特", "木夏吾莱克", "恰尔尕", "潘吉尕",
"乌孜哈勒", "艾介姆", "乌夏克", "巴雅特", "纳瓦", "西尕", "依拉克"]
result = [m for m in modes if len(m) >= 3]
print(len(result))zhuang = {"回纹", "云雷纹", "菱形纹", "水波纹"}
miao = {"蝴蝶纹", "云雷纹", "鱼纹", "回纹"}
common = zhuang & miao
print(common)def drum_tower():
name = "增冲鼓楼"
floors = 13
height = 25
return name, floors, height
info = drum_tower()
print(info[1])from math import sqrt as sq
print(sq(25))print(chr(ord('A') + 2))dances = ["赛乃姆", "刀郎舞", "萨玛舞", "纳孜尔库姆", "赛乃姆"]def festival(name, month, *activities, **details):
passA = {"芦笙", "铜鼓", "马头琴", "琵琶"}
B = {"琵琶", "古筝", "铜鼓", "二胡"}s1 = "苗绣图案"
s2 = "MiaoXiu2024"data = [
["广西", "壮族", 1692],
["湖南", "苗族", 202],
["贵州", "苗族", 397],
["西藏", "藏族", 628]
]题目描述:
维吾尔族十二木卡姆是享誉世界的非物质文化遗产。每部木卡姆套曲有名称和总演奏时长(分钟)。请编写程序,输入n部木卡姆的信息,按照以下规则排序后输出:
1. 按演奏时长从长到短(降序)排列
2. 若演奏时长相同,则按名称的字符串默认顺序(升序)排列
输入格式:
第一行输入一个整数n(1 ≤ n ≤ 100),表示木卡姆的数量。
接下来n行,每行输入一个字符串和一个整数,格式为"名称,时长",中间用英文逗号分隔。时长范围为1~300。
输出格式:
输出n行,每行格式为"名称:时长分钟",按排序规则排列。
示例输入:
示例输出:
n = int(input())
muqam_list = []
for i in range(n):
line = input().strip()
name, duration = line.split(",")
muqam_list.append([name, int(duration)])
# 按时长降序(-x[1]),时长相同按名称升序(x[0])
muqam_list.sort(key=lambda x: (-x[1], x[0]))
for name, duration in muqam_list:
print(f"{name}:{duration}分钟")
题目描述:
藏族雪顿节是藏区重要的传统节日,起源于公元11世纪。假设雪顿节在每年公历的第d天举行(d从1开始计算,即1月1日是第1天)。给定一个整数d,请编写程序计算出雪顿节所在的公历月份和日期。
假设该年为非闰年:1月31天,2月28天,3月31天,4月30天,5月31天,6月30天,7月31天,8月31天,9月30天,10月31天,11月30天,12月31天。
输入格式:
输入一个整数d(1 ≤ d ≤ 365),表示一年中的第d天。
输出格式:
输出格式为"M月D日",其中M和D均为整数,不含前导零。
示例输入1:
45
示例输出1:
2月14日
说明:1月有31天,45 - 31 = 14,所以是2月14日。
示例输入2:
200
示例输出2:
7月19日
说明:1月(31)→2月(28)→3月(31)→4月(30)→5月(31)→6月(30) = 181天,200-181=19,所以是7月19日。
示例输入:
示例输出:
d = int(input())
# 非闰年每月天数
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
remaining = d
month = 0
for i in range(12):
if remaining <= month_days[i]:
month = i + 1
day = remaining
break
remaining -= month_days[i]
print(f"{month}月{day}日")
题目描述:
某苗族银饰博物馆将藏品信息保存在文本文件 silverware.txt 中,每行记录一件藏品的编号、名称、类型和重量(克),格式为"藏品编号,名称,类型,重量"。请编写程序完成以下功能:
1. 读取文件中的所有银饰藏品信息
2. 输入一个银饰类型(如"头饰"或"项圈"或"手镯"),筛选出该类型的所有藏品
3. 按照重量从大到小排序输出藏品信息
4. 计算并输出该类型藏品的总重量
5. 若该类型不存在任何藏品,输出"未找到该类型的藏品"
6. 若文件不存在,输出"文件读取失败"
输入格式:
第一行输入文件名(如 silverware.txt)。
第二行输入要查询的银饰类型(字符串)。
silverware.txt 文件示例内容:
M001,银角头饰,头饰,350
M002,银项圈,项圈,280
M003,银手镯,手镯,120
M004,银梳,头饰,85
M005,银耳环,耳饰,30
M006,银压领,项圈,200
M007,银发簪,头饰,45
输出格式:
第一行输出"X类藏品:"(X为查询的类型)。
接下来每行输出一件藏品的信息,格式为"名称 重量克"(名称和重量之间用空格分隔),按重量从大到小排列。
最后输出"总重量:Y克"(Y为总重量)。
若该类型不存在,则输出"未找到该类型的藏品"。
示例输入:
示例输出:
filename = input().strip()
query_type = input().strip()
try:
with open(filename, "r", encoding="utf-8") as f:
lines = f.readlines()
# 存储该类型的藏品信息
items = []
total_weight = 0
for line in lines:
line = line.strip()
if line == "":
continue
parts = line.split(",")
if len(parts) == 4:
code = parts[0]
name = parts[1]
item_type = parts[2]
weight = int(parts[3])
if item_type == query_type:
items.append((name, weight))
total_weight += weight
if len(items) == 0:
print("未找到该类型的藏品")
else:
# 按重量降序排序
items.sort(key=lambda x: -x[1])
print(f"{query_type}类藏品:")
for name, weight in items:
print(f"{name} {weight}克")
print(f"总重量:{total_weight}克")
except FileNotFoundError:
print("文件读取失败")
题目描述:
中华民族乐器数据库中,每件乐器有一个统一编码,格式为:民族代码-类别号-序号。编码规则如下:
- 民族代码:2位大写英文字母(如 MG 表示蒙古族、ZG 表示藏族、ZW 表示壮族、MZ 表示苗族)
- 类别号:1位数字(1表示弦鸣乐器、2表示气鸣乐器、3表示体鸣乐器、4表示膜鸣乐器)
- 序号:3位或4位数字
例如,MG-1-015 表示蒙古族弦鸣乐器,序号为015;ZW-3-1024 表示壮族体鸣乐器,序号为1024。
请编写程序,输入一个乐器编码字符串,验证其是否符合上述格式要求,并输出验证结果。
验证规则:
1. 总长度必须为8或9个字符(含两个连字符)
2. 前2个字符必须全部是大写英文字母
3. 第3个字符必须是连字符 -
4. 第4个字符必须是数字 1、2、3 或 4
5. 第5个字符必须是连字符 -
6. 剩余部分(第6个字符到末尾)必须是3位或4位纯数字
输入格式:
输入一行字符串,表示待验证的乐器编码。
输出格式:
若编码合法,输出"编码合法"。
若编码不合法,输出"编码不合法"。
示例输入1:
MG-1-015
示例输出1:
编码合法
示例输入2:
abc-1-xyz
示例输出2:
编码不合法
示例输入3:
ZW-3-1024
示例输出3:
编码合法
示例输入4:
MZ-5-001
示例输出4:
编码不合法
说明:示例4中类别号为5,不在1-4范围内,因此不合法。
示例输入:
示例输出:
code = input().strip()
# 验证规则
valid = True
# 规则1:总长度
if len(code) != 8 and len(code) != 9:
valid = False
# 规则2:前2个字符必须是大写字母
if valid and not (code[0].isupper() and code[1].isupper()):
valid = False
# 规则3:第3个字符必须是'-'
if valid and code[2] != '-':
valid = False
# 规则4:第4个字符必须是'1'~'4'
if valid and code[3] not in "1234":
valid = False
# 规则5:第5个字符必须是'-'
if valid and code[4] != '-':
valid = False
# 规则6:剩余部分是3-4位纯数字
if valid:
suffix = code[5:]
if len(suffix) < 3 or len(suffix) > 4:
valid = False
elif not suffix.isdigit():
valid = False
if valid:
print("编码合法")
else:
print("编码不合法")