python程序设计课程的最后一次作业:统计学生学习时长;这是python程序设计课程的最后一次课的作业。
程序要求: 输入学生的信息,统计学生的学习时长。输入数据字段包括 :学生姓名、学号、学习时长
分析:学号为主键、可能有多个学生是同名但是学号唯一。
已经给出了模板代码,根据模板代码加以完善得到满足要求的解法,第一种是我用模板代码完善的,如下:
# -*- coding: utf-8 -*-
# @Time : 2019/12/28 23:00
# @Author : 1713406107
# @File : Student_老师的模板版本.py
def cat():
print("查看数据:")
for data in dataList:
print(data)
print("按l查看数据、按q退出并打印操作结果")
print("数据格式(逗号是英文逗号): 姓名,学号,学习时间长度 \n输入示范:hony,171,25")
dataList = []
idList = []
while 1:
d1 = dict()
learning_time = 0
data = input("请输入数据:")
if (data == "q"):break
if (data is ''): continue
if (data == 'l'):
cat()
continue
try:
datalist = data.split(",")
d1['姓名'] = datalist[0]
d1['学号'] = datalist[1]
d1['时间'] = float(datalist[2])
except:
print("转换出错!,请按格式输入数据!")
print("格式提示: 姓名,学号,学习时间长度")
continue
sgin = d1['学号']
if sgin in idList:
for datadict in dataList:
if sgin == datadict['学号']:
datadict['时间'] += d1['时间']
else:
pass
else:
dataList.append(d1)
idList.append(sgin)
# -----循环外
print("亲、本次体验已经结束!\n....")
cat()
# hony,171,25
第二种解法是我自己想的,想来想去总觉得,老师的那个代码模板有点问题,功能不够完善。所以就自己玩玩喽,如下:
# -*- coding: utf-8 -*-
# @Time : 2019/12/28 23:04
# @Author :
# @File : Student_自拟改进版1.py
class Student:
def __init__(self):
print("某某某---python程序设计的最后一次课的作业")
print("q退出、l查看、b返回、a添加、 u更新 d删除")
self.tableList = [] #实例化数据池、存放字典数据
self.stuID = []
def get_data(self): #获取输入数据,根据judge将字典存进数据池
print("添加数据: ( 逗号类型是英文逗号 ) ;\n格式: 姓名,学号,学习时间长度 \n输入示范:hony,171,25")
while 1:
d = dict()
data = input("请输入数据:")
if data == "q":
print("正在退出程序...打印操作结果")
self.print_result()
break
if data == "b": self.main()
if data == 'l':
self.print_result()
continue
try:
datalist = data.split(",")
d['姓名'] = datalist[0]
d['学号'] = datalist[1]
ltime = float(datalist[2])
d['时间'] = ltime
except:
print("学习时长字段转换出错,重新输入")
continue
yield d
def judge_exist(self,input_data): #判断dict是否存在table中、以及时间总和
symbo = input_data['学号']
if self.tableList == []:
self.tableList.append(input_data)
self.stuID.append(symbo)
else:
if symbo not in self.stuID:
self.tableList.append(input_data)
self.stuID.append(symbo)
else:
for dict_data in self.tableList:
if symbo == dict_data['学号']:
dict_data['时间'] += input_data['时间']
def print_result(self): #退出的时候打印结果
if self.tableList == []:
print("本次操作结果: tableList为空")
else:
for dict_data in self.tableList:
print(dict_data)
def choice(self,choice): #功能选择: 1.添加数据 2.更新数据 3. 删除数据
if choice == 'a':
self.append_data()
elif choice == 'u':
self.update_data()
elif choice == 'd':
self.del_data()
elif choice == 'q':
print("正在退出程序...打印操作结果")
self.print_result()
elif choice == 'l':
self.print_result()
self.main()
else:
self.main()
def append_data(self): #添加数据
d = self.get_data()
try:
for input_data in d:
self.judge_exist(input_data)
except:
pass
def update_data(self): #更新数据
sid = input("输入要更新的学号 进行 更新数据:")
if sid == "b":
self.main()
elif sid == 'l':
self.print_result()
self.update_data()
elif sid == 'q':
print("正在退出程序...打印操作结果")
self.print_result()
else:
if sid not in self.stuID:
print("输入的学号尚未存在于数据池中、请重新选择")
self.update_data()
else:
print("正在进入修改数据:若字段无需修改请直接回车")
for dict_data in self.tableList:
if sid == dict_data['学号']:
name = input("姓名:")
name = name.strip()
if (name is ''):
pass
else:
dict_data["姓名"] = name
dict_data["时间"] = self.u_time(dict_data)
self.update_data()
else:
pass
def u_time(self,dict_data):
lt = input("学习时长:")
if self.isFloat(lt):
try:
ltime = float(lt)
return ltime
except:
print("无法转换,重新输入")
self.u_time(dict_data)
else:
return dict_data['时间']
def isFloat(self,lt_num):
try:
float(lt_num)
if str(lt_num) in ['inf', 'infinity', 'INF', 'INFINITY', 'True', \
'NAN', 'nan', 'False', '-inf', '-INF','-INFINITY', '-infinity', 'NaN', 'Nan']:
return False
else:
return True
except:
return False
def del_data(self): #删除数据
sid = input("输入要删除学号 进行 删除数据:")
if sid == "b":
self.main()
elif sid == 'l':
self.print_result()
self.del_data()
elif sid == 'q':
print("正在退出程序...打印操作结果")
self.print_result()
else:
if sid not in self.stuID:
print("id不存在、重新输入")
self.del_data()
else:
index = self.stuID.index(sid)
try:
self.tableList.pop(index)
self.stuID.pop(index)
print('删除OK!')
self.del_data()
except:
print("删除失败!程序出错")
self.del_data()
def main(self):
choice = input("请输入需要进行的功能:\n[a:添加 u:更新 d:删除 q:结束程序 l:查看当前数据池] :")
self.choice(choice)
if __name__ == '__main__':
s = Student()
s.main()
# hony,171,25
欢迎加入QQ群一起学习和交流,只为学习和交流:275259334
悄悄说一下:挺多小姐姐的啵,哈哈哈哈哈