Python计算全班所购买的书本费

Python计算全班所购买的书本费作为团支书和班长 全班的资料和数据过多 虽然办公软件能够解决许多数据处理问题 但自身学习编程这项专业 就要体现出本专业的水平 并且每一个学期都需要统计全班有哪些同学买哪些书 每个学期都拿办公软件去计算 会消耗大量时间 我本人就想着 编一个计算全班书本费的程序

大家好,我是讯享网,很高兴认识大家。

作为团支书和班长,全班的资料和数据过多,虽然办公软件能够解决许多数据处理问题,但自身学习编程这项专业,就要体现出本专业的水平,并且每一个学期都需要统计全班有哪些同学买哪些书,每个学期都拿办公软件去计算,会消耗大量时间,我本人就想着,编一个计算全班书本费的程序,每个学期统计好数据后,直接让Python自己计算,能省不少时间。

希望这个小程序能够对你有帮助。


目录

一、准备工作

二、代码阶段

1.库(xlrd)的使用

2.获取数据

运行结果:

3.处理数据

        输出结果如下(字典的形式):

4.数据计算

最最最最最重要的一步,程序计算!!!

输出结果:

三、全部代码


一、准备工作

首先当然得获取到全班同学所购买的书籍数据,然后程序才可以读取到数据并计算。

这里我使用的是.xlsx文件形式(本程序使用的是读取Excel表格的形式)。


讯享网

注意:这里一定要确保是以姓名之后是课程的顺序,关于B列姓名、C列课程,列可以不同。(如果不同一定要在代码中修改,否则程序读取不到数据!!!)


二、代码阶段

既然有了数据,那么就开始Python的程序计算。

1.库(xlrd)的使用

在这里需要说明一下,pip默认安装的库都是最新版本,而xlrd的最新版本是不支持xlsx文件的,需要将xlrd回退到1.2.0版本

import xlrd

讯享网

如果你的电脑中已安装最新版xlrd库,那么就要将它先删除。

你这可以直接找到xlrd的库文件,将它删除,也可在cmd中使用:

讯享网pip uninstall xlrd

安装旧版本的xlrd时,同样在cmd下,在末尾加上参数:

pip install xlrd==1.2.0

2.获取数据

讯享网def work_book(): # 获取表格对象 file = open("折扣Book.txt", "w") resort = xlrd.open_workbook("工作簿1.xlsx") # 文件路径 sheet = resort.sheet_by_index(0) # 获取sheet对象 """ 获取工作簿名,工作表行、列数 """ table = sheet.name # 获取工作表的名称 count_line = sheet.nrows # 获取行数 clos = sheet.ncols # 获取列数 print("工作表" + table, count_line, '行', clos, '列\n', end=" ") """ 如果你的表格中,姓名不在B列,课程的书本不在C列, 而是姓名在A列,课程书本在B列,那么就要将下面的 书本名称: sheet.row_values(i)[1] 中的 1 改成0 或你对应的姓名列数 Python循环默认以0开头,如:0,1,2,3,4,5,6,7,8,9 所以A列对应的是0,依此类推。 """ for i in range(count_line): read_line_book = sheet.row_values(i)[2].split("、") # 获取书本名称,用中文顿号分割 read_line_name = sheet.row_values(i)[1] # 获取姓名 file.writelines(read_line_name + ',' + ",".join(read_line_book) + "\n") file.close() # work_book() # 读取数据时,需要将注释删除,调用work_book()

这里的数据我们保存在自定义的文本文件中。

运行结果:

 存储的文件内容:

这里注意:每一位同学所购买都会有多有少,也有没买的(这里统一指自己购买)。

3.处理数据

def File(): file = open("折扣Book.txt", "r") # 打开work_book中创建的文本文件 txt = file.read() dic = {} # 创建字典,对应人员书本 for i in txt.split("\n")[1:]: new_txt = i.split(",") if new_txt[0] != "" or new_txt[-1] != "": del_txt = new_txt dic[del_txt[0]] = del_txt[1:] print(dic) # 将读取出来的内容,复制到Sum()当中,开始计算 file.close() # File()

在这里的for循环中, 因为在work_book中我们将读取出来的数据保存为文本文件(上图打开的记事本)的格式。

我可以看到每一个人程序都将它换行处理了,而我们需要的是读取每一个人的姓名以及对应的课程,放入字典中,星成键(姓名)对值(书本)。

        输出结果如下(字典的形式):

4.数据计算

然后我们就要将上面File()出来的数据复制下来,另存到Sum()当中。

最最最最最重要的一步,程序计算!!!

讯享网def Sum(): # 计算个人金额 lst = { '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', 'linux网络操作系统'], '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', '慧通职场英语'] } """ lst作为少量数据计算的测试,若成功计算出结果,则使用ls计算全班的书本费 """ ls = { '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', 'linux网络操作系统'], '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', '慧通职场英语'], } """ 将每一本书对应的金额设置参数,设为float值,每个书本起始值为0元,用for循环遍历字典中的键对值, 因为这里的书本内容是以字典的方式存储,所以算起来更加的方便。 """ MySQL_book, MySQL_book_money, MySQL_book_sum = 'MySQL数据库技术与项目', float(34.20), float(0) Sinnovation_book, Student_innovation_money, Sinnovation_sum = '大学生创新创业基础教程', float(30.32), float(0) Java_book, Java_book_money, Java_book_sum = "java基础入门", float(45.45), float(0) Linux_book, Linux_book_money, Linux_book_sum = "linux网络操作系统", float(37.85), float(0) English_book, English_book_money, English_book_sum = "慧通职场英语", float(35.57), float(0) Politics_book, Politics_book_money, Politics_book_sum = "新编普通高等学校军事课教程", float(30.25), float(0) NoSQL_book, NoSQL_book_money, NoSQL_book_sum = "NoSQL数据库技术与应用", float(60.65), float(0) sum_book = float(0) # 这里的sum_book作为每一次判断运算 w = open("教材统计.txt", "w", encoding="UTF-8") """ 每一次遍历循环判断此人是否包含对应的书,然后计算个人书本费 """ for i in ls.items(): for j in range(2): if len(i) != 0: if MySQL_book in i[j]: MySQL_book_sum += (sum_book + MySQL_book_money) if Sinnovation_book in i[j]: Sinnovation_sum += (sum_book + Student_innovation_money) if Java_book in i[j]: Java_book_sum += (sum_book + Java_book_money) if Linux_book in i[j]: Linux_book_sum += (sum_book + Linux_book_money) if English_book in i[j]: English_book_sum += (sum_book + English_book_money) if Politics_book in i[j]: Politics_book_sum += (sum_book + Politics_book_money) if NoSQL_book in i[j]: NoSQL_book_sum += (sum_book + NoSQL_book_money) count = "{}所购买书籍{}\n个人金额(折扣后的价格):{:.2f}元\n".format( i[0], i[1], MySQL_book_sum + Sinnovation_sum + NoSQL_book_sum + Linux_book_sum + Java_book_sum + Politics_book_sum + English_book_sum ) print(count) MySQL_book_sum, \ Sinnovation_sum,\ NoSQL_book_sum,\ Linux_book_sum,\ Java_book_sum,\ Politics_book_sum,\ English_book_sum = float(0), float(0), float(0), float(0), float(0), float(0), float(0) w.writelines(count) # Sum()

输出结果:

 并且会在程序的目录下创建已经计算好书本费的文本文件。

三、全部代码

import xlrd def work_book(): # 获取表格对象 file = open("折扣Book.txt", "w") resort = xlrd.open_workbook("工作簿1.xlsx") # 文件路径 sheet = resort.sheet_by_index(0) # 获取sheet对象 """ 获取工作簿名,工作表行、列数 """ table = sheet.name count_line = sheet.nrows clos = sheet.ncols print("工作表" + table, count_line, '行', clos, '列\n', end=" ") for i in range(count_line): read_line_book = sheet.row_values(i)[2].split("、") read_line_name = sheet.row_values(i)[1] file.writelines(read_line_name + ',' + ",".join(read_line_book) + "\n") file.close() # work_book() def File(): file = open("折扣Book.txt", "r") # 打开work_book中创建的文本文件 txt = file.read() dic = {} # 创建字典,对应人员书本 for i in txt.split("\n")[1:]: new_txt = i.split(",") if new_txt[0] != "" or new_txt[-1] != "": del_txt = new_txt dic[del_txt[0]] = del_txt[1:] print(dic) # 将读取出来的内容,复制到Sum()当中,开始计算 file.close() # File() def Sum(): # 计算个人金额 lst = { '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', 'linux网络操作系统'], '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', '慧通职场英语'] } ls = { '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', 'linux网络操作系统'], '*': ['MySQL数据库技术与项目', '大学生创新创业基础教程', '慧通职场英语'], } """ 将每一本书对应的金额设置参数,设为float值,每个书本起始值为0元,用for循环遍历字典中的键对值, 因为这里的书本内容是以字典的方式存储,所起算起来更加的方便。 """ MySQL_book, MySQL_book_money, MySQL_book_sum = 'MySQL数据库技术与项目', float(34.20), float(0) Sinnovation_book, Student_innovation_money, Sinnovation_sum = '大学生创新创业基础教程', float(30.32), float(0) Java_book, Java_book_money, Java_book_sum = "java基础入门", float(45.45), float(0) Linux_book, Linux_book_money, Linux_book_sum = "linux网络操作系统", float(37.85), float(0) English_book, English_book_money, English_book_sum = "慧通职场英语", float(35.57), float(0) Politics_book, Politics_book_money, Politics_book_sum = "新编普通高等学校军事课教程", float(30.25), float(0) NoSQL_book, NoSQL_book_money, NoSQL_book_sum = "NoSQL数据库技术与应用", float(60.65), float(0) sum_book = float(0) w = open("教材统计.txt", "w", encoding="UTF-8") """ 每一次遍历循环判断此人是否包含对应的书,然后计算个人书本费 """ for i in ls.items(): for j in range(2): if len(i) != 0: if MySQL_book in i[j]: MySQL_book_sum += (sum_book + MySQL_book_money) if Sinnovation_book in i[j]: Sinnovation_sum += (sum_book + Student_innovation_money) if Java_book in i[j]: Java_book_sum += (sum_book + Java_book_money) if Linux_book in i[j]: Linux_book_sum += (sum_book + Linux_book_money) if English_book in i[j]: English_book_sum += (sum_book + English_book_money) if Politics_book in i[j]: Politics_book_sum += (sum_book + Politics_book_money) if NoSQL_book in i[j]: NoSQL_book_sum += (sum_book + NoSQL_book_money) count = "{}所购买书籍{}\n个人金额(折扣后的价格):{:.2f}元\n".format( i[0], i[1], MySQL_book_sum + Sinnovation_sum + NoSQL_book_sum + Linux_book_sum + Java_book_sum + Politics_book_sum + English_book_sum ) print(count) MySQL_book_sum, \ Sinnovation_sum,\ NoSQL_book_sum,\ Linux_book_sum,\ Java_book_sum,\ Politics_book_sum,\ English_book_sum = float(0), float(0), float(0), float(0), float(0), float(0), float(0) w.writelines(count) Sum() 

小讯
上一篇 2025-03-29 13:38
下一篇 2025-04-09 23:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/39079.html