算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
currencies 中包含多少个元素?currencies = {"铜钱", "银两", "金币"}
currencies.add("银两")
currencies.add("绢帛")goods = [("丝绸", 10), ("瓷器", 5), ("茶叶", 20)]
for name, qty in goods:
print(name, end=" ")weights = [80, 120, 95, 150, 60]
heavy = [w for w in weights if w > 100]
print(heavy)lambda 表达式的功能是什么?goods = [("丝绸", 500), ("茶叶", 50), ("瓷器", 200)]
goods.sort(key=lambda x: x[1])from datetime import date, timedelta
departure = date(2026, 7, 8)
arrival = departure + timedelta(days=30)
print(arrival.month)profits = {"长安->敦煌": 500, "敦煌->楼兰": 300, "楼兰->大宛": 800}ports = ["广州", "泉州", "宁波", "福州", "登州", "扬州"]*args 和 **kwargs 的说法,正确的有?(多选)random 模块的说法,正确的有?(多选)题目描述:
在丝绸之路的国际贸易中,商人需要了解不同货币之间的兑换关系。请你编写程序,使用字典建立一份货币兑换表,并实现查询和兑换功能。
已知基础货币为"开元通宝"(铜钱),兑换规则如下:
- 1 银两 = 1000 铜钱
- 1 金币 = 10000 铜钱
- 1 绢帛 = 200 铜钱
程序要求:
1. 用户首先输入一个整数 q,表示有 q 次查询。
2. 每次查询输入一行,格式为 货币名称 数量(如 银两 5)。
3. 程序输出对应的铜钱数量。
4. 如果输入的货币名称不在兑换表中,输出"未知货币"。
输入格式:
第一行:一个正整数 q,表示查询次数。
接下来 q 行:每行一个货币名称和一个正整数(数量),以空格分隔。
输出格式:
对每次查询,输出"X Y = Z铜钱"(X为数量,Y为货币名称,Z为换算后的铜钱数),或输出"未知货币"。
示例输入:
示例输出:
rates = {
"银两": 1000,
"金币": 10000,
"绢帛": 200,
"铜钱": 1
}
q = int(input())
for _ in range(q):
parts = input().split()
name = parts[0]
amount = int(parts[1])
if name in rates:
total = amount * rates[name]
print(str(amount) + " " + name + " = " + str(total) + "铜钱")
else:
print("未知货币")
题目描述:
海上丝绸之路连接了多个重要港口。给定一个 n 个港口之间的距离矩阵(二维列表),请你编写程序实现以下功能:
1. 用户首先输入一个整数 n,表示港口数量。
2. 接下来输入 n 行,每行 n 个整数(以空格分隔),表示港口之间的距离矩阵。矩阵中 dist[i][j] 表示从港口 i+1 到港口 j+1 的距离(里)。矩阵是对称的,对角线为0。
3. 程序输出每对港口之间的距离摘要:对于每对不同的港口(i, j),如果 dist[i][j] 不为0,则按以下格式输出:
港口i+1 -> 港口j+1:XX里
4. 输出顺序:按 i 从小到大,对每个 i 按 j 从小到大。
输入格式:
第一行:一个正整数 n。
接下来 n 行:每行 n 个整数,以空格分隔。
输出格式:
每行一个距离记录,格式见题目描述。不输出距离为0的记录(包括对角线)。
示例输入:
示例输出:
n = int(input())
dist = []
for _ in range(n):
row = list(map(int, input().split()))
dist.append(row)
for i in range(n):
for j in range(i + 1, n):
if dist[i][j] != 0:
print("港口" + str(i + 1) + " -> 港口" + str(j + 1) + ":" + str(dist[i][j]) + "里")
题目描述:
海上丝绸之路的商船需要将货物装入标准化的货箱。每个货箱的容量为 C(单位:斤)。给定 n 件货物的重量列表(单位:斤),商人希望用最少的货箱装完所有货物,但有一个特殊规则:每件货物必须完整装入一个箱子,不能拆分,且装入箱子时按货物给出的顺序依次装载——当一个箱子装不下当前货物时,就用一个新箱子来装。
请你编写程序,模拟这个装箱过程,计算需要多少个货箱。
输入格式:
第一行:一个正整数 C,表示每个货箱的容量(斤)。
第二行:一个正整数 n,表示货物的件数。
第三行:n 个正整数,以空格分隔,依次表示每件货物的重量(斤)。
输出格式:
第一行:使用货箱数量:X个
接下来 X 行,每行输出一个货箱中装入的货物重量列表,格式为 货箱Y:[重量列表](货箱编号从1开始)。
示例输入:
示例输出:
C = int(input())
n = int(input())
weights = list(map(int, input().split()))
boxes = []
current_box = []
current_load = 0
for w in weights:
if w > C:
# 单件货物超过容量,单独装箱
if current_box:
boxes.append(current_box)
boxes.append([w])
current_box = []
current_load = 0
elif current_load + w <= C:
current_box.append(w)
current_load += w
else:
boxes.append(current_box)
current_box = [w]
current_load = w
if current_box:
boxes.append(current_box)
print("使用货箱数量:" + str(len(boxes)) + "个")
for i in range(len(boxes)):
print("货箱" + str(i + 1) + ":" + str(boxes[i]))
题目描述:
考古学家在丝绸之路遗址中发现了若干件文物,每件文物有名称和年代(公元年份,负数表示公元前)。请你编写程序,对这些文物进行排序和筛选。
程序要求:
1. 用户首先输入一个整数 n,表示文物数量。
2. 接下来输入 n 行,每行格式为 文物名称 年代(名称和年代以空格分隔,年代为整数)。
3. 程序将所有文物数据存入一个列表中。
4. 按年代从小到大(从古到今)排序后,输出所有文物的信息。
5. 筛选并输出所有公元后的文物(年代 > 0),按名称的字母顺序(Python默认字符串排序即可)输出。
输入格式:
第一行:一个正整数 n。
接下来 n 行:每行一个文物名称和一个整数年代,以空格分隔。
输出格式:
首先输出 ===按年代排序(从古到今)===,然后每行输出 名称(年代年)。
然后输出 ===公元后文物(按名称排序)===,然后每行输出 名称(年代年)。
示例输入:
示例输出:
n = int(input())
artifacts = []
for _ in range(n):
parts = input().split()
name = parts[0]
year = int(parts[1])
artifacts.append((name, year))
# 按年代排序
sorted_by_year = sorted(artifacts, key=lambda x: x[1])
print("===按年代排序(从古到今)===")
for name, year in sorted_by_year:
print(name + "(" + str(year) + "年)")
# 筛选公元后并按名称排序
after_ad = [(name, year) for name, year in artifacts if year > 0]
sorted_by_name = sorted(after_ad, key=lambda x: x[0])
print("===公元后文物(按名称排序)===")
for name, year in sorted_by_name:
print(name + "(" + str(year) + "年)")