计算机基础期末考试模拟试卷(第二套)
一、单选题(共15题,30.0分)
1. (单选题, 2.0分) 在Python类中,关于受保护成员(protected)的说法,正确的是____。
A. 以两个下划线开始
B. 以一个下划线开始
C. 使用protected关键字声明
D. 不以下划线开始
2. (单选题, 2.0分) 在下列关于Python导入模块的说法中,错误的是____。
A. from math import * 会导入math模块的所有函数
B. import numpy as np 可以用np作为numpy的别名
C. from PIL import Image 只导入Image类
D. 一个Python文件最多只能导入5个模块
3. (单选题, 2.0分) 执行下面的代码后,要在第3行第2列的位置显示图表,正确的语句是____。
python
fig, ax = plt.subplots(nrows=4, ncols=3, figsize=(8,6))
A. ax[2][1].plot([1,2,3], [4,5,6])
B. ax[3][2].plot([1,2,3], [4,5,6])
C. ax[2,1].plot([1,2,3], [4,5,6])
D. ax[8].plot([1,2,3], [4,5,6])
4. (单选题, 2.0分) 以下列表推导式中,能正确生成10到50之间所有能被7整除的数组成的列表是____。
A. [x for x in range(10,51) if x%7==0]
B. [x for x in range(7,50) if x%7!=0]
C. [x for x in range(10,50) if x%7==0]
D. [x%7 for x in range(10,51)]
5. (单选题, 2.0分) 执行语句import numpy as np后,要创建一个3×3的全零数组,正确的语句是____。
A. arr = np.zeros(3,3)
B. arr = np.zeros([3,3])
C. arr = np.zero((3,3))
D. arr = np.zeros((3,3))
6. (单选题, 2.0分) 文件对象fp,语句fp.readlines()的返回值数据类型是____。
A. 字符串
B. 列表
C. 元组
D. 字典
7. (单选题, 2.0分) 在下列关于try-except语句的说法中,正确的是____。
python
try:
x = int(input())
y = 10 / x
print(y)
except ZeroDivisionError:
print("除数不能为零")
except ValueError:
print("输入错误")
else:
print("执行成功")
A. 如果输入0,会输出"执行成功"
B. 如果输入abc,会输出"除数不能为零"
C. 如果输入5,会输出"执行成功"
D. else语句块总是会执行
8. (单选题, 2.0分) jieba库中,下列语句属于全模式分词的是____。
A. jieba.lcut('我爱自然语言处理')
B. jieba.lcut('我爱自然语言处理', cut_all=True)
C. jieba.lcut_for_search('我爱自然语言处理')
D. jieba.add_word('自然语言处理')
9. (单选题, 2.0分) 已知s = '2024-01-15',则s.split('-')的返回值是____。
A. ['2024', '01', '15']
B. ['2024-01-15']
C. ['2024', '-', '01', '-', '15']
D. 报错
10. (单选题, 2.0分) 下面关于类和对象的说法,错误的是____。
A. 类是对象的模板
B. 对象是类的实例
C. 一个类只能创建一个对象
D. 类中可以定义属性和方法
11. (单选题, 2.0分) 在下列关于文件操作的说法中,正确的是____。
A. 打开文件后必须手动关闭
B. with open() 语句会自动关闭文件
C. 文本文件和二进制文件的打开方式完全相同
D. 文件打开后不能修改读写模式
12. (单选题, 2.0分) 利用matplotlib绘图时,用于设置图表标题的函数是____。
A. plt.title()
B. plt.xlabel()
C. plt.label()
D. plt.text()
13. (单选题, 2.0分) 假定执行了如下的语句,则____。
python
fp = open("test.txt", "w", encoding='utf-8')
A. fp.read() 是正确的
B. fp.readlines() 是正确的
C. fp.write("Hello") 是正确的
D. fp.readline() 是正确的
14. (单选题, 2.0分) 要绘制一个散点图,所有点的坐标为(1,2), (2,4), (3,6),正确的语句是____。
A. plt.scatter([1,2,3], [2,4,6])
B. plt.plot([1,2,3], [2,4,6], 'o')
C. plt.scatter((1,2), (2,4), (3,6))
D. A和B都正确
15. (单选题, 2.0分) PIL库中用于调整图像大小的方法是____。
A. size()
B. resize()
C. scale()
D. transform()
二、程序填空题(共2题,24.0分)
16. (程序填空题, 12.0分) 程序的功能是读取RGB彩色图像,提取红色通道,计算红色通道的平均值,并将红色通道单独显示出来。
python
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
__(1)__:
im = Image.open(r"landscape.jpg")
arr = __(2)__(im)
# 提取红色通道
red_channel = arr[:, :, __(3)__]
# 计算平均值
avg_red = np.__(4)__(red_channel)
print(f"红色通道平均值: {avg_red:.2f}")
# 显示红色通道
plt.imshow(red_channel, cmap='Reds')
plt.title('红色通道')
plt.colorbar()
plt.show()
except Exception as e:
print(f"发生错误: {e}")
第1空:________
第2空:________
第3空:________
第4空:________
17. (程序填空题, 12.0分) 程序的功能是读取CSV文件中的商品销售数据,计算总销售额,找出销售额最高的商品。
文件sales.csv内容示例:
商品名称,单价,销量
手机,2999,120
电脑,5999,80
平板,1999,150
python
import csv
file = open(r"sales.csv", "r", __(1)__='utf-8')
reader = __(2)__(file)
header = next(reader) # 跳过表头
total_sales = 0
max_item = ["", 0]
for row in reader:
name = row[0]
price = float(row[1])
quantity = int(row[2])
sales = price * quantity
total_sales += sales
if sales __(3)__ max_item[1]:
max_item = [name, sales]
print(f"总销售额: {total_sales:.2f}元")
print(f"销售额最高的商品: {max_item[0]}, 销售额: {max_item[__(4)__]:.2f}元")
file.close()
第1空:________
第2空:________
第3空:________
第4空:________
三、程序调试题(共2题,20.0分)
18. (程序调试题, 10.0分) 下面的程序有4个错误,请改正。改正的语句后面添加注释:#此行有错误,已经改正
程序功能:读取学生成绩数据,绘制各科成绩的箱形图,并在另一个子图中绘制平均分的条形图。
python
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] == ['SimHei']
# 读取数据
data = {
'语文': [85, 90, 78, 92, 88],
'数学': [92, 88, 95, 90, 85],
'英语': [78, 95, 82, 88, 90]
}
df = pd.DataFrame(data)
fig = plt.figure(figsize=(12,5))
# 绘制箱形图
plt.subplot(1,2,1)
df.boxplot
plt.title('各科成绩分布')
plt.ylabel('分数')
# 绘制平均分条形图
plt.subplot(1,2,2)
subjects = df.columns
avg_scores = df.mean()
plt.bar(subjects, avg_scores, color=['red','green','blue'])
plt.title('各科平均分')
plt.ylabels('平均分')
plt.show()
请将改正后的完整程序粘贴在答题框中。
19. (程序调试题, 10.0分) 下面的程序有4个错误,请改正。改正的语句后面添加注释:#此行有错误,已经改正
程序功能:创建一个字典存储5个学生的成绩,计算平均分,找出最高分和最低分的学生。
python
def analyze_scores(scores_dict):
total = 0
max_name = ""
max_score = 0
min_name = ""
min_score = 100
for name, score on scores_dict.items():
total += score
if score > max_score:
max_name = name
max_score = score
if score > min_score:
min_name = name
min_score = score
avg = total / len(scores_dict)
return avg, max_name, max_score, min_name, min_score
students = {
'张三': 85,
'李四': 92,
'王五': 78,
'赵六': 95,
'孙七': 88
}
avg, max_n, max_s, min_n, min_s == analyze_scores(students)
print(f"平均分: {avg:.2f}")
print(f"最高分: {max_n} - {max_s}分")
print(f"最低分: {min_n} - {min_s}分")
请将改正后的完整程序粘贴在答题框中。
四、编程题(共2题,26.0分)
20. (编程题, 14.0分)
文本文件products.csv中存放了商品信息,包括商品编号、名称、类别、价格、库存,文件内容如图所示:
编号,名称,类别,价格,库存
P001,iPhone 15,手机,5999,50
P002,MacBook Pro,电脑,12999,30
P003,iPad Air,平板,3999,80
P004,AirPods Pro,耳机,1999,120
P005,Apple Watch,手表,2999,60
请编写程序,完成如下功能:
- 从文件中读取数据
- 计算库存总价值(价格×库存的总和)
- 找出库存量最大和最小的商品
- 统计各类别的商品数量
- 将库存价值超过20万的商品信息写入文件high_value.csv
输出示例:
库存总价值: 1159970元
库存最多: AirPods Pro (120件)
库存最少: MacBook Pro (30件)
类别统计: {'手机': 1, '电脑': 1, '平板': 1, '耳机': 1, '手表': 1}
high_value.csv示例内容:
编号,名称,类别,价格,库存,库存价值
P002,MacBook Pro,电脑,12999,30,389970
P001,iPhone 15,手机,5999,50,299950
P005,Apple Watch,手表,2999,60,179940
请将完整程序代码粘贴在答题框中。
21. (编程题, 12.0分)
设计一个表示银行账户的BankAccount类,包含以下内容:
- 数据成员:account_no(账号)、owner(户主)、balance(余额)
- 构造函数:初始化账号、户主和初始余额
- deposit(amount)方法:存款,增加余额
- withdraw(amount)方法:取款,减少余额(余额不足时提示)
- get_balance()方法:查询余额
- display()方法:显示账户信息
编写主程序测试所定义的类。要求:创建2个账户对象,进行存取款操作,输出界面如下图所示。
====== 账户1 ======
账号: 6222001234567890
户主: 张三
初始余额: 1000元
存入500元
当前余额: 1500元
取出300元
当前余额: 1200元
====== 账户2 ======
账号: 6222009876543210
户主: 李四
初始余额: 2000元
存入1000元
当前余额: 3000元
取出5000元
余额不足!当前余额: 3000元
====== 最终账户信息 ======
账户1 - 账号: 6222001234567890, 户主: 张三, 余额: 1200元
账户2 - 账号: 6222009876543210, 户主: 李四, 余额: 3000元
请将完整程序代码粘贴在答题框中。
参考答案
一、单选题答案
- B 2. D 3. A 4. A 5. D
- B 7. C 8. B 9. A 10. C
- B 12. A 13. C 14. D 15. B
二、程序填空题答案
16题答案:
- try
- np.array
- 0
- mean
17题答案:
- encoding
- csv.reader
- 1
三、程序调试题参考答案
18题参考答案:
python
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] #此行有错误,已经改正
# 读取数据
data = {
'语文': [85, 90, 78, 92, 88],
'数学': [92, 88, 95, 90, 85],
'英语': [78, 95, 82, 88, 90]
}
df = pd.DataFrame(data)
fig = plt.figure(figsize=(12,5))
# 绘制箱形图
plt.subplot(1,2,1)
df.boxplot() #此行有错误,已经改正
plt.title('各科成绩分布')
plt.ylabel('分数')
# 绘制平均分条形图
plt.subplot(1,2,2)
subjects = df.columns
avg_scores = df.mean()
plt.bar(subjects, avg_scores, color=['red','green','blue'])
plt.title('各科平均分')
plt.ylabel('平均分') #此行有错误,已经改正
plt.tight_layout() #此行有错误,已经改正
plt.show()
19题参考答案:
python
def analyze_scores(scores_dict):
total = 0
max_name = ""
max_score = 0
min_name = ""
min_score = 100
for name, score in scores_dict.items(): #此行有错误,已经改正
total += score
if score > max_score:
max_name = name
max_score = score
if score < min_score: #此行有错误,已经改正
min_name = name
min_score = score
avg = total / len(scores_dict)
return avg, max_name, max_score, min_name, min_score
students = {
'张三': 85,
'李四': 92,
'王五': 78,
'赵六': 95,
'孙七': 88
}
avg, max_n, max_s, min_n, min_s = analyze_scores(students) #此行有错误,已经改正
print(f"平均分: {avg:.2f}")
print(f"最高分: {max_n} - {max_s}分")
print(f"最低分: {min_n} - {min_s}分")
四、编程题参考答案
20题参考答案:
python
# 读取数据
fp = open(r"products.csv", "r", encoding='utf-8')
lines = fp.readlines()
fp.close()
products = []
for i in range(1, len(lines)):
data = lines[i].strip().split(',')
pid = data[0]
name = data[1]
category = data[2]
price = float(data[3])
stock = int(data[4])
value = price * stock
products.append([pid, name, category, price, stock, value])
# 计算库存总价值
total_value = sum([p[5] for p in products])
print(f"库存总价值: {total_value:.0f}元")
# 找出库存最多和最少的商品
max_stock = max(products, key=lambda x: x[4])
min_stock = min(products, key=lambda x: x[4])
print(f"库存最多: {max_stock[1]} ({max_stock[4]}件)")
print(f"库存最少: {min_stock[1]} ({min_stock[4]}件)")
# 统计类别
category_count = {}
for p in products:
cat = p[2]
if cat in category_count:
category_count[cat] += 1
else:
category_count[cat] = 1
print(f"类别统计: {category_count}")
# 写入高价值商品
fp_out = open("high_value.csv", "w", encoding='utf-8')
fp_out.write("编号,名称,类别,价格,库存,库存价值\n")
for p in products:
if p[5] > 200000:
fp_out.write(f"{p[0]},{p[1]},{p[2]},{p[3]:.0f},{p[4]},{p[5]:.0f}\n")
fp_out.close()
21题参考答案:
python
class BankAccount:
def __init__(self, account_no, owner, balance=0):
self.account_no = account_no
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"存入{amount}元")
print(f"当前余额: {self.balance}元")
def withdraw(self, amount):
if amount > self.balance:
print(f"余额不足!当前余额: {self.balance}元")
else:
self.balance -= amount
print(f"取出{amount}元")
print(f"当前余额: {self.balance}元")
def get_balance(self):
return self.balance
def display(self):
print(f"账号: {self.account_no}, 户主: {self.owner}, 余额: {self.balance}元")
# 测试程序
print("====== 账户1 ======")
acc1 = BankAccount("6222001234567890", "张三", 1000)
print(f"账号: {acc1.account_no}")
print(f"户主: {acc1.owner}")
print(f"初始余额: {acc1.balance}元")
print()
acc1.deposit(500)
print()
acc1.withdraw(300)
print()
print("====== 账户2 ======")
acc2 = BankAccount("6222009876543210", "李四", 2000)
print(f"账号: {acc2.account_no}")
print(f"户主: {acc2.owner}")
print(f"初始余额: {acc2.balance}元")
print()
acc2.deposit(1000)
print()
acc2.withdraw(5000)
print()
print("====== 最终账户信息 ======")
print("账户1 - ", end="")
acc1.display()
print("账户2 - ", end="")
acc2.display()