模拟试卷2

计算机基础期末考试模拟试卷(第二套)

一、单选题(共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

请编写程序,完成如下功能:

  1. 从文件中读取数据
  2. 计算库存总价值(价格×库存的总和)
  3. 找出库存量最大和最小的商品
  4. 统计各类别的商品数量
  5. 将库存价值超过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元

请将完整程序代码粘贴在答题框中。


参考答案

一、单选题答案

  1. B 2. D 3. A 4. A 5. D
  2. B 7. C 8. B 9. A 10. C
  3. B 12. A 13. C 14. D 15. B

二、程序填空题答案

16题答案:

  1. try
  2. np.array
  3. 0
  4. mean

17题答案:

  1. encoding
  2. csv.reader
  3. 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()
相关推荐
南雨北斗1 天前
js 严格模式
前端
聪明的Levi1 天前
FRONT END REVIEW
前端·css·html
winfredzhang1 天前
零依赖的艺术:用原生 JS 打造“ZenReader”沉浸式阅读器
javascript·frontend·uxdesign·productivity·#webdevelopment
仙人掌一号1 天前
React 白屏机制原理分析[共1500字,阅读时长8min]
前端·javascript·面试
sophie旭1 天前
Suspense+React.lazy--组件渲染如何暂停 → 等待 → 恢复
前端·javascript·react.js
我的div丢了肿么办1 天前
js中worker的详细讲解
前端·javascript·vue.js
三十_1 天前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
前端·后端·webrtc
陈泡泡_1 天前
Android抓取trace的几种方式
前端
外啫啫1 天前
vue3实现前端生成word并下载
前端·javascript