大一上学习总结

大一上学习总结

第一次作业

在还没正式培训前的第一次作业是常试用numpy和matplotlib来画一个分段函数和一个3d旋转体。经过一番学习和各种百度,我画出了分段函数。代码如下:

import matplotlib.pyplot as plt
import numpy as np
import math
x1=np.arange(0.5,1,0.001)
a=pow(2,x1)
y1=np.log10(a)
plt.plot(x1,y1)
x2=np.arange(0,0.5,0.001)
b=-abs(x2)
y2=-np.power(math.e,b)+1
plt.plot(x2,y2)
x3=np.arange(-1,0,0.01)
y3=-2*x3
plt.plot(x3,y3)

大一上学习总结_第1张图片
然后通过学习后来发的答案发现自己的代码可以简化,而且明白了三维旋转体的实现。关键的是,其实这次作业是为了培养我们的百度能力!?2333大一上学习总结_第2张图片

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# -1~1 200个
x=np.linspace(-1,1,200)
# 构造 y


def up(x):
    return np.log10(np.exp2(np.abs(x)))

	
def down(x):
    return -np.exp(-(np.abs(x)))+1

	
def transfer(x):
    if x>=0.5:
        x=up(x)
    elif x>=0:
        x=down(x)
    else:
        x=-2.0*x
    return x

# 转换
y=[transfer(i) for i in x.tolist()]
# 二维状态打印
plt.plot(x,y)
# 开始三维构造
figure = plt.figure()
ax = Axes3D(figure)
# 构造X,Y轴的网格数据
X=np.linspace(-1,1,200)
Y=np.linspace(-1,1,200)
# 转化成为网格数据
X, Y=np.meshgrid(X, Y)
# 旋转构造 
R = np.sqrt(X**2 + Y**2)
# 对array里面每一个数据进行转换
Z = np.array([[transfer(R[i][j]) for j in range(200)] for i in range(200)])
# 打印
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
# 输出展示
plt.show()

第二次作业

正式的第一次讲课是讲C语言的指针到链表,当时大概就是简单的说了下。当时学链表确实很难受,搜出来代码都看不懂,总之经过一番努力。自己做了一个链表的建立,现在来看,幸亏当时学了,后来在计算机课上学的时候就比较轻松。当时的代码找不到了。所以就不放代码了。

第三次作业

接着讲了数据处理,学习panda库和numpy库对文件的操作,作业是打开一个excel表格并执行一系列操作和统计。通过在网上找库的使用方法,结合培训时的内容,我打了以下代码:

import numpy as np
import pandas as pd

f=open(r'C:\Users\24218\python的编程夹\train.csv')
ff= pd.read_csv(f)
lf = pd.DataFrame(ff)
df=lf.fillna(0)
sex=df.pop('Sex')
fff=sex.value_counts()
b=fff['male']/fff['female']
print(b)
live=df['Survived'].sum()
die=891-live
p=live/die
print(p)       
max1=df['Age'].max()
min1=lf['Age'].min()
print(max1,min1)
df['Survived'].hist(bins=50)
np.list1=[b,p,max1,min1]
save = pd.DataFrame(np.list1, index = ['man/woman', 'live/died', 'max','min']) 
open(r'C:\Users\24218\Desktop\zuoye\zuoye.csv')
save.to_csv(r'C:\Users\24218\Desktop\zuoye\zuoye.csv')

第四次作业

然后是学习pycharm的功能,用pycharm做一个计算器,使用pyqt5库来完成,这是我觉得最难的一次,代码很长,而且用到的库也是第一次接触,理解起来确实不容易,我找到一个代码,然后逐条去百度并理解,最后我也仅仅是能明白了那一串代码然后进行自己打出来。代码如下:

import sys
import re
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QGridLayout, QGroupBox, QLineEdit
from PyQt5.QtCore import Qt


class Calculater(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):#画计算器形状
        self.setWindowTitle('计算器')
        self.setGeometry(700, 400, 300, 500)


        # 这里是显示区
        self.resultflag = 0
        self.errflag = 0
        self.display = QLineEdit('0')
        self.display.setReadOnly(True)
        self.display.setAlignment(Qt.AlignRight)
        self.display.setMaxLength(30)

        # 这里是操作区
        self.createGridLayout()
        windowLayout = QVBoxLayout()
        windowLayout.addWidget(self.display)
        windowLayout.addWidget(self.horizontalGroupBox)
        self.setLayout(windowLayout)
        self.show()

    def createGridLayout(self):
        self.horizontalGroupBox = QGroupBox('')
        layout = QGridLayout()

        button02 = QPushButton('归零')
        button02.clicked.connect(self.on_click)
        layout.addWidget(button02, 0, 0, 1, 2)#从1行1列开始,占1行,2列

        button00 = QPushButton('删除')
        button00.clicked.connect(self.on_click)
        layout.addWidget(button00, 0, 2)

        button03 = QPushButton('/')
        button03.clicked.connect(self.on_click)
        layout.addWidget(button03, 0, 3)

        button10 = QPushButton('7')
        button10.clicked.connect(self.on_click)# 第2行操作区
        layout.addWidget(button10, 1, 0)

        button11 = QPushButton('8')
        button11.clicked.connect(self.on_click)
        layout.addWidget(button11, 1, 1)

        button12 = QPushButton('9')
        button12.clicked.connect(self.on_click)
        layout.addWidget(button12, 1, 2)

        button13 = QPushButton('*')
        button13.clicked.connect(self.on_click)
        layout.addWidget(button13, 1, 3)

        button20 = QPushButton('4')
        button20.clicked.connect(self.on_click)# 第3行操作区
        layout.addWidget(button20, 2, 0)

        button21 = QPushButton('5')
        button21.clicked.connect(self.on_click)
        layout.addWidget(button21, 2, 1)

        button22 = QPushButton('6')
        button22.clicked.connect(self.on_click)
        layout.addWidget(button22, 2, 2)

        button23 = QPushButton('-')
        button23.clicked.connect(self.on_click)
        layout.addWidget(button23, 2, 3)

        button30 = QPushButton('1')             # 第4行操作区
        button30.clicked.connect(self.on_click)
        layout.addWidget(button30, 3, 0)

        button31 = QPushButton('2')
        button31.clicked.connect(self.on_click)
        layout.addWidget(button31, 3, 1)

        button32 = QPushButton('3')
        button32.clicked.connect(self.on_click)
        layout.addWidget(button32, 3, 2)

        button33 = QPushButton('+')
        button33.clicked.connect(self.on_click)
        layout.addWidget(button33, 3, 3)

        # 操作区第5行,其中'0'独占1行2列
        button40 = QPushButton('0')
        button40.clicked.connect(self.on_click)
        layout.addWidget(button40, 4, 0, 1, 2)  # 从4行0列开始占1行2列

        button42 = QPushButton('.')
        button42.clicked.connect(self.on_click)
        layout.addWidget(button42, 4, 2, 1, 1)  # 从4行2列开始占1行1列

        button43 = QPushButton('=')
        button43.clicked.connect(self.on_click)
        layout.addWidget(button43, 4, 3, 1, 1)  # 从4行3列开始占1行1列

        self.horizontalGroupBox.setLayout(layout)

    def on_click(self):
        source = self.sender()

        # 全部输入清零
        if source.text() == '归零':
            self.display.setText('0')


        # 退格键功能
        elif source.text() == '删除':
            if self.resultflag != 1:
                if len(self.display.text()) <= 1:
                    newtext = '0'
                else:
                    newtext = self.display.text()[0: (len(self.display.text()) - 1)]

                self.display.setText(newtext)


        # 计算输入的算术表达式并将结果显示
        elif source.text() == '=':
            if self.resultflag != 1:
                try:
                    disstr = self.display.text()[:]
                    # 考虑表达式不完整的情况处理:尾部为运算符*/则补1
                    if disstr[len(disstr) - 1:] in '*/':
                        calstr = disstr + '1'
                    # 尾部为运算符+-或小数点则补0
                    elif disstr[len(disstr) - 1:] in '+-.':
                        calstr = disstr + '0'
                    else:
                        calstr = disstr[:]
                    result = str(eval(calstr))

                # 考虑除0异常处理
                except (ZeroDivisionError, Exception) as errinfo:
                    result = 'Error: ' + str(errinfo)
                    self.errflag = 1

                self.display.setText(result)
                self.resultflag = 1


        # 输入数字或小数点:将算术表达式输入同步显示出来
        else:
            self.numhandle()

    def numhandle(self):
        rawstr = self.display.text()[:]
        strlen = len(rawstr)
        lastchar = rawstr[strlen - 1:]#规定运算顺序
        inchar = self.sender().text()[:]#输入的字符
        newstr = ''

        if self.resultflag != 1:
            # 当前最后一个字符为运算符(+-*/)
            if lastchar in '+-*/':
                # 输入为0-9 -> 直接追加
                if inchar in '0123456789':
                    newstr = rawstr + inchar
                # 输入为运算符 -> 忽略输入
                elif inchar in '+-*/':
                    newstr = rawstr[:]
                # 输入为小数点 -> 小数点前补0再追加
                else:
                    newstr = rawstr + '0' + inchar

            # 当前最后一个字符为小数点
            elif lastchar == '.':
                # 输入为0-9 -> 直接追加
                if inchar in '0123456789':
                    newstr = rawstr + inchar
                # 输入为小数点 -> 忽略输入
                elif inchar == '.':
                    newstr = rawstr[:]
                # 输入为运算符 -> 运算符前补0再追加
                else:
                    newstr = rawstr + '0' + inchar

            # 当前最后一个字符为0-9
            else:
                numreg1 = re.compile(r'[+\-*/]{0,1}[0-9]+\.[0-9]*[0-9]$')
                srchrslt1 = numreg1.search(rawstr)
                # 当前最后一个数字前面已经有小数点
                if srchrslt1 != None:
                    # 输入为小数点 -> 忽略输入
                    if inchar == '.':
                        newstr = rawstr[:]
                    # 输入为0-9或运算符 -> 直接追加
                    else:
                        newstr = rawstr + inchar

                # 当前最后一个数字前面没有小数点
                else:
                    numreg2 = re.compile(r'[+\-*/]0$')
                    srchrslt2 = numreg2.search(rawstr)
                    # 当前最后一个字符为0且作为最近运算符后的第一个数字
                    if srchrslt2 != None:
                        # 输入为小数点或运算符 -> 直接追加
                        if inchar == '.' or inchar in '+-*/':
                            newstr = rawstr + inchar
                        # 输入为0-9 -> 忽略输入
                        else:
                            newstr = rawstr[:]
                    # 当前字符串即是'0'
                    elif rawstr == '0':
                        # 输入为0-9 -> 用输入取代原字符'0'
                        if inchar in '0123456789':
                            newstr = inchar[:]
                        # 输入为小数点或运算符 -> 直接追加
                        else:
                            newstr = rawstr + inchar
                    # 其他情况均可直接追加
                    else:
                        newstr = rawstr + inchar


        # 前面输入已经计算出结果
        else:
            # 考虑计算有无异常
            if self.errflag == 0:
                # 输入为运算符 -> 直接追加
                if inchar in '+-*/':
                    newstr = rawstr + inchar
                # 输入小数点 -> 以小数点前补0刷新显示
                elif inchar == '.':
                    newstr = '0' + inchar
                # 输入0-9 -> 以输入刷新显示
                else:
                    newstr = inchar[:]
            else:
                # 输入为运算符 -> 忽略输入并擦除err信息
                if inchar in '+-*/':
                    newstr = '0'
                # 输入小数点 -> 以小数点前补0刷新显示
                elif inchar == '.':
                    newstr = '0' + inchar
                # 输入0-9 -> 以输入刷新显示
                else:
                    newstr = inchar[:]
                self.errflag = 0

            self.resultflag = 0

        self.display.setText(newstr)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Calculater()
    sys.exit(app.exec_())

大一上学习总结_第3张图片

第五次作业

然后学习了turtle库来画图,我觉得这个库是很有趣,可以把画图的过程展现出来,通过各种百度,我打了如下代码:

import turtle
def drawGap(): #绘制数码管间隔
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):   #绘制单段数码管
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(60)
    drawGap()
    turtle.right(90)
def drawDigit(x): #根据数字绘制七段数码管
    drawLine(True) if x in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if x in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if x in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if x in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if x in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if x in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if x in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(30)   
   #运行主程序 
turtle.setup(900, 500)#展开画板
turtle.penup()
turtle.fd(-350)
turtle.pensize(5) 
a=open(r"C:\Users\24218\python的编程夹\520.txt")#引用文件
b=a.readlines()
b=b[0].split()
for i in range(0,len(b)):
    b[i]=int(b[i])
a.close()
for x in b  :   #画出5201314
    drawDigit(x)
turtle.hideturtle()
turtle.done() 

大一上学习总结_第4张图片
其实本来是想写文字的,但是搞了很久画不出来2333,只能弄了这个。

第六次作业

之后一节课,学习了如何当一个爬虫233,学习使用BeautifulSoup对页面抓取,然后是使用正则表达式的精确匹配,但是这次作业感觉确实是没有掌握好,总是找不到怎么去提取网页的内容,(而且不知道怎么百度hhh)后来大佬发了代码之后,我还是能看懂然后理解了。(代码太长就不放了)

总结

其实学习了这么久,让我感受最深的是,知道了怎么去学习一个知识,同时打代码时不能心急,好几次都是因为一点小问题,但是后来慢慢去学,搞懂每一个小细节之后,其实就能解决了。
另外,也是感觉这些东西确实是很有趣,从画图到自己做计算器再到做一个小爬虫,而且学会也是很开心。

你可能感兴趣的:(大一上学习总结)