精华内容
下载资源
问答
  • python期末大作业
    2022-06-15 11:54:27

    先进行一些库的引入和常规操作

    # 数据分析三兄弟
    import numpy as np 
    import matplotlib.pyplot as plt
    import pandas as pd
    # 分别是视频、音频处理的库
    import cv2
    from moviepy.editor import *
    
    # 中文编码
    plt.rcParams['font.sans-serif'] = ['YouYuan']
    plt.rcParams['axes.unicode_minus'] = False
    # 读取文件,简单处理
    data = pd.read_excel('国家地铁里程历程.xlsx')
    data = data.rename(columns={'Unnamed:0': '年份'})

    1.每一列最前面的正整数之前全部设为0

    2.每一列空格部分都使用前后两个值进行“线性插值”填空,以月为单位进行插值

    # 建立一个标题与原表相同的空表
    df = pd.DataFrame(columns=data.columns)
    # 处理这个空表,插入一行原来data的行,再插入11行空行
    for i in range(0, 123):
        df = pd.concat([df, data.loc[i:i, :]])
        for j in range(0, 11):
            df = pd.concat([df, pd.DataFrame([{"": np.nan}], columns=data.columns)], ignore_index=True)
    # 加上最后一行
    df = pd.concat([df, data.loc[123:123, :]])
    df = df.set_index('Unnamed: 0')
    df = df.interpolate()
    # 取出1900年后的
    df = df.loc[1900:]
    df = df.fillna(0)
    df = df.reset_index()
    # 取出年作为后面要用的标签
    nian = df.iloc[:, 0]
    nian = nian.fillna(method='ffill')
    # 取出数据部分
    df = df.iloc[:, 1:]

    1. 每幅图显示里程数最多的10个国家,当不到10个时,全部绘制。
    2. 绘图时里程数大的在上放,小的在下方。
    3. 每个国家对应的颜色自行定义,且保持不变,其中中国须为红色。
    4. 图中每条bar须列明国名。
    5. 图中每条bar须标注数值,数值保留小数点后2位有效数字。
    # 将地区和颜色对应
    area_list = df.columns
    color_list = ['#DDDDDD', '#FF44AA', '#FF5511', '#886600', '#FFFF33', '#77FF00', '#77FFEE', '#003C9D', '#D28EFF',
                  '#770077', '#FF0000']
    colors = dict(zip(area_list, color_list))
    # 绘制图表
    plt.rcParams['axes.facecolor'] = '#FFE4E1'
    plt.figure(figsize=(15, 8), dpi=80, facecolor='#FFE4E1')
    
    for i in range(0, len(df)):
        # 画表
        plt.xlabel("公里数", fontsize=25)
        plt.ylabel("国家", fontsize=25)
        plt.tick_params(labelsize=25)
        plt.title("全球各国铁路里程", fontsize=30)
        ax = plt.subplot()
        ax.spines['top'].set_visible(False)
        ax.spines['right'].set_visible(False)
    
        # 排序
        df = df.sort_values(by=i, axis=1)
        # 保留前10个
        x = df.columns[1:]
        y = df.iloc[i, 1:]
        plt.barh(x, y, color=[colors[t] for t in x])
        ax = plt.gca()
    
        #添加标签和水印
        plt.text(0.8, 0.1, s=int(nian[i]), transform=ax.transAxes, fontsize=50)
        plt.text(0.5, 0.5, s='水印', transform=ax.transAxes, fontsize=50, alpha=0.4)
        for j in range(0, len(x)):
            plt.text(y[j] + 0.5, x[j], s=str('{:.2f}KM'.format(y[j])), fontsize=20)
    
        # plt.show()
        # 保存
        plt.savefig(r"img\t{}.jpg".format(i))
        plt.clf()
        

     将多幅图片组织为mp4格式视频,帧率设置为每秒12帧。

    # 读取中文路径
    # 前面不能出现中文路径,否则需要加上这段
    def cv_imread(filePath):
        cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), -1)
        return cv_img
    
    
    # 视频合成
    size = (1200, 640)
    videowrite = cv2.VideoWriter('test.mp4', -1, 12, size)  # 12表示帧率
    img_array = []
    for filename in [r"img/t{}.jpg".format(i) for i in range(1453)]:
        img = cv_imread(filename)
        if img is None:
            print(filename + " is not found.")
            continue
        img_array.append(img)
    
    for i in range(1453):
        videowrite.write(img_array[i])
    
    videowrite.release()
    print('over')

    加一个bgm

    # 加bgm
    video_clip = VideoFileClip('test.mp4')
    audio_clip = AudioFileClip('china—x.mp3')
    audio = afx.audio_loop(audio_clip, duration=video_clip.duration)
    final_video = video_clip.set_audio(audio)
    final_video.write_videofile('china—x.mp4')
    

    更多相关内容
  • Python期末大作业.rar

    2021-07-19 16:11:07
    Python期末大作业.rar,Python期末大作业_版本2,Rank.png,Question2.py,IMAGE1.png,Question1.py,Python期末大作业_版本1,Question2.py,describle11.png,IMAGE1.png,describle22.png,Question1.py,指导语.pptx
  • python期末大作业人工智能大作业迷宫寻路小游戏源代码python期末大作业人工智能大作业迷宫寻路小游戏源代码python期末大作业人工智能大作业迷宫寻路小游戏源代码python期末大作业人工智能大作业迷宫寻路小游戏源代码...
  • python期末大作业基于Django的学生成绩管理系统源码python期末大作业基于Django的学生成绩管理系统源码python期末大作业基于Django的学生成绩管理系统源码python期末大作业基于Django的学生成绩管理系统源码python...
  • python期末大作业基于ResNet的人脸表情识别,已获高分通过项目。 python期末大作业基于ResNet的人脸表情识别,已获高分通过项目。python期末大作业基于ResNet的人脸表情识别,已获高分通过项目。python期末大作业...
  • python期末大作业课程设计基于情感分析的新闻管理系统源码。纯手打项目 python期末大作业课程设计基于情感分析的新闻管理系统源码。纯手打项目python期末大作业课程设计基于情感分析的新闻管理系统源码。纯手打项目...
  • python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末大作业-基于WebRTC的视频会议系统。已经通过的高分项目。python期末...
  • python期末报告.zip,python期末报告,38.jd-获取所有url-写入json-读取json文件-并抓取信息写入excel_1.py,建表.txt,dicturl.json,db.ini
  • python期末大作业—学生选课信息管理系统,已获通过的高分项目。python期末大作业—学生选课信息管理系统,已获通过的高分项目。python期末大作业—学生选课信息管理系统,已获通过的高分项目。python期末大作业—...
  • python期末大作业书店销售管理系统源码,python期末大作业书店销售管理系统源码python期末大作业书店销售管理系统源码python期末大作业书店销售管理系统源码python期末大作业书店销售管理系统源码python期末大作业...
  • 包含项目完整源代码和电影数据集,代码部分标有注释。 内附答辩PPT和项目文档以及操作说明文本。
  • python期末大作业

    2018-07-03 13:45:57
    py期末大作业,使用了网络编程、多线程、wxpython做界面、爬虫、xlwt操作excel和matplotlib进行电影种类的分析。主要爬取的内容是豆瓣热门电影,有界面和输出日志,可以把爬取信息输出为excel并绘制成图片。
  • python大作业.zip

    2021-01-03 15:43:00
    python大作业
  • Python期末大作业格式样本——不带批注.pdfPython期末大作业格式样本——不带批注.pdfPython期末大作业格式样本——不带批注.pdfPython期末大作业格式样本——不带批注.pdfPython期末大作业格式样本——不带批注.pdf...
  • 1.源代码和大量注释(可以用来写报告) 2.打包后的exe文件 文件运行不报错,顺利运行
  • Python期末大作业 —— 射靶

    千次阅读 2021-07-19 14:51:49
    Python期末大作业 绘制射靶 实现射击系统

    Python期末作业

    在这里插入图片描述

    作业的具体要求总结

    Question 1

    1. 用turtle画图就不说了,不难

    Question 2

    1. 最多有五个组,每个组最多有3个人
      在添加成员时当超过3个时,需要跳出信息框进行提醒处理
    2. 添加成员的姓名不能为空
      若没有输入任何信息,直接添加的话也需要跳出信息框进行提醒处理
    3. 统计小组的平均得分
      需要特判该小组的成员数是否 ≥ 1,因为分母不能为0
    4. 每个人击靶次数不能超过10
      当射靶次数超过10次,需要弹出信息框进行警告处理

    Question1我只写了一个版本,对于 Question 2 我一共写了两个版本

    注: 我这两个版本都没有处理成员名相同的情况,笔者认为在这15个人中总不会这么凑巧就有相同名字的人吧,所以请不要输入相同的成员名

    第一份

    1. 先输入姓名
    2. 选择要添加到的小组
    3. 添加姓名后,列表框将显示添加的成员名以及他所在的小组
    4. 在列表框中选择要参赛的成员
    5. 点击靶后,将会实时更新参赛队员的成绩以及他所在小组的平均得分
    6. 实时更新个人总得分前三的成员

    在这里插入图片描述

    第二份

    具体步骤跟前面的一样,不同在于第二份需要射靶次数达到150次才会显示排名前三的小组,而第一份是实时更新总得分排名前三的个人
    在这里插入图片描述

    感想

    源代码请到我的资源那里下载。代码变量太多,所以我猜应该没人能看懂代码。我同学找我代码,给了他们后他们这么抱怨的,反正老师也不细看。听说全班Python这门课分数都是A,因为只要交了期末作业的都是A…

    Python这门课一学期下来似乎什么也没学,老师念了一学期的ppt,最终还是得靠自学啊

    有问题欢迎在评论区提出一起探讨

    展开全文
  • Python期末大作业1

    2022-08-08 21:33:27
    1.2.2 描述分析目标对于数据提出了四个问题(如下):问题1:电影风格随时间的变化趋势 问题2:不同风格电影的收益能力和年份与什么类型的电影风格最相关问题3:
  • Python期末大作业格式样本——不带批注.docxPython期末大作业格式样本——不带批注.docxPython期末大作业格式样本——不带批注.docxPython期末大作业格式样本——不带批注.docxPython期末大作业格式样本——不带批注...
  • Python读取小说文本,绘制词云图,主要人物出场次序,社交网络关系图,章回字数,有报告、详细说明和代码注释,有可执行文件.exe
  • Python期末大作业(学生成绩管理系统)

    学生成绩管理系统共分为五个主要功能:

    1.用户登陆和注册模块和退出:

      a)注册存入文件中(见文件“账号密码.csv”)

      b)用户登陆在文件中进行查询(见文件“账号密码.csv”)

      c)退出可以退出程序

    2.新增学生数据:

      a)通过录入学生的姓名、学号、科目、成绩然后把信息录入成绩.csv中

      b)点击录入,会弹出一个提示,显示录入信息成功,在文件中能够找到信息已写进文件中。

    3.删除学生信息模块:

      a)通过删除信息模块,可以把不想存储的信息删除掉,通过学号和科目进行查找删除。

      b)点击删除,会弹出一个提示,显示删除成功,然后在文件中的哪一行记录就会被删除。

    4.修改模块:

      a)修改模块会有一个判断,如果修改表中没有的信息,会提示错误,显示没有该信息。

      b)修改信息会把所有的信息重新加载一遍,然后把他们分别替换下来。

    5.查询功能:

      a)通过学号和科目就能确定唯一一行,也就能找到唯一一个人的信息。

      b)点击查询就会弹出一个对话框,把所有的那个学生所有的信息查询出来。

    !在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    就是简单的增删改查功能,将数据存在了文件里面,比较low,需要code的,可以评论区留言即可!!

    展开全文
  • 基于Python的Django框架实现的学生信息管理系统,班主任登录可以对学生进行管理, 同时可以查看图形化界面的人员分布信息,可以更客观形象的看出学生的比例人数等。 同时,班主任在平台上的任何操作,都会有相关信息...
  • python大作业 图书管理系统(带Gui).zip,Library-management-system-main,libdata,data,books.txt,readers.txt,readme,2.png,report.md,3.png,结构.xmind,5.png,6.png,1.png,4.png,report.pdf,LICENSE,windows,...
  • python期末大作业-图形化爬虫

    千次阅读 2022-01-01 10:14:00
    当点击数据分析按钮的时候:会在pychrom当中显示一些数据,当然,这些数据是之前在测试的时候从淘宝爬取的一些品类的商品,然后通过读取数据库,从中的到各个品种的平均值,通过python图形化展示来将其展示出来。...
    1. 爬虫部分
    2. 数据库部分
    3. ui部分
    4. 文件系统部分
    5. 数据简单分析部分

    结果演示:

    上述展示的是主页面,当点击提交的时候会进行线程的开启来进行数据的爬取,当然,在点击的时候也会有简单的检验功能,url的填写要注意格式:当写完完整的url之后有一个空格,再写要创建的表的表名。下面的两列为xpath,和其对应的表的列名。

            当点击查看数据库的时候,会弹出第二个图形化,有一个下来菜单来让我们选择要查看的表,数据会在下面的表格当中显示,并且可以通过在文本框当中写入查询的sql语句来实现部分数据的查询。

     当点击保存到本地文件系统的按钮时:

    会弹出下面的页面:然后点击File,穿件自己的文件的地址和名称,在右侧的只读文本框当中显示其路径,然后也要写要保存到本地的文件的sql语句,最终会将sql查询的结果显示在下面的文本框当中,也会保存当对应的文件当中。

     当点击数据分析按钮的时候:会在pychrom当中显示一些数据,当然,这些数据是之前在测试的时候从淘宝爬取的一些品类的商品,然后通过读取数据库,从中的到各个品种的平均值,通过python图形化展示来将其展示出来。

            

     至此,该项目的各个模块功能阐述完毕,具体实现细节在下方的代码当中,如果有什么问题,我们可以一起探讨。谢谢各位的支持。

     

    整个文件的部署:

     

    爬虫部分:

            是通过selnium无头浏览器和xpath结合起来确定数据的,和我们平时的爬虫差不多,但是最终要将数据存放到数据库当中,当然在数据库的部分会通过ui界面的输入,将表名和字段传入,然后动态的进行SQL语句的拼接来实现对数据的安全存储。

    代码:script.py文件当中的结果:

    from selenium.webdriver.chrome.options import Options
    from selenium import webdriver
    # from bbigwork import ThreadUi
    from lxml import etree
    import pymysql
    
    connection = pymysql.connect(user='whp', password='wms111', database='python', charset='utf8',
                                 port=3306, host='localhost')
    cur = connection.cursor()
    
    def share_brower():
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        path='C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
        chrome_options.binary_location = path
        brower = webdriver.Chrome(chrome_options=chrome_options)
        return brower
    
    
    def paMain(url, xpath):
        brower=share_brower()
        brower.get(url)
        # 等待一会儿解析
        brower.implicitly_wait(10)
        # 浏览器页面下滑
        js = 'document.documentElement.scrollTop=100000'
        brower.execute_script(js)
    
        page = brower.page_source
        tree = etree.HTML(page)
        news = []
        for i in xpath:
            news.append(tree.xpath(i))
        brower.quit()
        print(news)
        return news
    
    
    # 表的字段全部都是varchar
    def creaetTable(tableName, column, xpath):
        news = paMain(tableName.split(" ")[0], xpath)
        min = 1000  # 最大的行数
        for i in news:
            if min > len(i):
                min = len(i)
        if min == 0:
            cur.close()
            connection.close()
            return
        # 创建表
        print("最小的行数是"+str(min))
        url =  tableName.split(" ")[0]
        tableName= tableName.split(" ")[1]
        print(url+"   "+tableName)
        cur.execute('drop table if exists `%s`'% tableName)
        sql = 'create table %s ('% tableName
        for i in range(len(column)):
            sql += ('`'+column[i]+'`')
            sql += ' varchar(150),'
        sql = sql[:-1]
        sql += ');'
        print(sql)
        print("表创建成功")
        cur.execute(sql)
        connection.commit()
    
        for i in range(min):
            sql = 'insert into `%s` values('%tableName
            for j in range(len(news)):
                sql += '"%s",' % news[j][i]
            sql = sql[:-1]+');'
            print(sql)
            cur.execute(sql)
        connection.commit()
        print("数据插入成功")
    
    

    多线程爬取:ThreadSrc.py

            多线程实现对数据的爬取,并且伴有图形化:

            

    import threading
    from bbigwork import script
    import wx
    import pymysql
    
    class myThread(threading.Thread):
        def __init__(self, tableName, column, xpath):
            threading.Thread.__init__(self)
            self.tableName = tableName
            self.column = column
            self.xpath = xpath
    
        def run(self) -> None:
            try:
                script.creaetTable(self.tableName, self.column, self.xpath)
                dlg = wx.MessageDialog(None, u"爬取成功!!恭喜", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
            except RuntimeError:
                dlg = wx.MessageDialog(None, u"爬取失败,请重新检查,或者输入新的url", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()

    图形化:借助wxFormBuiler来实现的:ThreadUi.py

    代码也与其他模块有接触:

    
    import wx
    import wx.xrc
    from bbigwork import SqlUi
    import pymysql
    from bbigwork import ThreadScr, fileSave, analyse, script
    
    # 最开始的数据库连接
    connection = pymysql.connect(user='whp', password='wms111', database='python', charset='utf8',
                                 port=3306, host='localhost')
    cur = connection.cursor()
    
    
    # 局限,只能爬取text的文件
    class MyFrame2(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
                              size=wx.Size(751, 486), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
    
            self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
            # self.SetSizeHintsSz(-1, -1)
            bSizer1 = wx.BoxSizer(wx.VERTICAL)
    
            gSizer1 = wx.GridSizer(6, 3, 0, 0)
    
            self.m_staticText5 = wx.StaticText(self, wx.ID_ANY, u"网站url(1)", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText5.Wrap(-1)
            gSizer1.Add(self.m_staticText5, 0, wx.ALL, 5)
    
            self.m_textCtrl5 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(210, 30), 0)
            gSizer1.Add(self.m_textCtrl5, 0, wx.ALL, 5)
    
            self.m_button61 = wx.Button(self, wx.ID_ANY, u"提交", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer1.Add(self.m_button61, 0, wx.ALL, 5)
    
            self.m_staticText7 = wx.StaticText(self, wx.ID_ANY, u"xpath1和列名", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText7.Wrap(-1)
            gSizer1.Add(self.m_staticText7, 0, wx.ALL, 5)
    
            self.m_textCtrl7 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer1.Add(self.m_textCtrl7, 0, wx.ALL, 5)
    
            self.m_textCtrl8 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer1.Add(self.m_textCtrl8, 0, wx.ALL, 5)
    
            self.m_staticText8 = wx.StaticText(self, wx.ID_ANY, u"xpath2和列名", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText8.Wrap(-1)
            gSizer1.Add(self.m_staticText8, 0, wx.ALL, 5)
    
            self.m_textCtrl9 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer1.Add(self.m_textCtrl9, 0, wx.ALL, 5)
    
            self.m_textCtrl10 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer1.Add(self.m_textCtrl10, 0, wx.ALL, 5)
    
            self.m_staticText9 = wx.StaticText(self, wx.ID_ANY, u"xpath3和列名", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText9.Wrap(-1)
            gSizer1.Add(self.m_staticText9, 0, wx.ALL, 5)
    
            self.m_textCtrl11 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer1.Add(self.m_textCtrl11, 0, wx.ALL, 5)
    
            self.m_textCtrl12 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer1.Add(self.m_textCtrl12, 0, wx.ALL, 5)
    
            self.m_staticText10 = wx.StaticText(self, wx.ID_ANY, u"xpath4和列名", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText10.Wrap(-1)
            gSizer1.Add(self.m_staticText10, 0, wx.ALL, 5)
    
            self.m_textCtrl13 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer1.Add(self.m_textCtrl13, 0, wx.ALL, 5)
    
            self.m_textCtrl14 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer1.Add(self.m_textCtrl14, 0, wx.ALL, 5)
    
            self.m_staticText15 = wx.StaticText(self, wx.ID_ANY, u"xpath5和列名", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText15.Wrap(-1)
            gSizer1.Add(self.m_staticText15, 0, wx.ALL, 5)
    
            self.m_textCtrl21 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer1.Add(self.m_textCtrl21, 0, wx.ALL, 5)
    
            self.m_textCtrl22 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer1.Add(self.m_textCtrl22, 0, wx.ALL, 5)
    
            bSizer1.Add(gSizer1, 1, wx.EXPAND, 20)
    
            gSizer3 = wx.GridSizer(5, 3, 0, 0)
    
            self.m_staticText2 = wx.StaticText(self, wx.ID_ANY, u"网站url(2)", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText2.Wrap(-1)
            gSizer3.Add(self.m_staticText2, 0, wx.ALL, 5)
    
            self.m_textCtrl3 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(200, 30), 0)
            gSizer3.Add(self.m_textCtrl3, 0, wx.ALL, 5)
    
            self.m_button8 = wx.Button(self, wx.ID_ANY, u"提交", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer3.Add(self.m_button8, 0, wx.ALL, 5)
    
            self.m_staticText11 = wx.StaticText(self, wx.ID_ANY, u"xpath1AndColumnName", wx.DefaultPosition, wx.DefaultSize,
                                                0)
            self.m_staticText11.Wrap(-1)
            gSizer3.Add(self.m_staticText11, 0, wx.ALL, 5)
    
            self.m_textCtrl15 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer3.Add(self.m_textCtrl15, 0, wx.ALL, 5)
    
            self.m_textCtrl16 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer3.Add(self.m_textCtrl16, 0, wx.ALL, 5)
    
            self.m_staticText12 = wx.StaticText(self, wx.ID_ANY, u"xpath2AndColumnName", wx.DefaultPosition, wx.DefaultSize,
                                                0)
            self.m_staticText12.Wrap(-1)
            gSizer3.Add(self.m_staticText12, 0, wx.ALL, 5)
    
            self.m_textCtrl17 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer3.Add(self.m_textCtrl17, 0, wx.ALL, 5)
    
            self.m_textCtrl18 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer3.Add(self.m_textCtrl18, 0, wx.ALL, 5)
    
            self.m_staticText13 = wx.StaticText(self, wx.ID_ANY, u"xpath3AndColumnName", wx.DefaultPosition, wx.DefaultSize,
                                                0)
            self.m_staticText13.Wrap(-1)
            gSizer3.Add(self.m_staticText13, 0, wx.ALL, 5)
    
            self.m_textCtrl19 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer3.Add(self.m_textCtrl19, 0, wx.ALL, 5)
    
            self.m_textCtrl20 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer3.Add(self.m_textCtrl20, 0, wx.ALL, 5)
    
            self.m_staticText17 = wx.StaticText(self, wx.ID_ANY, u"xpath4AndColumnName", wx.DefaultPosition, wx.DefaultSize,
                                                0)
            self.m_staticText17.Wrap(-1)
            gSizer3.Add(self.m_staticText17, 0, wx.ALL, 5)
    
            self.m_textCtrl23 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
            gSizer3.Add(self.m_textCtrl23, 0, wx.ALL, 5)
    
            self.m_textCtrl24 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(60, -1), 0)
            gSizer3.Add(self.m_textCtrl24, 0, wx.ALL, 5)
    
            bSizer1.Add(gSizer3, 1, wx.EXPAND, 5)
    
            gSizer5 = wx.GridSizer(0, 3, 0, 0)
    
            self.m_button5 = wx.Button(self, wx.ID_ANY, u"查看数据库", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer5.Add(self.m_button5, 0, wx.ALL, 5)
    
            self.m_button4 = wx.Button(self, wx.ID_ANY, u"保存到本地文件", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer5.Add(self.m_button4, 0, wx.ALL, 5)
    
            self.m_button51 = wx.Button(self, wx.ID_ANY, u"数据分析", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer5.Add(self.m_button51, 0, wx.ALL, 5)
    
    
            bSizer1.Add(gSizer5, 0, wx.EXPAND, 5)
    
            self.SetSizer(bSizer1)
            self.Layout()
    
            self.Centre(wx.BOTH)
    
            self.Bind(wx.EVT_BUTTON, self.openSql, self.m_button5)
            self.Bind(wx.EVT_BUTTON,self.execte1, self.m_button61)
            self.Bind(wx.EVT_BUTTON, self.execute2, self.m_button8)
            self.Bind(wx.EVT_BUTTON, self.save, self.m_button4)
            self.Bind(wx.EVT_BUTTON, self.any, self.m_button51)
    
        def any(self,event):
            analyse.run()
    
        #     存储这一块
        def save(self, event):
            fileSave.run(frame)
    
        # 对数据库的查询的ui
        def openSql(self, event):
            SqlUi.Main(frame)
    
        # 是执行爬虫程序
        def execte1(self, event):
            tableName = self.m_textCtrl5.GetValue()
            flag = False
            if tableName =="":
                flag=True
                dlg = wx.MessageDialog(frame, u"请输入url", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
            # print(tableName)
            xapth=[]
            cloumn=[]
            # 第一个
            xp = self.m_textCtrl7.GetValue()
            co = self.m_textCtrl8.GetValue()
            print(xp+"  "+co)
    
            if (xp =="" and co!="") or (xp!="" and co==""):
        #         错误提示
                dlg = wx.MessageDialog(frame, u"请检查你的xpath1,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag=True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl9.GetValue()
            co = self.m_textCtrl10.GetValue()
            print(xp+"  "+co)
            if xp == "" and co != "" or xp != "" and co == "":
                dlg = wx.MessageDialog(None, u"请检查你的xpath2,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag=True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl11.GetValue()
            co = self.m_textCtrl12.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                    #         错误提示
                dlg = wx.MessageDialog(None, u"请检查你的xpath3,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag=True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl13.GetValue()
            co = self.m_textCtrl14.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                dlg = wx.MessageDialog(None, u"请检查你的xpath4,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag=True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl21.GetValue()
            co = self.m_textCtrl22.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                dlg = wx.MessageDialog(None, u"请检查你的xpath5,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag = True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
            print(xapth)
            print(cloumn)
        #     数据已经存放在列表当中了
            if not flag and len(cloumn) > 0:
                print("合法的")
                start = ThreadScr.myThread(tableName, cloumn, xapth)
                start.start()
            else:
                dlg = wx.MessageDialog(None, u"请再次检查你的输入,有错误!", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
    
    
    
        # 第二个执行爬虫爬取数据
        def execute2(self,event):
            tableName = self.m_textCtrl3.GetValue()
            flag = False
            if tableName == "":
                flag = True
                dlg = wx.MessageDialog(frame, u"请输入url", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
            xapth = []
            cloumn = []
            # 第一个
            xp = self.m_textCtrl15.GetValue()
            co = self.m_textCtrl16.GetValue()
            if (xp == "" and co != "") or (xp != "" and co == ""):
                dlg = wx.MessageDialog(frame, u"请检查你的xpath1,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag = True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl17.GetValue()
            co = self.m_textCtrl18.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                dlg = wx.MessageDialog(None, u"请检查你的xpath2,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag = True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl19.GetValue()
            co = self.m_textCtrl20.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                #         错误提示
                dlg = wx.MessageDialog(None, u"请检查你的xpath3,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag = True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
    
            xp = self.m_textCtrl23.GetValue()
            co = self.m_textCtrl24.GetValue()
            if xp == "" and co != "" or xp != "" and co == "":
                dlg = wx.MessageDialog(None, u"请检查你的xpath4,请一一对应输入信息", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
                flag = True
            elif xp != "" and co != "":
                xapth.append(xp)
                cloumn.append(co)
            print(xapth)
            print(cloumn)
            if not flag and len(cloumn) > 0:
                print("合法的")
                start = ThreadScr.myThread(tableName, cloumn, xapth)
                start.start()
            else:
                dlg = wx.MessageDialog(None, u"", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
    
        def __del__(self):
            pass
    
    
    if __name__ == '__main__':
        try:
            app = wx.App(False)
            frame = MyFrame2(None)
            frame.Show()
            app.MainLoop()
        finally:
            cur.close()
            connection.close()
            script.cur.close()
            script.connection.close()

    数据库部分:SqlUi.py:使用的时候更改数据库的连接参数

    import wx
    import wx.xrc
    import wx.grid
    import pymysql
    wx._biao = 1000
    
    class MyFrame1(wx.Frame):
    
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
                              size=wx.Size(700, 400), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
            # 数据库的初始化连接
            self.connection = pymysql.connect(user='whp', password='wms111', database='python', charset='utf8',
                                             port=3306, host='localhost')
            self.cur = self.connection.cursor()
            self.weidth = 5
            self.high = 5
            self.cloumnName = ['A', 'B', 'C', 'D', 'E']
    
            self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
    
            self.sbSizer1 = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, wx.EmptyString), wx.VERTICAL)
    
            self.gSizer1 = wx.GridSizer(0, 2, 0, 0)
    
            self.m_staticText1 = wx.StaticText(self.sbSizer1.GetStaticBox(), wx.ID_ANY, u"    选择你要展示的的表:", wx.DefaultPosition,
                                               wx.DefaultSize, 0)
            self.m_staticText1.Wrap(-1)
            self.gSizer1.Add(self.m_staticText1, 0, wx.ALL, 5)
    
            # 显示这个库底的所有的表
            self.cur.execute("show tables")
            all = self.cur.fetchall()
            choiceChoices = []
            for i in all:
                print(i[0])
                choiceChoices.append(i[0])
    
            self.choice = wx.Choice(self.sbSizer1.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, choiceChoices,
                                    0)
            self.choice.SetSelection(len(choiceChoices)-1)
            self.gSizer1.Add(self.choice, 0, wx.ALL, 5)
    
            self.sbSizer1.Add(self.gSizer1, 1, wx.EXPAND, 5)
    
            self.m_grid1 = wx.grid.Grid(self.sbSizer1.GetStaticBox(), wx._biao, wx.DefaultPosition, wx.Size(700, 250), 0)
    
            self.m_textCtrl3 = wx.TextCtrl(self.sbSizer1.GetStaticBox(), wx.ID_ANY, "", wx.DefaultPosition,
                                           wx.Size(300, 30), 0)
            self.gSizer1.Add(self.m_textCtrl3, 0, wx.ALL, 5)
    
            self.m_button3 = wx.Button(self.sbSizer1.GetStaticBox(), wx.ID_ANY, u"查询", wx.Point(600, -1), wx.DefaultSize, 0)
            self.gSizer1.Add(self.m_button3, 0, wx.ALL, 5)
    
    
    
            # Grid
            self.m_grid1.CreateGrid(self.high, self.weidth)
            self.m_grid1.EnableEditing(False)
            self.m_grid1.EnableGridLines(True)
            self.m_grid1.SetGridLineColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWFRAME))
            self.m_grid1.EnableDragGridSize(False)
            self.m_grid1.SetMargins(0, 0)
    
            # Columns
            self.m_grid1.EnableDragColMove(True)
            self.m_grid1.EnableDragColSize(True)
            self.m_grid1.SetColLabelSize(30)
            for i in range(len(self.cloumnName)):
                self.m_grid1.SetColLabelValue(i, self.cloumnName[i])
            self.m_grid1.SetColLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
    
            # Rows
            self.m_grid1.AutoSizeRows()
            self.m_grid1.EnableDragRowSize(True)
            self.m_grid1.SetRowLabelSize(80)
            self.m_grid1.SetRowLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
    
            # Label Appearance
    
            # Cell Defaults
            self.m_grid1.SetDefaultCellTextColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTIONTEXT))
            self.m_grid1.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_TOP)
            self.sbSizer1.Add(self.m_grid1, 0, wx.ALL, 5)
    
            self.SetSizer(self.sbSizer1)
            self.Layout()
    
            self.Centre(wx.BOTH)
    
    
            self.Bind(wx.EVT_CHOICE, self.ChoiceS, self.choice)
            self.Bind(wx.EVT_BUTTON, self.getNews,self.m_button3)
    
        # choic,列表对应的数据
        def ChoiceS(self, event):
            selected = self.choice.GetStringSelection()
            high, cloumnName =self.weightAndLength(selected)
            # 对行的处理
            if high > self.high:
                for i in range(high-self.high):
                    self.m_grid1.AppendRows()
            else:
                for i in range(self.high-high):
                    self.m_grid1.DeleteRows()
    
            self.high = high
            # 对列的处理
            if len(cloumnName) > self.weidth:
                for i in range(len(cloumnName)-self.weidth):
                    self.m_grid1.AppendCols()
            else:
                for i in range(self.weidth-len(cloumnName)):
                    self.m_grid1.DeleteCols()
    
            self.weidth=len(cloumnName)
    
            for i in range(len(cloumnName)):
                self.m_grid1.SetColLabelValue(i, cloumnName[i])
            #         将数据写进去:
            #         setsellvalue 写值
            value = self.getDatabseValue(selected)
            print(value[:2])
            # self.m_grid1.SetCellValue(0,0,"我的")
            for i in range(len(value)):
                for j in range(len(value[i])):
                    self.m_grid1.SetCellValue(int(i), int(j), str(value[i][j]))
    
    
    
    
    
        def weightAndLength(self, table):
            self.cur.execute("select count(*) from %s" % table)
            high = self.cur.fetchone()
            self.cur.execute("desc %s" % table)
            tup = self.cur.fetchall()
            name = []
            for i in tup:
                name.append(i[0])
            print(str(high[0])+"  "+str(name))
            return high[0], name
    
        def getDatabseValue(self,table):
            self.cur.execute("select * from %s"% table)
            allValue = self.cur.fetchall()
            return allValue
    
    
        def getNews(self, event):
            sql = self.m_textCtrl3.GetValue()
            self.cur.execute(sql)
            allnews = self.cur.fetchall()
            high = len(allnews)
            width = len(allnews[0])
            if self.high > high:
                for i in range(self.high-high):
                    self.m_grid1.DeleteRows()
            else:
                for i in range(high-self.high):
                    self.m_grid1.AppendRows()
    
            if self.weidth > width:
                for i in range(self.weidth-width):
                    self.m_grid1.DeleteCols()
            else:
                for i in range(width-self.weidth):
                    self.m_grid1.AppendCols()
    
            for i in range(width):
                self.m_grid1.SetColLabelValue(i+1, '第%s项'% str(i))
    
            self.high = high
            self.weidth = width
    
            for i in range(len(allnews)):
                for j in range(len(allnews[0])):
                    self.m_grid1.SetCellValue(i, j, str(allnews[i][j]))
    
        def __del__(self):
            pass
    
    
    # if __name__ == '__main__':
    def Main(parent):
        try:
            app = wx.App(False)
            frame = MyFrame1(parent)
            frame.Show()
            app.MainLoop()
        finally:
            frame.cur.close()
            frame.connection.close()
    

    文件系统:FileSave.py:

            通过sql语句将结果保存在选择的txt文件当中:

    
    import os
    import wx
    import wx.xrc
    from bbigwork import ThreadUi
    
    
    class MyFrame1(wx.Frame):
    
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
                              size=wx.Size(600, 370), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
    
            self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
    
            bSizer2 = wx.BoxSizer(wx.VERTICAL)
    
            gSizer4 = wx.GridSizer(0, 2, 0, 0)
    
            self.m_button7 = wx.Button(self, wx.ID_ANY, u"File", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer4.Add(self.m_button7, 0, wx.ALL, 5)
    
            self.m_textCtrl21 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(280, 25), 0)
            self.m_textCtrl21.Enable(False)
    
            gSizer4.Add(self.m_textCtrl21, 0, wx.ALL, 5)
    
            bSizer2.Add(gSizer4, 0, wx.EXPAND, 5)
    
            gSizer6 = wx.GridSizer(0, 2, 0, 0)
    
            self.m_staticText13 = wx.StaticText(self, wx.ID_ANY, u"输入你的查询sql语句", wx.DefaultPosition, wx.DefaultSize, 0)
            self.m_staticText13.Wrap(-1)
            gSizer6.Add(self.m_staticText13, 0, wx.ALL, 5)
    
            self.m_textCtrl26 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(280, 25), 0)
            gSizer6.Add(self.m_textCtrl26, 0, wx.ALL, 5)
    
            self.m_button15 = wx.Button(self, wx.ID_ANY, u"commit", wx.DefaultPosition, wx.DefaultSize, 0)
            gSizer6.Add(self.m_button15, 0, wx.ALL, 5)
    
            bSizer2.Add(gSizer6, 0, wx.EXPAND, 5)
    
            self.m_textCtrl25 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(580, 250), style=wx.TE_MULTILINE|wx.TE_RICH2)
            bSizer2.Add(self.m_textCtrl25, 0, wx.ALL, 5)
    
            self.SetSizer(bSizer2)
            self.Layout()
    
            self.Centre(wx.BOTH)
            self.Bind(wx.EVT_BUTTON, self.openFilePath, self.m_button7)
            self.Bind(wx.EVT_BUTTON,self.commit, self.m_button15)
    
    
        def commit(self,event):
            sql = self.m_textCtrl26.GetValue()
            if sql == "" or self.path == "" or self.path == None:
                dlg = wx.MessageDialog(None, u"请输入sql语句和选择地址", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
            news = self.getMessage(sql)
            print(news)
            # 写数据
            s = ""
            with open(self.path, 'w', encoding='utf-8') as op:
                for i in news:
                    for j in i:
                        s = s+str(j)+'  '
                    s += '\n'
                op.write(s)
    
            self.m_textCtrl25.SetValue(s)
    
        def openFilePath(self, event):
            dialog = wx.FileDialog(self, "创建文件:", os.getcwd(), style=wx.FD_OPEN, wildcard='*.txt')
            if dialog.ShowModal() == wx.ID_OK:
                self.path = dialog.GetPath()  # 获取路径
                print(self.path)
                self.m_textCtrl21.SetValue(self.path)
    
    
        # 的到所有的想要的数据
        def getMessage(self, sql):
            cur = ThreadUi.cur
            try:
                cur.execute(sql)
                allnews = cur.fetchall()
            except RuntimeError:
                dlg = wx.MessageDialog(None, u"请检查你的sql是否正确", u"提示", wx.YES_NO | wx.ICON_QUESTION)
                if dlg.ShowModal() == wx.ID_YES:
                    pass
                dlg.Destroy()
            return allnews
    
    
        def __del__(self):
            pass
    
    
    def run(parent):
        app = wx.App(False)
        frame = MyFrame1(parent)
        frame.Show()
        app.MainLoop()
    
    
    # if __name__ == '__main__':
    #     app = wx.App(False)
    #     frame = MyFrame1(None)
    #     frame.Show()
    #     app.MainLoop()
    
    

    数据分析模块:analyse.py

    因为在之前自己的实现当中爬取的是淘宝和京东,所以分析了一下各个数据商品类型的平均值:

    通过简单的图表便是出来:

    import numpy as np
    from matplotlib import pyplot as plt
    from bbigwork import ThreadUi
    
    
    def run():
        cur = ThreadUi.cur
        conn = ThreadUi.connection
        zidian = {}
    
        tableName = ['diannao', 'diandyashua', 'qiuxie', 'shouji', 'shubao']
    
        for i in tableName:
            cur.execute('select price from %s' % i)
            news = cur.fetchall()
            li = []
            for new in news:
                li.append(float(new[0]))
            zidian[i] = li
    
        name = []
        aver = []
        for i in zidian:
            name.append(i)
            num = 0
            for j in zidian.get(i):
                num += j
            aver.append(int(num / len(zidian.get(i))))
    
        print(name)
        print(aver)
    
        plt.bar(name, aver)
        plt.show()

    展开全文
  • python大作业实验报告+源代码--爬虫【完美搞定大作业python大作业分享--30多个项目任你选(由于上传大小限制分多个文件上传。爬虫https://download.csdn.net/download/dhyuan_88/19651195小游戏:...
  • 2019-2020学年Python语言程序设计期末大作业,适用专业:计算机科学与技术、软件工程、数据科学等。试题:“龟兔赛跑动画开发”,包括基本要求(70分)、高级要求(30分)两部分。
  • 姚天昉是上海交大一位非常有名的计算机老师,期末大作业非常难,给弟弟妹妹们透露下。ps:这是大作业一,另有大作业二即将公布,敬请关注!Project ASimulating a Physical SystemIntroductionYou have already seen a ...
  • 数据集来自Kaggle网站上公开的Hotel booking demand项目 该数据集包含了一家城市酒店和一家度假酒店的预订信息,包括预订时间、入住时间、成人、儿童或婴儿数量、可用停车位数量等信息。本次数据分析主要包含如下...
  • python大作业项目.zip

    2021-11-26 19:32:26
    python大作业源码5例,包含抖音可视化,成绩管理系统,5G爬虫及可视化,天气爬虫及可视化以及动态条形图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,716
精华内容 1,086
关键字:

python期末大作业