考试须知¶

1.填写自己的学号姓名班级等信息,包括文件名以及下面的考生信息。¶

2.将考试文件代码填写完整,如果提示警告,可以忽略。¶

3.最终保存成html格式文件交回。点击左上角file选项,选择download as,再选择HTML,将文件保存成html格式文件。¶

4.考生信息不完整,最终提交文件不是html格式文件等格式问题将酌情扣分。¶

考生信息¶

  • 姓名:王璇璐
  • 学号:20407141
  • 班级:计科2001班

1.编写程序,求$1!+2!+3!+...20!$的和¶

In [33]:
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

total_sum = 0
for i in range(1, 21):
    total_sum += factorial(i)

print(total_sum)
2561327494111820313

2.编写程序,求列表s=[9,7,8,3,2,1,55,6]中元素的个数、最大数和最小数。并在列表s中添加一个元素10,从列表s中删除一个元素55。¶

In [34]:
# 定义列表
s = [9, 7, 8, 3, 2, 1, 55, 6]

# 计算元素个数
print("元素个数:", len(s))

# 计算最大值
print("最大值:", max(s))

# 计算最小值
print("最小值:", min(s))

# 添加元素10
s.append(10)

# 删除元素55
s.remove(55)
print("删除后的s列表:", s)
元素个数: 8
最大值: 55
最小值: 1
删除后的s列表: [9, 7, 8, 3, 2, 1, 6, 10]

3.编写程序,用循环打印如下图形,不用循环0分¶

TTTTTx
TTTTxx
TTTxxx
TTxxxx
Txxxxx
In [35]:
n = 5
for i in range(n):
    print("T"*(n-1-i) + "x"*(i+1))
TTTTx
TTTxx
TTxxx
Txxxx
xxxxx

4.编写程序,设计一个计算器,用户输入数字选择功能(1-4),其中功能1为加法,2为减法,3为乘法,4为除法,用函数定义加减乘除,然后用户输入两个数字,最终计算出两个数字的相应的加减乘除结果。¶

In [36]:
def add(x, y):
    return x + y

def sub(x, y):
    return x - y

def multiply(x, y):
    return x * y

def divide(x, y):
    return x / y

print("选择要进行的操作")
print("1. 加法")
print("2. 减法")
print("3. 乘法")
print("4. 除法")

choice = input("请输入您的选择(1/2/3/4):")

num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))

if choice == '1':
    print(num1, "+", num2, "=", add(num1, num2))

elif choice == '2':
    print(num1, "-", num2, "=", sub(num1, num2))

elif choice == '3':
    print(num1, "*", num2, "=", multiply(num1, num2))

elif choice == '4':
    print(num1, "/", num2, "=", divide(num1, num2))

else:
    print("无效输入")
选择要进行的操作
1. 加法
2. 减法
3. 乘法
4. 除法
请输入您的选择(1/2/3/4):3
请输入第一个数字:321
请输入第二个数字:12
321.0 * 12.0 = 3852.0

5.编写程序,定义一个学生类,类属性包括姓名(name)、年龄(age)和成绩(course)[语文、数学、英语],每科成绩的类型为整数。在类方法中,使用get_name函数获取学生的姓名,返回str类型;使用get_age函数获取学生的年龄,返回int类型;使用get_course函数返回3门科目中最高分数,返回int类型。写好类后,用st=Student('zhangming',20,[69,88,100])测试,并输出结果。¶

In [37]:
class Student:
    def __init__(self, name, age, course):
        self.name = name
        self.age = age
        self.course = course

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age

    def get_course(self):
        return max(self.course)

# 测试
st = Student('zhangming', 20, [69, 88, 100])
print(st.get_name()) # 输出姓名
print(st.get_age()) # 输出年龄
print(st.get_course()) # 输出最高分
zhangming
20
100

6.编写程序,根据下表的数据绘制柱状图(条形图)¶

X Y X Y
-3.00 4 0.15 255
-2.50 12 0.75 170
-1.75 50 1.25 100
-1.15 120 1.85 20
-0.50 205 2.45 14
In [38]:
import matplotlib.pyplot as plt

# 定义数据
x1 = [-3.00, -2.50, -1.75, -1.15, -0.50]
y1 = [4, 12, 50, 120, 205]

x2 = [0.15, 0.75, 1.25, 1.85, 2.45]
y2 = [255, 170, 100, 20, 14]

# 绘制柱状图
bar_width = 0.3
plt.bar(x1, y1, width=bar_width, align='center', label='Bar 1')
plt.bar(x2, y2, width=bar_width, align='center', label='Bar 2')
plt.legend()

# 设置图表标题和轴标签
plt.title("Bar Chart")
plt.xlabel("X")
plt.ylabel("Y")

# 显示图表
plt.show()

7.编写程序,某种水泥在凝固时放出的热量Y(cag/g)与水泥中4种化学成分X1、X2、X3、X4有关,现测得13组数据,希望从中选出主要的变量,建立Y与它们的线性回归方程(分别使用线性回归、岭回归、lasso回归)。¶

注:训练集:测试集=8:2,随机种子采用你学号后两位,例如你学号后两位=01,则random_state=1,如果最后两位=34,则random_state=34。最终结果打印出各个回归的w和b系数即可。

序号 X1 X2 X3 X4 Y
1 7 26 6 60 78.5
2 1 29 15 52 74.3
3 11 56 8 20 104.3
4 11 31 8 47 87.6
5 7 52 6 33 95.9
6 11 55 9 22 109.2
7 3 71 17 6 102.7
8 1 31 22 44 72.5
9 2 54 18 22 93.1
10 21 47 4 26 115.9
11 1 40 23 34 83.8
12 11 66 9 12 113.3
13 10 68 8 12 109.4
In [45]:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge, Lasso

# 手动输入数据
X = np.array([[7,26,6,60],
              [1,29,15,52],
              [11,56,8,20],
              [11,31,8,47],
              [7,52,6,33],
              [11,55,9,22],
              [3,71,17,6],
              [1,31,22,44],
              [2,54,18,22],
              [21,47,4,26],
              [1,40,23,34],
              [11,66,9,12],
              [10,68,8,12]])
y = np.array([78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7, 72.5, 93.1, 115.9, 83.8, 113.3, 109.4])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=41)

# 线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
print('线性回归: w =', lr.coef_, ', b =', lr.intercept_)


# 岭回归
ridge = Ridge(alpha=1)
ridge.fit(X_train, y_train)
print('岭回归: w =', ridge.coef_, ', b =', ridge.intercept_)


# Lasso回归
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
print('Lasso回归: w =', lasso.coef_, ', b =', lasso.intercept_)
线性回归: w = [1.98745297 0.7125071  0.60342221 0.09234506] , b = 36.81325582051012
岭回归: w = [ 1.67471703  0.47772991  0.30829506 -0.14400592] , b = 60.93912056831108
Lasso回归: w = [ 1.7448631   0.53538928  0.37348389 -0.08626773] , b = 55.156351700865876

8.编写程序,用朴素贝叶斯算法进行分类,数据集如下¶

注:训练集:测试集=1:1,随机种子采用你学号后两位,例如你学号后两位=01,则random_state=1,如果最后两位=34,则random_state=34。最终结果输出你预测结果、实际结果以及模型得分三项。

序号 年龄 收入 是否为学生 信誉 购买计算机
1 <=30 高 否 中 否
2 <=30 高 否 优 否
3 31-40 高 否 中 是
4 >40 中 否 中 是
5 >40 低 是 中 是
6 >40 低 是 优 否
7 31-40 低 是 优 是
8 <=30 中 否 中 否
9 <=30 低 是 中 是
10 >40 中 是 中 是
11 <=30 中 是 优 是
12 31-40 中 否 优 是
13 31-40 高 是 中 是
14 >40 中 否 优 否
In [62]:
import numpy as np
import pandas as pd
from sklearn import metrics
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

x = np.array(
    [
        [1, 3, 0, 1, 0],
        [1, 3, 0, 2, 1],
        [2, 3, 0, 2, 1],
        [3, 2, 0, 1, 1],
        [3, 1, 1, 1, 1],
        [3, 1, 1, 2, 0],
        [2, 1, 1, 2, 1],
        [1, 2, 0, 1, 0],
        [1, 1, 1, 1, 1],
        [3, 2, 1, 1, 1],
        [1, 2, 1, 2, 1],
        [2, 2, 0, 2, 1],
        [2, 3, 1, 1, 1],
        [3, 2, 0, 2, 0],
    ]
)

y = np.array(
    [
        0,1,1,1,1,0,1,0,1,1,1,1,1,0
    ]
)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.5, random_state=41
                                                   )
# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB()
clf.fit(X_train, y_train)
# 评估
y_predict = clf.predict(X_test)
score_gnb = metrics.accuracy_score(y_predict,y_test)

print('预测结果:',y_predict)
print('实际结果:',y_test)
print('模型得分:',score_gnb)
预测结果: [0 1 1 1 1 1 0]
实际结果: [0 1 1 1 1 1 0]
模型得分: 1.0
In [ ]: