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

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

算法应用主题赛 — 丝路新程(丝路文化)(中等)
考生:— 第 1 / 14 题
--:--
第 1 题 单选题 2 分
在敦煌莫高窟的数字化项目中,研究人员用字符串存储壁画编号,如 mural_id = "DH-MG-025"。执行 mural_id.split("-") 的结果是?
第 2 题 单选题 2 分
丝路贸易中,商人用字典统计商品的库存量:stock = {"丝绸": 100, "瓷器": 50, "茶叶": 200}。以下代码的执行结果是什么?
stock["丝绸"] = 120
print(stock.get("香料", 0))
第 3 题 单选题 2 分
在驼队路线规划中,定义了如下函数。调用 calc_days(500, 40) 的返回值是?
def calc_days(distance, speed):
    if distance % speed == 0:
        return distance // speed
    else:
        return distance // speed + 1
第 4 题 单选题 2 分
驼队在丝路沿途各站点记录行进里程,数据存储在列表中。以下代码的输出是什么?
distances = [50, 30, 80, 20, 60]
distances.sort()
distances.reverse()
print(distances[0])
第 5 题 单选题 2 分
在海上丝绸之路的贸易记录中,商人用文件保存交易数据。以下关于Python文件操作的说法,正确的是?
第 6 题 多选题 4 分
在丝路贸易结算中,需要对不同货币进行换算。关于Python字典的操作,以下说法正确的有?(多选)
第 7 题 多选题 4 分
在敦煌壁画的数字化修复中,研究人员用一个二维列表存储像素颜色值。关于以下代码,说法正确的有?(多选)
image = [[255, 128, 64], [200, 100, 50], [150, 75, 30]]
第 8 题 多选题 4 分
驼队商人需要在出发前检查货物的种类和数量。以下关于Python异常处理的说法,正确的有?(多选)
第 9 题 多选题 4 分
在丝绸之路上,商人用函数来计算不同商品的运费。关于函数的说法,正确的有?(多选)
第 10 题 多选题 4 分
海上丝绸之路的航海日志记录了每日的航行数据。关于以下代码的分析,正确的有?(多选)
data = []
for i in range(3):
    line = input().split()
    data.append(line)

假设输入了3行数据,每行包含若干以空格分隔的字符串。以下说法正确的有?(多选)
第 11 题 编程操作题 0 分

题目描述:
在丝绸之路上,不同地区使用不同的度量单位。商人需要将"石"和"斗"转换为统一的"升"。
换算规则:
- 1石 = 100升
- 1斗 = 10升
请你编写一个函数 to_sheng(shi, dou),接收石数和斗数两个整数参数,返回换算后的总升数。然后在主程序中,从用户输入中读取石数和斗数,调用函数并输出结果。

输入格式:
一行,包含两个整数,分别表示石数和斗数,以空格分隔。

输出格式:
一行,输出"合计:X升"(X为换算后的总升数)

示例输入:

3 5

示例输出:

合计:350升
第 12 题 编程操作题 0 分

题目描述:
一支丝路驼队需要在沿途驿站补充给养。请你编写程序,使用字典记录补给品的库存情况。
程序流程:
1. 初始库存为:{"水": 50, "干粮": 30, "草料": 100}(单位:份)
2. 用户输入一个整数 m,表示有 m 次补给操作。
3. 每次操作为一行,格式为 操作类型 补给品名称 数量:
- 操作类型为 in 表示入库(增加库存),例如 in 水 10
- 操作类型为 out 表示出库(减少库存),例如 out 干粮 5
4. 所有操作完成后,按以下格式输出最终库存:
- 第一行输出 ===补给品库存===
- 之后每行输出一种补给品的名称和数量,格式为 名称:数量
- 补给品按名称的字母顺序排列(使用sorted排序)

输入格式:
第一行,一个正整数 m,表示操作次数。
接下来 m 行,每行格式为 操作类型 补给品名称 数量。

输出格式:
按上述要求输出库存清单。

示例输入:

3
in 水 20
out 干粮 10
in 茶叶 15

示例输出:

===补给品库存===
水:70
干粮:20
草料:100
茶叶:15
第 13 题 编程操作题 0 分

题目描述:
丝路商人需要管理一份贸易账本。账本保存在一个文本文件中(假设文件名为 ledger.txt),每行记录一笔交易,格式为:商品名 数量 单价(以空格分隔)。
请你编写程序完成以下功能:
1. 读取账本文件 ledger.txt(文件可能不存在,需要处理异常)。
2. 计算每笔交易的金额(数量 * 单价),并累加得到总金额。
3. 将每一笔交易的详细信息和计算后的金额写入新文件 report.txt,格式为每行 商品名 数量 单价 -> 金额。
4. 在 report.txt 的最后一行写入 总金额:X。
5. 如果 ledger.txt 文件不存在,则输出"账本文件不存在,请检查后重试。"。

输入格式:
无键盘输入。程序读取当前目录下的 ledger.txt 文件。
ledger.txt 示例内容:
丝绸 10 500
瓷器 5 200
茶叶 20 50

输出格式:
生成 report.txt 文件,内容格式如下:
丝绸 10 500 -> 5000
瓷器 5 200 -> 1000
茶叶 20 50 -> 1000
总金额:7000
若文件不存在则在控制台输出"账本文件不存在,请检查后重试。"

示例输入:

示例输出:

第 14 题 编程操作题 0 分

题目描述:
丝绸之路上的驼队需要选择一条合适的行进路线。从起点到终点之间有若干个驿站,每个驿站之间的路程(里)不同。请你编写程序,帮驼队商人计算路线总里程,并找到最长的一段路程。
程序要求:
1. 用户首先输入一个整数 n,表示驿站之间的路段数量。
2. 接下来输入 n 个正整数(以空格分隔在一行中),依次表示每个路段的路程(里)。
3. 程序计算并输出:
- 总里程
- 最长路段的里程及其是第几个路段(路段编号从1开始)

输入格式:
第一行:一个正整数 n,表示路段数量。
第二行:n 个正整数,以空格分隔,表示每个路段的路程。

输出格式:
第一行:总里程:X里
第二行:最长路段:第Y段,共Z里
(如果有多个最长路段,输出编号最小的那个)

示例输入:

5
30 50 25 50 40

示例输出:

总里程:195里
最长路段:第2段,共50里