🏆 全国青少年信息素养大赛

算法应用主题赛 — 星火征途(红色文化)
难度:中等 | 时长:90 分钟 | 满分:100分
题型:5单选(10分) + 5多选(20分) + 4编程(70分)

算法应用主题赛 — 星火征途(红色文化)(中等)
考生:— 第 1 / 14 题
--:--
第 1 题 单选题 2 分
在"红色密码本"项目中,需要将一个用逗号分隔的英雄名字字符串拆分成列表。hero_str = "雷锋,董存瑞,黄继光,邱少云",使用以下哪个方法可以得到列表 ["雷锋", "董存瑞", "黄继光", "邱少云"]?
第 2 题 单选题 2 分
在革命根据地物资管理系统中,使用字典存储物资信息。supplies = {"粮食": 500, "弹药": 300, "药品": 100},以下哪个操作可以安全地获取"被服"的数量,如果键不存在则返回0?
第 3 题 单选题 2 分
以下是一个计算"红军长征中翻越雪山所需物资"的函数,关于该函数的说法,正确的是?
def calc_supplies(people, days):
    food = people * 2 * days
    medicine = people * 0.5 * days
    return food, medicine
f, m = calc_supplies(100, 30)
print(f, m)
第 4 题 单选题 2 分
在"革命日记档案"系统中,需要读取一个文件的内容。以下关于文件操作的描述,正确的是?
第 5 题 单选题 2 分
在情报解码程序中,输入的数据可能包含非数字字符,需要做异常处理。以下代码的输出结果是什么?
data = ["100", "200", "abc", "300"]
total = 0
for d in data:
    try:
        total += int(d)
    except ValueError:
        print("发现无法识别的数据:" + d)
print("有效数据总和:" + str(total))
第 6 题 多选题 4 分
在"红色标语格式化"任务中,需要使用字符串格式化输出。以下Python代码中,哪些可以正确输出"红军长征走了25000里"?
第 7 题 多选题 4 分
有一个列表 battles = ["湘江战役", "遵义会议", "四渡赤水", "飞夺泸定桥", "爬雪山", "过草地", "会宁会师"],以下操作描述正确的有哪些?
第 8 题 多选题 4 分
以下字典 hero_info = {"姓名": "董存瑞", "年龄": 19, "籍贯": "河北怀来", "事迹": "舍身炸碉堡"},关于字典遍历的说法,正确的有哪些?
第 9 题 多选题 4 分
关于Python中元组(tuple)和集合(set)的说法,正确的有哪些?
第 10 题 多选题 4 分
关于Python中全局变量和局部变量的说法,正确的有哪些?
第 11 题 编程操作题 0 分

题目描述:
在革命战争年代,红军情报员使用简化的摩斯密码传递消息。现有一个摩斯密码对照表(只包含字母和数字),请你编写程序,输入一段摩斯密码(每个密码用空格分隔),翻译成明文。
摩斯密码对照表如下(已内置在代码中):
- A: .- B: -... C: -.-. D: -.. E: .
- F: ..-. G: --. H: .... I: .. J: .---
- K: -.- L: .-.. M: -- N: -. O: ---
- P: .--. Q: --.- R: .-. S: ... T: -
- U: ..- V: ...- W: .-- X: -..- Y: -.-- Z: --..
- 0: ----- 1: .---- 2: ..--- 3: ...-- 4: ....-
- 5: ..... 6: -.... 7: --... 8: ---.. 9: ----.

输入格式:
一行字符串,由摩斯密码组成,每个密码之间用空格分隔。

输出格式:
一行,翻译后的明文字符串。

示例输入:

.... . .-.. .-.. --- .-- --- .-. .-.. -..

示例输出:

HELLO WORLD
说明:连续两个空格代表单词之间的分隔(输出时保留为一个空格)。
第 12 题 编程操作题 0 分

题目描述:
红军后勤部需要管理多个仓库的物资库存。初始有三个仓库,每个仓库存储不同的物资及其数量。请你编写程序,实现以下功能:
1. 输入一个仓库名称,查询该仓库的所有物资
2. 如果仓库不存在,输出"未找到该仓库"
3. 如果仓库存在,按物资名称排序后逐行输出(格式:"物资名:数量")

输入格式:
第一行一个字符串,表示要查询的仓库名称。

输出格式:
如果仓库存在,每行输出一个物资信息,格式为"物资名:数量"(按物资名从小到大排序,即按照字符串默认排序)。
如果仓库不存在,输出"未找到该仓库"。
示例输入1:
一号仓库
示例输出1:
手榴弹:200
步枪:150
粮食:500
示例输入2:
五号仓库
示例输出2:
未找到该仓库

示例输入:

示例输出:

第 13 题 编程操作题 0 分

题目描述:
有一份革命战役日志文件 battle_log.txt,每行记录了一场战役的信息,格式为"战役名称,日期,参战人数,结果(胜/负/平)"。请你编写程序,读取该文件,完成以下分析任务:
1. 统计总共的战役数量
2. 统计获胜的战役数量
3. 找出参战人数最多的一场战役,输出其名称和参战人数
4. 计算胜率(获胜战役数 / 总战役数,以百分比表示,保留1位小数)
假设文件内容如下(你可以直接构造这个字符串列表模拟文件读取):
湘江战役,1934-11-27,86000,胜
四渡赤水,1935-01-19,30000,胜
飞夺泸定桥,1935-05-29,22,胜
平型关大捷,1937-09-25,12000,胜
百团大战,1940-08-20,200000,胜

输入格式:
无输入(直接处理内置的战役数据)。

输出格式:
第一行输出"总战役数:X"
第二行输出"获胜战役数:Y"
第三行输出"最大规模战役:Z战役,参战人数N人"
第四行输出"胜率:P%"

示例输入:

示例输出:

总战役数:5
获胜战役数:5
最大规模战役:百团大战,参战人数200000人
胜率:100.0%
第 14 题 编程操作题 0 分

题目描述:
某学校组织学生参观多个红色地标,每个地标的参观需要一定时间(分钟)。学校规定总参观时间不能超过T分钟。请你编写程序,输入各个地标的名称和参观时间,以及总时间限制T,找出在不超过时间限制的情况下,能参观最多地标的方案,输出地标数量和名称列表。
提示:采用贪心策略——优先选择参观时间短的地标,可以参观更多地点。

输入格式:
第一行两个整数 n 和 T,分别表示地标数量和总时间限制(分钟),用空格分隔。
接下来 n 行,每行一个地标名称和一个整数时间(分钟),用空格分隔。

输出格式:
第一行输出"可参观地标数:X个"
第二行输出参观的地标名称列表,用"→"箭头连接,表示参观顺序。

示例输入:

5 180
延安革命纪念馆 60
井冈山博物馆 45
遵义会议会址 50
西柏坡纪念馆 55
南湖红船 30

示例输出:

可参观地标数:4个
南湖红船→井冈山博物馆→遵义会议会址→西柏坡纪念馆