算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
hero_str = "雷锋,董存瑞,黄继光,邱少云",使用以下哪个方法可以得到列表 ["雷锋", "董存瑞", "黄继光", "邱少云"]?supplies = {"粮食": 500, "弹药": 300, "药品": 100},以下哪个操作可以安全地获取"被服"的数量,如果键不存在则返回0?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)data = ["100", "200", "abc", "300"]
total = 0
for d in data:
try:
total += int(d)
except ValueError:
print("发现无法识别的数据:" + d)
print("有效数据总和:" + str(total))battles = ["湘江战役", "遵义会议", "四渡赤水", "飞夺泸定桥", "爬雪山", "过草地", "会宁会师"],以下操作描述正确的有哪些?hero_info = {"姓名": "董存瑞", "年龄": 19, "籍贯": "河北怀来", "事迹": "舍身炸碉堡"},关于字典遍历的说法,正确的有哪些?题目描述:
在革命战争年代,红军情报员使用简化的摩斯密码传递消息。现有一个摩斯密码对照表(只包含字母和数字),请你编写程序,输入一段摩斯密码(每个密码用空格分隔),翻译成明文。
摩斯密码对照表如下(已内置在代码中):
- 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: ----.
输入格式:
一行字符串,由摩斯密码组成,每个密码之间用空格分隔。
输出格式:
一行,翻译后的明文字符串。
示例输入:
示例输出:
# 摩斯密码对照表
morse_dict = {
".-": "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"
}
# 输入摩斯密码,按空格分割
codes = input().split(" ")
result = ""
for code in codes:
if code == "":
# 连续空格表示单词分隔
if result != "" and result[-1] != " ":
result += " "
elif code in morse_dict:
result += morse_dict[code]
print(result)
题目描述:
红军后勤部需要管理多个仓库的物资库存。初始有三个仓库,每个仓库存储不同的物资及其数量。请你编写程序,实现以下功能:
1. 输入一个仓库名称,查询该仓库的所有物资
2. 如果仓库不存在,输出"未找到该仓库"
3. 如果仓库存在,按物资名称排序后逐行输出(格式:"物资名:数量")
输入格式:
第一行一个字符串,表示要查询的仓库名称。
输出格式:
如果仓库存在,每行输出一个物资信息,格式为"物资名:数量"(按物资名从小到大排序,即按照字符串默认排序)。
如果仓库不存在,输出"未找到该仓库"。
示例输入1:
一号仓库
示例输出1:
手榴弹:200
步枪:150
粮食:500
示例输入2:
五号仓库
示例输出2:
未找到该仓库
示例输入:
示例输出:
# 初始化仓库数据
warehouses = {
"一号仓库": {"粮食": 500, "步枪": 150, "手榴弹": 200},
"二号仓库": {"药品": 100, "绷带": 300, "粮食": 400},
"三号仓库": {"弹药": 1000, "步枪": 80, "被服": 200}
}
name = input()
if name in warehouses:
# 获取该仓库的物资,按物资名排序
supplies = warehouses[name]
sorted_keys = sorted(supplies.keys())
for key in sorted_keys:
print(key + ":" + str(supplies[key]))
else:
print("未找到该仓库")
题目描述:
有一份革命战役日志文件 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%"
示例输入:
示例输出:
# 模拟日志文件内容(实际考试中考生可用同样方式构造数据)
battle_data = [
"湘江战役,1934-11-27,86000,胜",
"四渡赤水,1935-01-19,30000,胜",
"飞夺泸定桥,1935-05-29,22,胜",
"平型关大捷,1937-09-25,12000,胜",
"百团大战,1940-08-20,200000,胜"
]
total = 0
win_count = 0
max_people = 0
max_battle = ""
for line in battle_data:
parts = line.split(",")
name = parts[0]
people = int(parts[2])
result = parts[3]
total += 1
if result == "胜":
win_count += 1
if people > max_people:
max_people = people
max_battle = name
win_rate = win_count / total * 100
print("总战役数:" + str(total))
print("获胜战役数:" + str(win_count))
print("最大规模战役:" + max_battle + ",参战人数" + str(max_people) + "人")
print("胜率:" + str(round(win_rate, 1)) + "%")
题目描述:
某学校组织学生参观多个红色地标,每个地标的参观需要一定时间(分钟)。学校规定总参观时间不能超过T分钟。请你编写程序,输入各个地标的名称和参观时间,以及总时间限制T,找出在不超过时间限制的情况下,能参观最多地标的方案,输出地标数量和名称列表。
提示:采用贪心策略——优先选择参观时间短的地标,可以参观更多地点。
输入格式:
第一行两个整数 n 和 T,分别表示地标数量和总时间限制(分钟),用空格分隔。
接下来 n 行,每行一个地标名称和一个整数时间(分钟),用空格分隔。
输出格式:
第一行输出"可参观地标数:X个"
第二行输出参观的地标名称列表,用"→"箭头连接,表示参观顺序。
示例输入:
示例输出:
# 输入地标数量和总时间限制
line = input().split()
n = int(line[0])
T = int(line[1])
# 存储地标信息
sites = []
for i in range(n):
parts = input().split()
name = parts[0]
time_cost = int(parts[1])
sites.append((name, time_cost))
# 按参观时间从小到大排序(贪心策略)
for i in range(len(sites)):
for j in range(i + 1, len(sites)):
if sites[i][1] > sites[j][1]:
sites[i], sites[j] = sites[j], sites[i]
# 贪心选择
selected = []
total_time = 0
for site in sites:
name = site[0]
time_cost = site[1]
if total_time + time_cost <= T:
selected.append(name)
total_time += time_cost
else:
break
# 输出结果
print("可参观地标数:" + str(len(selected)) + "个")
print("→".join(selected))