作业典例汇总(二)
注:已输入的库已全局应用,有需要可自行添加。
1. 数学计算【难度:⭐】
在 3 行中分别输入一个浮点数,利用下面公式计算并输出 x 的值,严格保留小数点后2位数字。
a = 学号最后一位, b = 1, c = -1 。
import math
a=9;b=1;c=-1
d=pow(b*b-4*a*c,0.5)
print("{:.2f}".format((-1+d)/(2*a)))
2. 随机数计算【难度:⭐】
(1)随机生成1000个字母,包含大写字母和小写字母,统计各个字母出现的次数,统计时忽略字母的大小写,将统计结果按照字母出现的次数从高到低排序输出。
import random
from collections import Counter
# 生成随机字母列表
letters = [random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') for _ in range(1000)]
# 统计字母出现次数,忽略大小写
letter_counts = Counter([letter.lower() for letter in letters])
# 按照字母出现次数从高到低排序输出
for letter, count in sorted(letter_counts.items(), key=lambda x: x[1], reverse=True):
print(f"{letter}: {count}")
2)在程序中随机为用户生成 6 位数短信验证码,包含大写字母。
list=random.choices('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ',k=6)
code=''.join(list)
print(code)
3. 数组操作【难度:⭐⭐】
(1)在已知a为4行5列的二维数组,内容如下所示,请回答以下问题:
a = [ [1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20] ]
- a[2, 3]、a[2]、a[2][3] 、a[2][:3]、a[:][:3] 、a[:, :3]各自表示什么含义?
- 如果只想获取第2行和第4行数据,如何表示?请打印
- 如果只想获取第3列和第5列数据,如何表示?请打印
- 如果想获取大于10且能被3整除的数据,如何表示?请打印
- 将该数组垂直平均分割成2个子数组,并打印2个子数组
- 将该数组水平分割为3个子数组:第1列,第2-4列,第6列,并打印3个子数组
'''
a[2,3] 表示访问二维数组中第3行第4列的元素
a[2] 表示访问二维数组中第3行的所有元素
a[2][3] 表示访问二维数组中第3行第4列的元素
a[2][:3] 表示访问二维数组中第3行的前3个元素
a[:][:3] 和 a[:, :3]都表示访问二维数组中所有行的前3个元素
'''
import numpy as np
a = np.array([[1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20]])
print([a[1], a[3]])#获取第2行和第4行数据
print("len(a)=",len(a))
a_3_5 = [[a[i][2], a[i][4]] for i in range(len(a))]
print(a_3_5)#获取第3列和第5列数据
a_10_3 = a[(a > 10) & (a % 3 == 0)]
print(a_10_3)# 获取大于10且能被3整除的数据
a_vertical= np.vsplit(a, 2)
print(a_vertical)# 将该数组垂直平均分割成2个子数组
a_horizontal= np.hsplit(a, [1,4,5])
print(a_horizontal)# 将该数组水平分割为3个子数组:第1列,第2-4列,第6列
(2)创建一个10 X 10的随机数组并找到它的最大值与最小值
import numpy as np
import random as rd
a=np.random.rand(10,10)
print(a)
print("min=",np.min(a))
print("max=",np.max(a))
(3)对10×10随机矩阵做归一化处理
# 生成10x10的随机矩阵
matrix = np.random.rand(10, 10)
# 对每列进行归一化处理
normalized_matrix = matrix / np.linalg.norm(matrix, axis=0)
print(normalized_matrix)
4.绘图操作【难度:⭐⭐⭐】
(1)绘制如下饼图、线型图、直方图与散点图(其中饼图、直方图、散点图所显示的数据自行指定范围随机生成),效果类似下图即可。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties#添加中文字符
font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=12)#修改字体
'''
绘制饼图
'''
# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [17.2, 27.6, 24.1, 31]
# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal') # 使饼图为正圆形
# 显示图像
plt.show()
'''
绘制线型圆
'''
# 数据
x = np.arange(0, 14, 0.1)
y = 4*np.cos(2*np.pi*x)
# 绘制线型图
plt.plot(x, y)
# 添加标题和标签
plt.title('正弦波y=cos(2πx)', fontproperties=font)
plt.xlabel("横轴:时间",fontproperties=font)
plt.ylabel('纵轴:振幅',fontproperties=font)
#设置坐标轴取值范围
plt.xlim(0, 14)
plt.ylim(-4, 4)
# 显示图像
plt.show()
'''
绘直方图
'''
# 数据
x = np.random.randn(1000)
# 绘制直方图
plt.hist(x, bins=50)
# 添加标题和标签
plt.title('直方图',fontproperties=font)
plt.xlabel('X轴',fontproperties=font)
plt.ylabel('Y轴',fontproperties=font)
# 显示图像
plt.show()
'''
绘散点图
'''
# 数据
x = np.random.randn(100)
y = 3 * x + 2 + np.random.randn(100)
# 绘制散点图
plt.scatter(x, y)
# 添加标题和标签
plt.title('散点图', fontproperties=font)
plt.xlabel('X', fontproperties=font)
plt.ylabel('Y', fontproperties=font)
# 显示图像
plt.show()
(2)绘制一个二维随机漫步的图形,要求1000步。
import numpy as np
import matplotlib.pyplot as plt
# 数据
n_steps = 1000#要求1000步
x = np.zeros(n_steps)
y = np.zeros(n_steps)
# 随机漫步
for i in range(1, n_steps):
x[i] = x[i-1] + np.random.normal()
y[i] = y[i-1] + np.random.normal()
# 绘制图像
plt.plot(x, y)
# 添加标题和标签
plt.title('二维随机漫步',fontproperties=font)
plt.xlabel('x轴',fontproperties=font)
plt.ylabel('y轴',fontproperties=font)
# 显示图像
plt.show()
(3)绘制cos(x)-sin(x)+2cos(x/2)-2sin(x/2)+...+ncos(x/n)-nsin(x/n)曲线图(自行指定坐标轴范围)
import numpy as np
import matplotlib.pyplot as plt
# 数据
x = np.linspace(0, 4*np.pi, 500)
y = np.zeros_like(x)
# 计算y值
for n in range(1, 21):
y += n * np.cos(x/n) - n * np.sin(x/n)
# 绘制曲线图
plt.plot(x, y)
# 添加标题和标签
plt.title('曲线图',fontproperties=font)
plt.xlabel('x轴',fontproperties=font)
plt.ylabel('y轴',fontproperties=font)
# 显示图像
plt.show()
(4)显示一组二维数据的频度分布,并分别在x,y轴上,显示该维度的数据的频度分布(所显示数据可随机生成服从某种分布的二维数据)
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据,服从正态分布
data = np.random.normal(loc=0, scale=1, size=(1000, 2))
# 绘制二维数据频度分布图
plt.hist2d(data[:,0], data[:,1], bins=30, cmap=plt.cm.Blues)
# 显示x轴和y轴的频度分布
plt.hist(data[:,0], bins=30, alpha=0.5, color='red', orientation='vertical')
plt.hist(data[:,1], bins=30, alpha=0.5, color='green', orientation='horizontal')
# 添加标题和标签
plt.title('二维数据的频度分布',fontproperties=font)
plt.xlabel('x轴',fontproperties=font)
plt.ylabel('y轴',fontproperties=font)
# 显示图像
plt.show()