《Python程序开发》期末作业

news2025/1/21 13:00:41

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、题目:

1 .选修课信息(1).xlsx,信息如下:

 2 .学生选课信息表.xls,信息如下

3.任务

二、将文件中的信息导入数据库

1.实验前准备

2.连接mysql数据库

3.读取选修课信息(1).xlsx文件

4.将读取到(选修课信息(1).xlsx文件)批量插入数据库

5.读取学生选课信息表.xls文件

 6.将读取到的数据(学生选课信息表(去重数据后).xls)批量插入数据库

 二、统计每一门的选修课情况并生成班花名册

 三、院里要获得选课课程统计信息

四、统计各个专业选修本院课程的情况

五、统计每一个院系选修课为本院的情况,且对每一个院系的选修人数经行降序排序

六、项目代码

七、总结


一、题目:

1 .选修课信息(1).xlsx,信息如下:

 2 .学生选课信息表.xls,信息如下

3.任务

完成这样的一个系统,完成以下的功能:

     1.请将文件中的信息导入数据库

     2.统计每门公选课的选课情况,大于等于25人成班,并为每个成班的老师成一张学生花名册。

     3.院里要获得选课课程统计信息,包括选课总人数,院内学生选修人数,外院学生选修人数,要包括总数据和每门课程的分数据。例如:

         公选课编号   公选课名称    选修人数    本院选修人数     外院选修人数

           ...           ...          ...          ...              ...

          - - - - - - - - - - - - 最后一行 总计- -- - - - - - - - - - - - - - - -

    4.统计各个专业选修本院课程的情况,并按选修人数的多少,降序排序输出(要求按专业计算人数和百分比)

           序号   专业名称    选修人数     占比

           ...      ...         ...         ..% (保留2位小数)

           - - - - - - - - 最后一行 总计- - - - - - - - - -

    5.自己设计交互界面(非GUI界面)

项目要求

(1) 程序要添加适当的注释,程序要采用模块化编程,强调高内聚,低耦合。

(2) 程序要具在一定的健壮性,即当有错误操作时,程序也能适当地做出反应。

(3) 数据库设计合理,满足第3范式。

(4) 完成项目的基本功能


二、将文件中的信息导入数据库

1.实验前准备

    建一个school的数据库,在建course.sql和student_scourse.sql的表;pycharm的开发环境中也下载、导入入相应的模块。

course.sql(选修课信息.xlsx)

student_course.sql(学生选修课信息表.xls)

 下载、导入相应的模块

2.连接mysql数据库

"""
一、连接mysql数据库
"""
def connection_database():
    # 打开数据库连接
    conn = pymysql.connect(
        host='localhost',  # MySQL服务器地址
        user='root',  # 用户名
        password='123456',  # 密码
        charset='utf8',  # 编码
        port=3306,  # MySQL服务器端口号
        db='school',  # 数据库名称
    )
    # 使用cursor()方法获取操作游标
    # c = conn.cursor()
    return conn

3.读取选修课信息(1).xlsx文件

"""
二、读取选修课信息(1).xlsx文件
"""


def read_course():
    FilePath='选修课信息(1).xlsx'
    # 1.打开excel文件
    wkb = xlrd.open_workbook(FilePath)
    # 2.获取sheet
    sheet = wkb.sheet_by_index(0)  # 获取第一个sheet表:选修课信息(1).xlsx
    # 3.获取总行数
    rows_number = sheet.nrows
    # 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[]
    cap = []
    for i in range(1, rows_number):
        x = sheet.row_values(i)  # 获取第i行的值(从0开始算起)
        cap.append(x)
    return cap
    # print(cap) #[[1.0, '刘岳', 20420001.0, '文献与信息的检索利用', '法学院', '人文素养与社会科学', 1.0, 16.0], ...]

4.将读取到(选修课信息(1).xlsx文件)批量插入数据库

"""
三、将读取到的数据(选修课信息(1).xlsx文件)批量插入数据库
"""


def insert_course():
    conn = connection_database()  # 连接数据库
    c = conn.cursor()

    cap = read_course()  # 读取选修课信息(1)到的数据

    for stu in cap:
        id = int(stu[0])
        name = stu[1]
        course_number = stu[2]
        course_name = stu[3]
        open_department = stu[4]
        course_type = stu[5]
        credit = stu[6]
        period = stu[6]
        # 使用f-string格式化字符串,对sql进行赋值
        c.execute(
            f"insert into course(id,name,course_number,course_name,open_department,course_type,credit,period) value ('{id}','{name}','{course_number}','{course_name}','{open_department}','{course_type}','{credit}','{period}')")
    conn.commit()
    conn.close()
    print("选修课信息(1).xlsx文件,插入数据完成!")

5.读取学生选课信息表.xls文件

     考虑到有数据的重复,影响插入数据库,先检验是否有数据完全重复,执行删除重复行,将删除重复行的数据导入学生选课信息表(去重数据后).xls 最后,读取,学生选课信息表(去重数据后).xls

"""
四、读取学生选课信息表.xls文件
先检验是否有数据完全重复,执行删除重复行,将删除重复行的数据导入学生选课信息表(去重数据后).xls
最后,读取,学生选课信息表(去重数据后).xls
"""


def read_student_course():
    data = pd.DataFrame(pd.read_excel('学生选课信息表.xls', 'Sheet1'))
    # 查看读取数据内容
    #print(data)
    # 查看是否有重复行
    re_row = data.duplicated()
    # print(re_row)
    # 查看去除重复行的数据
    no_re_row = data.drop_duplicates()
    #print(no_re_row)  # 输出去重后的数据
    # 将去重后的数据另建一个excle文件

    # ***********已经执行过,不再执行。
    # no_re_row.to_excel(r'C:\Users\覃运脉\Desktop\python期末\学生选课信息表(去重数据后).xls', index=False, engine='openpyxl')

    FilePath = '学生选课信息表(去重数据后).xls'
    # 1.打开excel文件
    wkb1 = xlrd.open_workbook(FilePath)
    # 2.获取sheet
    sheet = wkb1.sheet_by_index(0)  # 获取第一个sheet表:学生选课信息表.xls
    # 3.获取总行数
    rows_number = sheet.nrows
    # 4.遍历sheet表中所有行的数据,并保存至一个空列表cap[]
    cap1 = []
    for i in range(1, rows_number):
        x = sheet.row_values(i)  # 获取第i行的值(从0开始算起)
        cap1.append(x)
    return cap1

    # print(cap1)#[[21200101419.0, '王璇', '法学院', '男', '法学', '法学2104班', '高等数学考研辅导课(上)'], ....]

生成学生选课信息表(去重数据后).xls

 6.将读取到的数据(学生选课信息表(去重数据后).xls)批量插入数据库

"""
五、将读取到的数据(学生选课信息表(去重数据后).xls)批量插入数据库
"""


def insert_student_course():
    conn = connection_database()  # 调用函数,连接数据库
    c = conn.cursor()

    cap1 = read_student_course()  # 调用函数,读取‘学生选课信息表(去重数据后).xls’得到的数据
    for stu in cap1:
        sno = stu[0]
        name = stu[1]
        department = stu[2]
        sex = stu[3]
        major = stu[4]
        in_class = stu[5]
        course_name = stu[6]

        # 使用f-string格式化字符串,对sql进行赋值
        c.execute(
            f"insert into student_course(sno,name,department,sex,major,in_class,course_name) value ('{sno}','{name}','{department}','{sex}','{major}','{in_class}','{course_name}')")
    conn.commit()
    conn.close()
    print("学生选课信息表.xls文件,插入数据完成!")

成功将数据插入数据库。

 二、统计每一门的选修课情况并生成班花名册

首先,要在项目的目录下,建一个“花名册”的文件夹

'''
六、班花名册
'''


def roster(Class_name):
    conn = connection_database()  # 调用函数,连接数据库
    c = conn.cursor()
    # query = (Class_name)  # 将要查询的课程转换为元组
    sql = "SELECT * FROM student_course WHERE course_name ='%s'" % (Class_name)
    c.execute(sql)  # 调用数据库查询
    course_group = c.fetchall()
    # print(course_group)
    Hua_Mingce = []  # 准备一个空列表用以存放数据库的查询结果
    for raw in course_group:
        Hua_Mingce.append(raw)  # 循环使得数据库查询出的结果增加到列表里
    if len(Hua_Mingce) >= 25:  # 判断班级人数是否大于或等于25人
        f = xlwt.Workbook('encoding = utf-8')  # 设置工作簿编码
        sheet1 = f.add_sheet('sheet1', cell_overwrite_ok=True)  # 创建sheet工作表
        try:
            for i in range(len(Hua_Mingce)):
                list_Huamingce = list(Hua_Mingce[i])  # 将原先查询出的数据由元组强制转换为列表
                for j in range(0, 7):
                    sheet1.write(i, j, list_Huamingce[j])  # 写入数据参数对应 行, 列, 值
        except:
            print("")
        fliter = "花名册/" + Class_name + ".xls"
        f.save(fliter)  # 保存.xls到当前工作目录
        print("##########花名册已生成,请到目录下查看##########")
    else:
        print("!!!!!!!!!当前选修课人数小于25人,不成班!!!!!!!!!")
        # print(Hua_Mingce)

效果截图:

 三、院里要获得选课课程统计信息

'''
七、院里要获得选课课程统计信息
'''


def count():
    conn = connection_database()  # 调用函数,连接数据库
    c = conn.cursor()
    c.execute("select course_name from course ORDER BY course_number")  # 查询所有课程语句,并且按课程编号排序
    course_line = c.fetchall()
    L = []  # 创建一个列表,用于储存数据库的查询结果
    for row in course_line:  # 创建循环
        L.append(row)  # 通过循环使数据库的查询结果增加到列表中

    print("%-10s\t %-20s\t %-10s\t %-12s\t %-12s" % (
        "公选课编号", "公选课名称", "选修人数", "本院选修人数", "外院选修人数"))
    xxrs = sum_xxrs = sum_xxgc = sum_sum1 = 0  # 准备计算数据的浮点型
    for t in range(len(L)):  # 循环course_info传过来的课程列表
        qt = xxgc = 0.0  # 准备其他学院和信息工程学院人数的计数
        sum1 = 0.0  # 准备总人数的计数
        query = (L[t])  # 准备将课程列表逐一插入SQL语句
        sql1 = "SELECT department course_name FROM student_course WHERE course_name = '%s'" % (query)
        c.execute(sql1)
        cursor = c.fetchall()

        # 查询当前循环下的各个学院的课程
        sql2 = "SELECT course_number FROM course WHERE course_name = '%s'" % (query)
        c.execute(sql2)
        courseid = c.fetchall()

        # 返回当前循环下的课程编号
        course_id = []
        for row in courseid:
            course_id.append(row)  # 将课程编号循环增加到准备好的列表里
        # print(course_id)
        Temp = []
        for row in cursor:
            Temp.append(row)  # 将学院列表增加到准备好的列表里
        for i in range(len(Temp)):  # 循环各个课程的学院列表
            # print(Temp[i])
            str = functools.reduce(operator.add, (Temp[i]))  # 将学院数据强制转换为String类型
            if str == "信息工程学院":  # 逐一判断是否为信息工程学院,是则信息工程学院人数+1,否则其他学院人数+1,同时总人数都+1
                xxgc += 1
                sum1 += 1
            else:
                qt += 1
                sum1 += 1
        xxrs = xxgc + qt  # 计算选修总人数
        sum_xxrs += xxrs
        sum_xxgc += xxgc
        sum_sum1 += qt
        str_print = functools.reduce(operator.add, (L[t]))  # 将当前循环的课程名称强制转换为String类型
        print("%-10s\t %-20s\t %-10s\t %-12s\t %-12s" % (course_id, str_print, xxrs, xxgc, qt))  # 打印数据

    print("\t\t\t\t\t\t\t\t\t\t\t %-10s\t %-12s\t %-12s" % (sum_xxrs, sum_xxgc, s

四、统计各个专业选修本院课程的情况

步骤:两表连接查询得到major_name(姓名,学院,专业名称,课程名称,课设院系);再对student_course学生选课表查询,获取到相应的专业名称,去重复的数据,将等到的结果转换为列表(手动复制,并附加上选修人数、选修外院人数且赋值为0),得到major(专业名称、选修人数、选修外院人数);算法计算,排序,输出结果。
'''
八、统计各个专业选修本院课程的情况,并按选修人数的多少
降序排序输出(要求按专业计算人数和百分比) 
步骤:两表连接查询得到major_name(姓名,学院,专业名称,课程名称,课设院系);
再对student_course学生选课表查询,获取到相应的专业名称,去重复的数据,
将等到的结果转换为列表(手动复制,并附加上选修人数、选修外院人数且赋值为0),
得到major(专业名称、选修人数、选修外院人数);
算法计算,排序,输出结果。
'''


def sum_major():
    conn = connection_database()  # 调用函数,连接数据库
    c = conn.cursor()
    sql = "select student_course.`name`,student_course.department,student_course.major,student_course.course_name," \
          "course.open_department from student_course  join course on student_course.course_name=course.course_name; "
    c.execute(sql)  # 获取总共的学院列表
    major_name = c.fetchall()
    # print(major_name)
    # (('勾晨', '法学院', '法学', '国家计算机二级Office高级应用', '通识教育课部'), ('勾晨', '法学院', '法学', '带你Carry电子竞技', '外国语学院')
    '''
    sql1 = "select student_course.major" \
           " from student_course  join course on student_course.course_name=course.course_name; "
    c.execute(sql1)  # 获取相应的专业名称
    major1 = c.fetchall()
    # print(major1)
    major2 = set(major1)#除去重复的专业名称
    # print(major2)
    major = list(major2)#转换为列表
    print(major)
    #********************这部分暂时不用**************
    '''
    # 专业名称,选修人数,选修课为本院专业人数,相对于每一专业的数据
    major = [
        ['物联网工程', 0, 0], ['产品设计', 0, 0], ['数据科学与大数据技术', 0, 0], ['旅游管理', 0, 0], ['人力资源管理', 0, 0], ['软件工程(中软班)', 0, 0],
        ['商务英语', 0, 0], ['国际贸易规则', 0, 0],
        ['网络工程(华为实验班)', 0, 0], ['英语', 0, 0], ['电子商务', 0, 0], ['金融学', 0, 0], ['工商管理', 0, 0], ['网络工程', 0, 0],
        ['审计学', 0, 0],
        ['法学', 0, 0], ['新闻学', 0, 0],
        ['工艺美术', 0, 0], ['会计学ACA', 0, 0], ['国际经济与贸易', 0, 0], ['酒店管理', 0, 0], ['会计学', 0, 0], ['数字媒体艺术', 0, 0],
        ['财务管理', 0, 0], ['投资学', 0, 0], ['跨境电子商务', 0, 0],
        ['供应链管理', 0, 0], ['财政学', 0, 0], ['工程管理', 0, 0], ['网络与新媒体', 0, 0], ['视觉传达设计', 0, 0], ['税收学', 0, 0],
        ['影视摄影与制作', 0, 0], ['软件工程(腾讯精英班)', 0, 0],
        ['环境设计', 0, 0], ['市场营销', 0, 0], ['物流管理', 0, 0], ['财务管理CIMA', 0, 0]]

    for i in range(len(major_name)):
        for j in range(len(major)):
            # 计算各个专业的选修人数
            if major_name[i][2] == major[j][0]: major[j][1] += 1
            # 计算选修课为本院的人数
            if (major_name[i][2] == major[j][0]) and (major_name[i][1] == major_name[i][4]):
                major[j][2] += 1

    # 按选修人数降序排序,对major经行排序
    major.sort(key=lambda x: x[1], reverse=True)

    # 输出相应的数据
    print("专业名称\t\t选修人数\t\t选修课为本院专业人数\t\t占比")
    for j in range(len(major)):
        print("%s\t\t%d\t\t%d\t\t%.2f" % (major[j][0], major[j][1], major[j][2], (major[j][2] / major[j][1])))

    # 计算总计的专业个数,各专业的选修人数,选修课为外院的人数
    print('**********总计**********')
    sum1 = 0
    sum2 = 0
    for i in range(len(major)):
        sum1 += major[i][1]
        sum2 += major[i][2]
    print("专业数\t\t选修人数\t\t选修课为本院专业人数")
    print("%d\t\t\t%d\t\t\t%d" % (len(major), sum1, sum2))

五、统计每一个院系选修课为本院的情况,且对每一个院系的选修人数经行降序排序

'''
九、统计每一个院系选修课为本院的情况,且对每一个院系的选修人数经行降序排序
'''


def count_department_major():
    conn = connection_database()  # 调用函数,连接数据库
    c = conn.cursor()
    fx = kj = jryjj = xxgc = wgy = gl = 0.0  # 准备计算中间变量

    sql1 = "SELECT  department FROM student_course ORDER BY department"
    c.execute(sql1)  # 获取总共的学院列表
    major_name = c.fetchall()

    sql2 = "SELECT DISTINCT department FROM student_course ORDER BY department"
    c.execute(sql2)  # 获取有多少个学院,不重复
    judge = c.fetchall()
    # [('会计学院',), ('信息工程学院',), ('外国语学院',), ('法学院',), ('管理学院',), ('艺术与传媒学院',), ('金融与经济学院',)]

    major=[]#学院,每一个学院选修的人数
    major1 = [['会计学院',0], ['信息工程学院', 0], ['外国语学院', 0], ['法学院', 0, ], ['管理学院', 0], ['艺术与传媒学院',0], ['金融与经济学院', 0]]

    for row in major_name:
        major.append(row)  # 将查询的数据插入到列表
    for t in range(len(major)):  # 循环各个学生来自的学院
        for i in range(len(major1)):
            str_major = functools.reduce(operator.add, (major[t]))  # 将各个学生来自的学院强制转换为String类型
            if str_major==major1[i][0]:major1[i][1]+=1

    #对每一个院系的选修人数进行降序排序
    major1.sort(key=lambda x: x[1], reverse=True)
    print("序号\t\t\t学院\t\t\t选修人数\t\t占比")
    sum=0
    for i in range(len(major1)):
        sum+=major1[i][1]
    for i in range(len(major1)):
        print("%d\t\t%s\t\t%d\t\t%.2f"%(i,major1[i][0],major1[i][1],major1[i][1]/sum))
    print("选修人数总计:%d" % sum)  # 输出总的选修人数

六、项目代码

《Python程序开发》期末作业

七、总结

实验很有兴趣,收获很富!!!
以上就是今天要讲的内容,本文仅仅简单介绍了《Python程序开发》的实验过程和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

脱水蔬菜开启蔬菜产业发展新道路 国内市场正不断扩大

根据观研报告网发布的《中国脱水蔬菜市场发展现状研究与投资前景预测报告(2022-2029年)》显示,脱水蔬菜又称复水菜,是将新鲜蔬菜经过洗涤、烘干等加工制作,脱去蔬菜中大部分水分后而制成的一种干菜,食用时只…

Netty实战与源码剖析(一)——浅谈NIO编程

1 前言 很久之前就想写与Netty相关的博客了,但由于个人时间安排的问题一直拖到了现在,借助这个机会,重新温习Java高级编程的同时,也把Netty实战以及源码剖析分享给各位读者。 2 Netty是什么? Netty is a NIO client …

Spring—Spring IOC

文章目录Spring IOC容器1. 什么是IOC2.IOC的核心原理IOC如何充当对象容器?具体什么作为对象容器?IOC的核心原理图3. IOC容器的底层原理IOC的实现,依赖于以下3门技术上边提到的三种技术如何实现IOC的呢?4.IOC(接口)————————…

官宣!CATCTF不日开赛!!

各位极客请注意! 2022.12.31 10:00—2023.01.01 17:00 攻防世界 x Nepnep x CATCTF 即将开赛 请做好参战准备! 本场赛事由攻防世界提供技术与平台支撑 部分赛题募集自各位爱猫人士 其他题目则由Nepnep的师傅们承包 赛事运维人员也将由志愿者师傅们…

一起Talk Android吧(第四百四十八回:UI控件之Switch)

文章目录概念介绍使用方法内容总结各位看官们大家好,上一回中咱们说的例子是"UI控件之TimePickerDialog",这一回中说的例是" UI控件之Switch"。闲话休提,言归正转,让我们一起Talk Android吧!概念介绍 我们在…

设计模式~简单工厂模式

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 工厂模式专门负责将大量有共同接口的类实例化。 工厂模式的几种形态: 简单工厂模式(Simple Factory):又称静态工厂方法模式工厂方法模式(Factory Method):又称多态…

云卷云舒:2022 数据库总结从Gartner到IDC

2022年尾已至,行业总结纷纷而至。Gartner 于12月13日发布了其 “2022 云数据库管理系统魔力象限”IDC于12月15日发布了 “2022年上半年中国关系型数据库软件市场跟踪报告”Gartner 的魔力象限,聚焦在 "Cloud Database",不再进行本地…

《Redis实战篇》三、优惠券秒杀

文章目录3.1 全局唯一ID3.2 Redis实现全局唯一Id3.3 添加优惠卷3.4 实现秒杀下单3.5 库存超卖问题分析3.6 乐观锁解决超卖问题3.7 优惠券秒杀-一人一单3.8 集群环境下的并发问题3.1 全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保…

nginx+rtmp+OBS搭建音视频直播服务

文章目录OBSNginx-rtmpdocker方式野生方式推流hls单码流rtmp多码流拉流OBS 下载地址: http://www.obsproject.com.cn/download/https://obsproject.com/zh-cn/download 傻瓜式一路按照提示安装即可。 Nginx-rtmp docker方式 有很多个镜像可供选择,我…

3.0、Hibernate-延迟加载 1

3.0、Hibernate-延迟加载 1 Hibernate 延迟加载 也叫 惰性加载、懒加载; 使用延迟加载可以提高程序运行效率,Java 程序 与 数据库交互的频次越低,程序运行的效率就越高,所以我们应该尽量减少 Java 程序 与 数据库的交互次数&#…

“ 总有个人会捡起 七零八落的你 “

把我所有最好的那些东西 给从来不曾抛弃我的人 所幸音频:00:0003:50 | 01 | 我想象过漂洋过海的冒险 向往过孤身一人的江湖 也憧憬过无拘无束的高飞 但是 越长大我越发现 家人在我生命中占据着不可或缺 | 02 | “怎么都不要我” 贺子秋说出来这句话的时候我…

【Python机器学习】隐马尔可夫模型讲解及在中文分词中的实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 隐马尔可夫模型(HMM)是关于时序的概率模型,它可用于标注等问题中 基本思想 假设一个盒子里可以装两个骰子,骰子的种类有四面的和六面的两种。现在进行猜骰子实验&#xff0c…

云原生安全系列3:5个 Kubernetes API 网络安全访问最佳实践

Kubernetes 中的 API 访问控制会经历三个步骤。首先,对请求进行身份验证,然后检查请求的有效授权,然后执行请求准入控制,最后授予访问权限。但在身份验证过程开始之前,确保正确配置网络访问控制和 TLS 连接应该是首要任…

SuperMap iPortal 对接postgis业务数据库(一):使用nodejs连接数据库并通过接口返回数据

前言 最近有很多人问SuperMap iPortal怎样对接自己的业务数据库,而目前SuperMap iPortal还没办法直接对接,但是可以通过11版本新增的低代码编辑器绕行实现.大致实现步骤如下: 1. 使用nodejs连接数据库并通过接口返回数据 2. 在大屏中请求接口数据并在图…

华为云解锁云原生数据库发展新动能

摘要:如流水般源源不断的数据都存放在哪里?云原生数据库到底是什么?企业基于云原生数据库如何随取随用,实现从 “上好云” 到 “用好云” 的跨越发展?本文分享自华为云社区《探秘・云新知丨华为云解锁云原生数据库发展…

地统计插值学习心得(一)

引言 当我们尝试使用克里金方法插值数据时,最常见的问题之一就是数据中存在极值或者说是异常值。极值是指与其他数据相比非常大或非常小的数据值。通常是由于监测设备故障或数据输入失误造成的,比如不小心删除了数据中的小数点。在进行插值之前,应手动纠正或删除这些错误数据…

非零基础自学Golang 第12章 接口与类型 12.4 空接口

非零基础自学Golang 文章目录非零基础自学Golang第12章 接口与类型12.4 空接口12.4.1 将值保存到空接口12.4.2 从空接口取值12.4.3 空接口的常见使用第12章 接口与类型 12.4 空接口 12.4.1 将值保存到空接口 空接口(interface{})是Go语言中最特殊的接…

MD5算法:利用python进行md5 hash值的获取

MD5基本概念 MD5,即信息摘要算法,英文为MD5 Message-Digest Algorithm,是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),也叫散列值&…

Live800:不做背锅侠,在线客服系统有帮助

一个公司最牛的部门是哪个? 不同的公司可能有不同的答案,但要说公司哪个部门最憋屈,承接客户的炮火最多,那一定是客服部。因为无论是产品的质量、物流、使用出了问题,消费者的负向反馈都会轰向客服,而当客…

中低压分布式电源并网方案(RCL0923群调群控协同控制终端/RCL0923A分布式光伏逆变器数据采集器)方案

中低压分布式电源并网方案(RCL0923群调群控协同控制终端/RCL0923A分布式光伏逆变器数据采集器)方案 中低压分布式电源并网方案(RCL0923群调群控协同控制终端/分布式光伏逆变器数据采集器)方案 RCL0923分布式光伏电源群调群控协调控制终端/分布式光伏逆变器数据采集器 方案一…