🔒 答案已锁定

📖 答案解析 — 丝路新程(丝路文化) — 简单

算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分

第 1 题 单选题 2 分
在一带一路的贸易统计中,有以下变量定义。哪个变量的数据类型是布尔值(bool)?
A. country = "哈萨克斯坦"
B. trade_volume = 1500
C. is_partner = True
D. price = 12.5
✅ 正确答案:C
💡 考点解析:布尔类型(bool)的识别
第 2 题 单选题 2 分
海上丝绸之路的商人记录了某批瓷器的单价为字符串 price_str = "200"。要将它转换为整数进行计算,以下代码正确的是?
A. price = float(price_str)
B. price = int(price_str)
C. price = str(price_str)
D. price = bool(price_str)
✅ 正确答案:B
💡 考点解析:int() 类型转换函数
第 3 题 单选题 2 分
驼队商人记录了沿途的地名:route = "长安-敦煌-喀什-撒马尔罕"。执行 route[3:5] 的结果是?
A. "长安"
B. "敦煌"
C. "-敦"
D. "敦煌-喀什"
✅ 正确答案:C
💡 考点解析:字符串切片 [start:end]
第 4 题 单选题 2 分
商人想找出驼队中是否有空闲的骆驼。以下代码的输出是什么?
camels = ["载货", "空闲", "载货", "休息"]
for c in camels:
    if c == "空闲":
        print("找到空闲骆驼")
        break
else:
    print("没有空闲骆驼")
A. 找到空闲骆驼
B. 没有空闲骆驼
C. 找到空闲骆驼(两行输出)
D. 程序报错
✅ 正确答案:A
💡 考点解析:for-else 结构、break 语句
第 5 题 单选题 2 分
在丝绸之路上,商人统计路过的驿站,但沙漠中的临时休息点不计入驿站。以下代码会输出几个数?
for i in range(1, 6):
    if i == 3:
        continue
    print(i)
A. 1, 2, 3, 4, 5(5个数)
B. 1, 2, 4, 5(4个数)
C. 1, 2(2个数)
D. 3, 4, 5(3个数)
✅ 正确答案:B
💡 考点解析:continue 语句
第 6 题 多选题 4 分
丝路商人在计算货物总价时使用数学运算。以下关于Python数学运算的说法,正确的有?(多选)
A. 10 / 3 的结果是 3.333...(浮点数)
B. 10 // 3 的结果是 3(整数除法,向下取整)
C. 10 % 3 的结果是 1(取余数)
D. round(3.14159, 2) 的结果是 3.14(四舍五入保留两位小数)
✅ 正确答案:ABCD
💡 考点解析:算术运算符(/、//、%)、round() 函数
第 7 题 多选题 4 分
在丝绸之路上,商人需要重复标记货物编号。关于字符串的操作,以下说法正确的有?(多选)
A. "丝绸" * 3 的结果是 "丝绸丝绸丝绸"
B. "丝" + "绸" 的结果是 "丝绸"
C. "丝绸" * 0 的结果是空字符串 ""
D. "丝绸" + 3 可以直接执行,结果为 "丝绸3"
✅ 正确答案:ABC
💡 考点解析:字符串的拼接(+)与重复(*)
第 8 题 多选题 4 分
商人需要复制一份货物清单。关于列表的复制,以下说法正确的有?(多选)
A. list2 = list1 是引用赋值,修改 list2 会影响 list1
B. list2 = list1.copy() 是浅拷贝,修改 list2 不会影响 list1
C. list2 = list1[:] 可以创建一个新的列表副本
D. 列表可以直接用 list2 = list1 * 1 来创建副本
✅ 正确答案:ABC
💡 考点解析:列表的赋值、拷贝与引用
第 9 题 多选题 4 分
驼队在沙漠中行进,每天都会检查是否到达下一个驿站。以下关于 while 循环的说法,正确的有?(多选)
A. while 循环在条件为 True 时会一直执行循环体
B. while True: 是一个无限循环,必须配合 break 使用才能退出
C. while 循环的条件可以是比较表达式,如 while distance < 100:
D. while 循环的条件不能使用逻辑运算符(and、or、not)
✅ 正确答案:ABC
💡 考点解析:while 循环的条件判断与控制
第 10 题 多选题 4 分
在丝路贸易数据处理中,常用的内置函数可以帮助快速计算。以下关于内置函数的说法,正确的有?(多选)
A. max([15, 28, 9, 42, 33]) 的结果是 42
B. min([15, 28, 9, 42, 33]) 的结果是 9
C. abs(-100) 的结果是 100
D. sum([1, 2, 3, 4, 5]) 的结果是 15
✅ 正确答案:ABCD
💡 考点解析:常用内置函数(max、min、abs、sum)
第 11 题 编程操作题 15 分

题目描述:
丝绸之路上的驼队每行进 7 天就需要在驿站休息 1 天。请你编写程序,用户输入一个天数编号(从第1天开始),程序判断该天是否为休息日。
判断规则:如果天数编号能被 7 整除(即余数为0),则该天为休息日,输出"第X天是休息日"。否则,输出"第X天继续赶路"。

输入格式:
一行,一个正整数,表示天数编号。

输出格式:
一行,按规则输出判断结果。
示例输入1:
7
示例输出1:
第7天是休息日
示例输入2:
5
示例输出2:
第5天继续赶路

示例输入:

示例输出:

✅ 参考答案:
📖 参考代码
day = int(input())
if day % 7 == 0:
    print("第" + str(day) + "天是休息日")
else:
    print("第" + str(day) + "天继续赶路")
第 12 题 编程操作题 15 分

题目描述:
在丝绸之路的丝绸贸易中,不同地区的度量单位不同。中原地区使用"尺",西域使用"米"。已知:1尺 ≈ 0.33米。
请你编写一个函数 convert_to_meter(chi),接收一个尺数(整数),返回对应的米数(保留两位小数)。然后在主程序中,用户输入一个尺数,调用函数并输出换算结果。

输入格式:
一行,一个正整数,表示尺数。

输出格式:
一行,输出"X尺 ≈ Y米"(Y为换算后的米数,保留两位小数)。

示例输入:

15

示例输出:

15尺 ≈ 4.95米
✅ 参考答案:
📖 参考代码
def convert_to_meter(chi):
    return round(chi * 0.33, 2)
chi = int(input())
meter = convert_to_meter(chi)
print(str(chi) + "尺 ≈ " + str(meter) + "米")
第 13 题 编程操作题 20 分

题目描述:
丝绸之路上的瓷器来自不同的窑口,每个窑口生产的瓷器有不同的质量等级。请你编写程序,实现以下功能:
1. 用户先输入一个窑口名称(如"景德镇"、"德化"、"龙泉")。
2. 根据窑口输出对应的等级和特色:
- 景德镇 → "等级:御窑,特色:青花瓷"
- 德化 → "等级:官窑,特色:白瓷"
- 龙泉 → "等级:民窑,特色:青瓷"
- 其他输入 → "未收录该窑口信息"
3. 然后用户输入该批次瓷器的数量(正整数)。
4. 程序根据等级判断每件瓷器的单价:
- 御窑(景德镇):每件 500 文
- 官窑(德化):每件 300 文
- 民窑(龙泉):每件 100 文
5. 输出该批次瓷器的总价。

输入格式:
第一行:窑口名称(字符串)。
第二行:瓷器数量(正整数)。

输出格式:
第一行:窑口等级和特色信息(或"未收录该窑口信息")。
如果窑口被收录,第二行输出:该批次总价:X文。
如果窑口未被收录,不输出第二行。
示例输入1:
景德镇
3
示例输出1:
等级:御窑,特色:青花瓷
该批次总价:1500文
示例输入2:
汝窑
5
示例输出2:
未收录该窑口信息

示例输入:

示例输出:

✅ 参考答案:
📖 参考代码
kiln = input()
quantity = int(input())
if kiln == "景德镇":
    print("等级:御窑,特色:青花瓷")
    price = 500
    total = price * quantity
    print("该批次总价:" + str(total) + "文")
elif kiln == "德化":
    print("等级:官窑,特色:白瓷")
    price = 300
    total = price * quantity
    print("该批次总价:" + str(total) + "文")
elif kiln == "龙泉":
    print("等级:民窑,特色:青瓷")
    price = 100
    total = price * quantity
    print("该批次总价:" + str(total) + "文")
else:
    print("未收录该窑口信息")
第 14 题 编程操作题 20 分

题目描述:
"一带一路"倡议涵盖了众多沿线国家。请你编写程序,实现对贸易伙伴国家的统计功能:
1. 程序初始包含一份已有的国家列表:countries = ["哈萨克斯坦", "乌兹别克斯坦", "伊朗"]。
2. 用户首先输入一个整数 m,表示接下来要进行 m 次操作。
3. 每次操作为一行输入,格式如下:
- join 国家名:表示有新的国家加入贸易合作,将其添加到列表末尾。
- leave 国家名:表示有国家退出合作,将其从列表中移除(如果存在)。
- count:统计并输出当前国家数量。
- list:按顺序输出当前所有国家名称,每行一个,前面加上编号(从1开始)。
4. 注意:如果执行 leave 操作时,列表中国家数量为1,则不能移除(至少保留一个国家),并输出"无法移除,至少保留一个国家。"

输入格式:
第一行:一个正整数 m,表示操作次数。
接下来 m 行:每行一个操作命令。

输出格式:
对 count 命令:输出"当前合作伙伴数量:X国"。
对 list 命令:先输出"===合作伙伴列表===",然后每行输出"编号. 国家名"。
对无法移除的情况:输出"无法移除,至少保留一个国家。"

示例输入:

6
list
join 土耳其
join 埃及
count
leave 伊朗
list

示例输出:

===合作伙伴列表===
1. 哈萨克斯坦
2. 乌兹别克斯坦
3. 伊朗
当前合作伙伴数量:5国
===合作伙伴列表===
1. 哈萨克斯坦
2. 乌兹别克斯坦
3. 土耳其
4. 埃及
✅ 参考答案:
📖 参考代码
countries = ["哈萨克斯坦", "乌兹别克斯坦", "伊朗"]
m = int(input())
for _ in range(m):
    cmd = input()
    if cmd == "count":
        print("当前合作伙伴数量:" + str(len(countries)) + "国")
    elif cmd == "list":
        print("===合作伙伴列表===")
        for i in range(len(countries)):
            print(str(i + 1) + ". " + countries[i])
    elif cmd.startswith("join "):
        name = cmd[5:]
        countries.append(name)
    elif cmd.startswith("leave "):
        name = cmd[6:]
        if len(countries) <= 1:
            print("无法移除,至少保留一个国家。")
        elif name in countries:
            countries.remove(name)