持续更新,新手代码勿喷.
各种包的安装:
1.打开cmd
2.输入pip install *** (***为包的名字),例如 pip install numpy
3.等待下载好之后,重新打开pycharm等编辑器就行了
题目:
第一题题解(json文件处理)
import json
n = int(input("输入n:"))
# 二维数组
List = [[]]*n
filename = "D:/Pycharm/实验三/score1034.json"
# 这里需要注意encoding='UTF-8',因为json用记事本打开后的编码是UTF-8,而默认的好像是GBK
with open(filename, 'r', encoding='UTF-8') as f:
data = json.load(f)
# 考虑到当n为奇数的时候,不能直接将对应的键值对全部打印出来,因此用到间隔为2的循环,然后用if处理末尾是奇数的情况
for i in range(0, n, 2):
List[i] = list(data[i].keys())
# 这一步保证最后一次赋值如果n是奇数,则不会将对应的values赋给list
if i+1 != n:
List[i+1] = list(data[i].values())
print(List)
第二题题解(csv文件处理)
import pandas as pd
import numpy as np
df = pd.DataFrame(pd.read_csv("D:\\Pycharm\\实验三\\成绩单数字.csv"))
List1 = df.values
List2 = df.columns
print(List2)
print(List1)
def Name():
name = str(input("输入学生姓名:"))
for i in range(len(List1)):
if name == List1[i][0]:
average = 0
print('[[', i + 1, '0', ']]')
for j in range(2, len(List1[i])):
average += List1[i][j]
print(name, "同学的平均成绩为{:.2f}".format(average / 6))
def Course():
course = str(input("输入课程名称:"))
for i in range(len(List2)):
if course == List2[i]:
average = 0
for j in range(len(List1)):
average += List1[j][i]
median = np.median(df[course])
deviation = np.std(df[course])
print(course, "课程平均成绩为{:.2f}".format(average/len(List1)))
print("该课程中位数为{:.2f}".format(median))
print("该课程标准差为{:.2f}".format(deviation))
Name()
Course()
第三题题解(利用 numpy 和 Matplotlib画出正余弦函数图)
import numpy as np
import matplotlib.pyplot as plt
# 标题
plt.title("COS & SIN")
x = np.linspace(0, 2*np.pi, 100)
s = np.sin(x)
c = np.cos(x)
# 绘制sinx
plt.plot(x, s, color='red')
# 绘制cosx
plt.plot(x, c, color='blue', linestyle='--')
plt.show()
第四题题解(读取文件,然后画出雷达图)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
# 使能够读取中文
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
filename = 'D:/Pycharm/实验三/scoreRadar.txt'
fp = open(filename, 'r', encoding='UTF-8')
List1 = [[]]*4
flag = 0
s = fp.readline()
while s:
# 去除换行符
s = s.strip('\n')
new_s = s.split("\t")
List1[flag] = new_s
s = fp.readline()
flag += 1
# 记录各个科目
radar_labels = np.array(List1[0][1:])
nAttr = len(radar_labels)
# 使用ggplot风格
plt.style.use('ggplot')
print(List1)
# 循环记录data的值
'''data = []
for i in range(3):
data.append([])
data[i] = np.array(List1[i+1][1:])'''
# 记录不同专业成绩数据
data = np.array([[95, 96, 85, 63, 91], [75, 93, 66, 85, 88], [86, 76, 96, 93, 67]])
values1 = np.array(data[0])
values2 = np.array(data[1])
values3 = np.array(data[2])
# 设置雷达图角度,用于平分切开一个平面
angles = np.linspace(0, 2*np.pi, nAttr, endpoint=False)
# 使雷达图封闭起来
values1 = np.concatenate((values1, [values1[0]]))
angles = np.concatenate((angles, [angles[0]]))
values2 = np.concatenate((values2, [values2[0]]))
values3 = np.concatenate((values3, [values3[0]]))
# 开始绘图
fig = plt.figure()
# 设置成极坐标形式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values1, 'b', linewidth=2, label='软件工程')
# fill可以用来填充颜色
# ax.fill(angles, values1, alpha=0.5)
ax.plot(angles, values2, 'g', linewidth=2, label='计算机科学与技术')
# ax.fill(angles, values2, alpha=0.5)
ax.plot(angles, values3, 'r', linewidth=2, label='网络工程')
# ax.fill(angles, values3, alpha=0.5)
ax.set_thetagrids(angles*180/np.pi, radar_labels)
plt.figtext(0.52, 0.95, '成绩雷达图', ha='center', size=20)
ax.grid(True)
plt.show()
fp.close()
第五题题解(读取文本,利用wordcloud生成词云)
import jieba
import wordcloud
# imread用来设置背景图片
from imageio import imread
r1 = open("校长2018.txt", "r", encoding="utf-8")
t1 = r1.read()
r1.close()
# 利用jieba库中的lcut函数实现对t1的切割分类
ls1 = jieba.lcut(t1)
txt1 = " ".join(ls1)
# 设置长宽高背景颜色,字体等 这里设置字体必须小写.
w1 = wordcloud.WordCloud(width=1000, height=800, background_color="black", font_path="msyh.ttc")
w1.generate(txt1)
w1.to_file('cp1.png')
# 自定义背景颜色和背景图片
background_color = str(input("输入你想要的背景颜色:"))
background_picture = str(input("输入你想要的背景的绝对路径:"))
mk = imread(background_picture)
r2 = open("校长2018毕业讲话.txt", "r", encoding="utf-8")
t2 = r2.read()
r2.close()
ls2 = jieba.lcut(t2)
txt2 = " ".join(ls2)
w2 = wordcloud.WordCloud(width=1000, height=800, background_color=background_color, font_path="simhei.ttf", mask=mk)
w2.generate(txt2)
w2.to_file('cp2.png')
# D:/Pycharm/xiaoyu.jpg
第六题题解(使用 numpy 实现矩阵的加法、减法、乘法和求逆)
import numpy as np
MA = np.array([[1, 2, 3], [4, 5, 6]])
MB = np.array([[1, 5, 6], [2, 7, 9]])
MC = np.array([[1, 4], [2, 5], [3, 6]])
MD = np.array([[-2, 1], [4, -3]])
# 加
def Plus(A, B):
return A+B
# 减
def Reduce(A, B):
return A-B
# 乘
def Multipication(A, B):
return A.dot(B)
# 逆
def Inverse(C):
return np.linalg.inv(C)
print("矩阵MA加矩阵MB等于:\n{}".format(Plus(MA, MB)))
print("矩阵MA减矩阵MB等于:\n{}".format(Reduce(MA, MB)))
print("矩阵MA乘矩阵MB等于:\n{}".format(Multipication(MA, MC)))
print("矩阵MD的逆等于:\n{}".format(Inverse(MD)))
第七题题解(使用 opencv 完成一幅图像的读取、显示,并用 matplotlib 画出该图像的直方图)
import cv2 as cv
import matplotlib.pyplot as plt
# 阅读图片
# 路径最好不要出现中文......
filename = "D://Pycharm//girlfriend.jpg"
img = cv.imread(filename)
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", img)
# 用matplotlib展示直方图
plt.hist(img.ravel(), 256)
# 用matplotlib展示原图像
'''b, g, r = cv.split(img)
dst_rgb = cv.merge([r, g, b])
plt.imshow(dst_rgb)
plt.xticks([])
plt.yticks([])'''
plt.show()
cv.waitKey(0)
第八题题解(使用 pil 完成一副图像的水平翻转、垂直翻转、水平+垂直翻转)
from PIL import Image
import matplotlib.pyplot as plt
filename = "D://Pycharm//xiaoyu.jpg"
# 图片读取
img = Image.open(filename)
plt.imshow(img)
def fanzhuan():
s = str(input("输入翻转方式:"))
if s == '水平翻转':
plt.imshow(img.transpose(Image.FLIP_LEFT_RIGHT))
plt.show()
elif s == '垂直翻转':
plt.imshow(img.transpose(Image.FLIP_TOP_BOTTOM))
plt.show()
elif s == '水平+垂直翻转':
plt.imshow(img.transpose(Image.ROTATE_180))
plt.show()
else:
print("输入错误")
fanzhuan()