算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
terms = "立春雨水惊蛰春分清明谷雨"
print(terms[2:6])[start:end],包含 start 索引,不包含 end 索引;中文字符每个占一个索引位置。索引2-3是"雨水",索引4-5是"惊蛰",所以 terms[2:6] 为"雨水惊蛰"herbs = {"人参": 50, "当归": 30, "枸杞": 100, "黄芪": 80}
name = "当归"
quantity = herbs._______(name, "未找到")
print(quantity)get(key, default) 方法,键存在时返回对应值,不存在时返回默认值batik.txt 文件不存在,以下代码的输出是什么?try:
f = open("batik.txt", "r", encoding="utf-8")
print("文件打开成功")
except FileNotFoundError:
print("文件未找到")
finally:
print("操作结束")try-except-finally 异常处理——finally 块中的代码无论是否发生异常都会执行bonus 参数有默认值。执行以下代码的输出结果是什么?def calculate_score(scores, bonus=5):
total = sum(scores) + bonus
return total
result = calculate_score([85, 90, 78], 10)
print(result)10 会覆盖默认值 5,总和为 85+90+78+10=263import random
programs = ["三打白骨精", "大闹天宫", "哪吒闹海", "嫦娥奔月", "武松打虎"]
random.________(programs)
print(programs)random.shuffle(list) 原地随机打乱列表顺序append() 原地添加(A对);pop() 默认弹出末尾元素(B对);sort() 返回 None 而非新列表(C错);reverse() 原地反转(D对)for k in dict 遍历键(A对)、.values() 遍历值(B对)、.items() 遍历键值对(C对);字典不支持整数索引访问(D错)"r" 只读(A对)、"w" 覆盖写入(B对)、"a" 追加(C对)、with 上下文管理自动关闭(D对)split() 按分隔符拆分(A对)、strip() 去除两端空格(B对)、isdigit() 在字符串含字母时返回 False(C错)、lower() 转小写(D对)try-except 捕获异常(A对)、多个 except 捕获不同异常(B对)、finally 始终执行(C对)、else 无异常时执行(D对)题目描述:
中医药是中华民族的伟大创造,方剂是中医治病的主要手段。小明在学习中医方剂时,记录了以下常用方剂及其组成药材:
| 方剂名称 | 组成药材 |
|---------|---------|
| 四物汤 | 当归、川芎、白芍、熟地黄 |
| 四君子汤 | 人参、白术、茯苓、甘草 |
| 麻黄汤 | 麻黄、桂枝、杏仁、甘草 |
| 桂枝汤 | 桂枝、白芍、生姜、大枣、甘草 |
请编写程序:用户输入一个方剂名称,程序输出该方剂的组成药材及药材总数;如果方剂不存在,输出"未找到该方剂"。
输入格式:
输出格式:
- 如果找到方剂,第一行输出:{方剂名}的组成:{药材列表,空格分隔},第二行输出:共{数量}种药材
- 如果未找到,输出:未找到该方剂
示例输入1:
四物汤
示例输出1:
四物汤的组成:当归 川芎 白芍 熟地黄
共4种药材
示例输入2:
银翘散
示例输出2:
未找到该方剂
示例输入:
示例输出:
# 预设方剂数据
prescriptions = {
"四物汤": ["当归", "川芎", "白芍", "熟地黄"],
"四君子汤": ["人参", "白术", "茯苓", "甘草"],
"麻黄汤": ["麻黄", "桂枝", "杏仁", "甘草"],
"桂枝汤": ["桂枝", "白芍", "生姜", "大枣", "甘草"]
}
# 读取输入
name = input().strip()
# 查找并输出
if name in prescriptions:
herbs = prescriptions[name]
print(f"{name}的组成:{' '.join(herbs)}")
print(f"共{len(herbs)}种药材")
else:
print("未找到该方剂")
题目描述:
皮影戏是珍贵的非物质文化遗产。某皮影戏团将剧目信息存储在文件 shadow_play.txt 中,文件每行记录一个剧目,格式为:剧目名称 时长(时长单位为分钟)。请编写程序读取该文件,完成以下功能:
1. 统计总共有多少个剧目
2. 计算所有剧目的总时长
3. 找出时长最长的剧目名称和时长
输入格式:
输出格式:
- 第一行:剧目总数:{数量}
- 第二行:总时长:{总分钟数}分钟
- 第三行:最长剧目:{剧目名称} {时长}分钟
- 如果文件不存在,输出:文件未找到,请确认shadow_play.txt存在
示例文件内容(shadow_play.txt):
三打白骨精 30
大闹天宫 45
哪吒闹海 35
嫦娥奔月 25
示例输入:
示例输出:
try:
with open("shadow_play.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
count = 0
total_time = 0
longest_name = ""
longest_time = 0
for line in lines:
line = line.strip()
if line: # 跳过空行
parts = line.split()
name = parts[0]
time = int(parts[1])
count += 1
total_time += time
if time > longest_time:
longest_time = time
longest_name = name
if count > 0:
print(f"剧目总数:{count}")
print(f"总时长:{total_time}分钟")
print(f"最长剧目:{longest_name} {longest_time}分钟")
else:
print("文件中无数据")
except FileNotFoundError:
print("文件未找到,请确认shadow_play.txt存在")
题目描述:
蜡染(古称"蜡缬")是我国古老的少数民族民间传统纺织印染工艺,其图案中常见几何对称花纹。请编写程序,输入一个整数n,生成一个 n x n 的几何纹理图案,规则如下:
- 两条对角线(主对角线和副对角线)上的位置输出字符 "X"
- 其余位置输出字符 "O"
- 字符之间无空格
输入格式:
输出格式:
示例输入:
示例输出:
row == col 时为Xrow + col == n - 1 时为Xn = int(input())
for i in range(n):
row = ""
for j in range(n):
# 主对角线(左上→右下)或副对角线(右上→左下)
if i == j or i + j == n - 1:
row += "X"
else:
row += "O"
print(row)
题目描述:
某非遗陶瓷工坊有一份窑温记录文件 kiln_log.txt,记录了连续数小时的窑温数据(每行一个整数,单位:摄氏度)。正常烧制温度范围为 [800, 1200](包含边界)。请编写程序完成以下分析任务:
1. 读取文件中的所有温度数据
2. 统计低温(<800)、正常(800~1200)、高温(>1200)各有多少小时
3. 找出所有"异常段"——连续的温度不在正常范围内的段落。输出每个异常段的起始小时编号、结束小时编号(从1开始计数),以及该段的平均温度(保留1位小数)
输入格式:
输出格式:
- 第一行:低温:{数量} 正常:{数量} 高温:{数量}
- 接下来,每个异常段输出一行:异常段{编号}:{起始}-{结束} 平均{平均温度}
- 如果文件不存在,输出:文件未找到
示例文件内容(kiln_log.txt):
850
900
750
700
1100
1250
1300
1150
1000
示例输入:
示例输出:
try:
# 从文件读取温度数据
with open("kiln_log.txt", "r", encoding="utf-8") as f:
data = []
for line in f:
line = line.strip()
if line:
data.append(int(line))
# 统计低温、正常、高温时数
low = 0
normal = 0
high = 0
for t in data:
if t < 800:
low += 1
elif t > 1200:
high += 1
else:
normal += 1
print(f"低温:{low} 正常:{normal} 高温:{high}")
# 查找所有异常段(温度不在[800, 1200]范围内)
seg_id = 0
i = 0
while i < len(data):
# 判断当前小时是否为异常温度
if data[i] < 800 or data[i] > 1200:
seg_id += 1
start = i + 1 # 起始编号(从1开始)
total = 0
count = 0
# 收集连续的异常段
while i < len(data) and (data[i] < 800 or data[i] > 1200):
total += data[i]
count += 1
i += 1
end = i # 结束编号(i已指向异常段后的第一个正常位置)
avg = total / count
print(f"异常段{seg_id}:{start}-{end} 平均{avg:.1f}")
else:
i += 1
except FileNotFoundError:
print("文件未找到")