算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
mural_id = "DH-MG-025"。执行 mural_id.split("-") 的结果是?stock = {"丝绸": 100, "瓷器": 50, "茶叶": 200}。以下代码的执行结果是什么?stock["丝绸"] = 120
print(stock.get("香料", 0))calc_days(500, 40) 的返回值是?def calc_days(distance, speed):
if distance % speed == 0:
return distance // speed
else:
return distance // speed + 1distances = [50, 30, 80, 20, 60]
distances.sort()
distances.reverse()
print(distances[0])image = [[255, 128, 64], [200, 100, 50], [150, 75, 30]]data = []
for i in range(3):
line = input().split()
data.append(line)题目描述:
在丝绸之路上,不同地区使用不同的度量单位。商人需要将"石"和"斗"转换为统一的"升"。
换算规则:
- 1石 = 100升
- 1斗 = 10升
请你编写一个函数 to_sheng(shi, dou),接收石数和斗数两个整数参数,返回换算后的总升数。然后在主程序中,从用户输入中读取石数和斗数,调用函数并输出结果。
输入格式:
一行,包含两个整数,分别表示石数和斗数,以空格分隔。
输出格式:
一行,输出"合计:X升"(X为换算后的总升数)
示例输入:
示例输出:
def to_sheng(shi, dou):
return shi * 100 + dou * 10
s, d = map(int, input().split())
result = to_sheng(s, d)
print("合计:" + str(result) + "升")
题目描述:
一支丝路驼队需要在沿途驿站补充给养。请你编写程序,使用字典记录补给品的库存情况。
程序流程:
1. 初始库存为:{"水": 50, "干粮": 30, "草料": 100}(单位:份)
2. 用户输入一个整数 m,表示有 m 次补给操作。
3. 每次操作为一行,格式为 操作类型 补给品名称 数量:
- 操作类型为 in 表示入库(增加库存),例如 in 水 10
- 操作类型为 out 表示出库(减少库存),例如 out 干粮 5
4. 所有操作完成后,按以下格式输出最终库存:
- 第一行输出 ===补给品库存===
- 之后每行输出一种补给品的名称和数量,格式为 名称:数量
- 补给品按名称的字母顺序排列(使用sorted排序)
输入格式:
第一行,一个正整数 m,表示操作次数。
接下来 m 行,每行格式为 操作类型 补给品名称 数量。
输出格式:
按上述要求输出库存清单。
示例输入:
示例输出:
stock = {"水": 50, "干粮": 30, "草料": 100}
m = int(input())
for _ in range(m):
op, name, num = input().split()
num = int(num)
if op == "in":
if name in stock:
stock[name] += num
else:
stock[name] = num
elif op == "out":
if name in stock:
stock[name] -= num
print("===补给品库存===")
for name in sorted(stock.keys()):
print(name + ":" + str(stock[name]))
题目描述:
丝路商人需要管理一份贸易账本。账本保存在一个文本文件中(假设文件名为 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
若文件不存在则在控制台输出"账本文件不存在,请检查后重试。"
示例输入:
示例输出:
try:
with open("ledger.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
except FileNotFoundError:
print("账本文件不存在,请检查后重试。")
else:
total = 0
with open("report.txt", "w", encoding="utf-8") as f:
for line in lines:
line = line.strip()
if line == "":
continue
parts = line.split()
name = parts[0]
qty = int(parts[1])
price = int(parts[2])
amount = qty * price
total += amount
f.write(name + " " + str(qty) + " " + str(price) + " -> " + str(amount) + "\n")
f.write("总金额:" + str(total) + "\n")
题目描述:
丝绸之路上的驼队需要选择一条合适的行进路线。从起点到终点之间有若干个驿站,每个驿站之间的路程(里)不同。请你编写程序,帮驼队商人计算路线总里程,并找到最长的一段路程。
程序要求:
1. 用户首先输入一个整数 n,表示驿站之间的路段数量。
2. 接下来输入 n 个正整数(以空格分隔在一行中),依次表示每个路段的路程(里)。
3. 程序计算并输出:
- 总里程
- 最长路段的里程及其是第几个路段(路段编号从1开始)
输入格式:
第一行:一个正整数 n,表示路段数量。
第二行:n 个正整数,以空格分隔,表示每个路段的路程。
输出格式:
第一行:总里程:X里
第二行:最长路段:第Y段,共Z里
(如果有多个最长路段,输出编号最小的那个)
示例输入:
示例输出:
n = int(input())
distances = list(map(int, input().split()))
total = sum(distances)
max_dist = distances[0]
max_index = 1
for i in range(1, n):
if distances[i] > max_dist:
max_dist = distances[i]
max_index = i + 1
print("总里程:" + str(total) + "里")
print("最长路段:第" + str(max_index) + "段,共" + str(max_dist) + "里")