项目1-Python基础综合训练
json文件的数据格式确定:
版本V1:
{ "张三":{ "English": 30.0, "Music": 45.56, "Chinese": 100.9 } }
版本V2:
{ "Name": "张三", "English": 30.0, "Music": 45.56, "Chinese": 100.9 }
版本V3:
{ "Name": "张三", "Mark": { "English": 30.0, "Music": 45.56, "Chinese": 100.9 } }
版本V4:
{ "Name":"张三", "Gender":"male", "Age":16, "Mark":[ { "Subject":"English", "Score": 30.0 }, { "Subject":"Music", "Score": 30.0 }, { "Subject":"Chinese", "Score": 30.0 } ] }
版本V4错误格式:
{ "Name": "张三", "Gender":"male", "Age":16, "Mark":{ { "Subject":"English", "Score": 30.0, }, { "Subject":"Music", "Score": 30.0 , }, { "Subject":"Chinese", "Score": 30.0, } } }
版本V5:
[{ "Name": "张三", "Gender":"male", "Age":16, "Mark":[ { "Subject":"English", "Score": 60.0 }, { "Subject":"Music", "Score": 80.0 }, { "Subject":"Chinese", "Score": 30.0 } ] }, { "Name": "里斯", "Gender":"male", "Age":15, "Mark":[ { "Subject":"English", "Score": 90.0 }, { "Subject":"Music", "Score": 90.0 }, { "Subject":"Chinese", "Score": 37.0 } ] }, { "Name": "王莎莎", "Gender":"female", "Age":18, "Mark":[ { "Subject":"English", "Score": 100.0 }, { "Subject":"Music", "Score": 100.0 }, { "Subject":"Chinese", "Score": 10.0 } ] } ]
以上版本有一个格式是错误的,其他版本格式都是正确的,都有自身的优点及缺点。
Python 核心代码:
参考1:
stuDict={"zs":100,"wang":86,"liu":67} sName=input("请输入学生的名称:") if(sName not in stuDict): print("你输入的学生不在.") else: print("此学生分数为:",stuDict[sName]) #print(stuDict.get(sName,"你输入的学生不在."))
参考2:
import json with open("stu_mark3.json", mode='r', encoding='utf-8') as fp: stu_mark=json.load(fp) print(stu_mark) print(type(stu_mark))
参考3:
import json stu_mark={} stu_mark["Name"]=input("Name=") stu_mark["English"]=float(input("English=")) stu_mark["Music"]=float(input("Music=")) stu_mark["Chinese"]=float(input("Chinese=")) print(stu_mark) with open("stu_mark.json", mode='w', encoding='utf-8') as fp: json.dump(stu_mark, fp,ensure_ascii=False,indent=2)
参考4:
import json stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) # print(stuList) for e in stuList: print(e["Name"],e["Gender"],e["Age"]) for s in e["Mark"]: print(s["Subject"],s["Score"]) print("*"*50)
几个目标: 求最高分,求最低分,求平均分,求排序,求名次,求柱状图。
参考代码1:
import json def printStuList(stuList): for e in stuList: sf=0 print(e["Name"],e["Gender"],e["Age"],end=' ') for s in e["Mark"]: print(s["Subject"],s["Score"],end=' ') sf+=s["Score"] print("Average",sf/3.0,end=' ') print("") print("*"*50) stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) printStuList(stuList) print("\n\n按照年龄排序后:\n") stuList.sort(key=lambda item:item["Age"]) printStuList(stuList) print("\n\n按照英语成绩排序后:\n") stuList.sort(key=lambda item:item["Mark"][0]["Score"]) printStuList(stuList) print("\n\n按照平均分排序后:\n") stuList.sort(key=lambda item:(item["Mark"][0]["Score"]+item["Mark"][1]["Score"]+item["Mark"][2]["Score"])/3) printStuList(stuList)
参考代码2:
import json def calSum(eJson): return eJson["Score"] def printStuList(stuList): for e in stuList: sf=0 print(e["Name"],e["Gender"],e["Age"],end=' ') for s in e["Mark"]: print(s["Subject"],s["Score"],end=' ') sf=sum(list(map(calSum,e["Mark"]))) print("Sum",sf,end=' ') e["Sum"]=sf print("") print("*"*50) stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) printStuList(stuList) print(stuList) print("\n\n按照年龄排序后:\n") stuList.sort(key=lambda item:item["Age"]) printStuList(stuList) print("\n\n按照英语成绩排序后:\n") stuList.sort(key=lambda item:item["Mark"][0]["Score"]) printStuList(stuList) print("\n\n按照Sum总分排序后:\n") stuList.sort(key=lambda item:(item["Sum"])) printStuList(stuList)
代码3:
import json import matplotlib.pyplot as plt def calSum(eJson): return eJson["Score"] def printStuList(stuList): for e in stuList: sf=0 print(e["Name"],e["Gender"],e["Age"],end=' ') for s in e["Mark"]: print(s["Subject"],s["Score"],end=' ') sf=sum(list(map(calSum,e["Mark"]))) print("Sum",sf,end=' ') e["Sum"]=sf print("") print("*"*50) stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) printStuList(stuList) print(stuList) print("\n\n按照年龄排序后:\n") stuList.sort(key=lambda item:item["Age"]) printStuList(stuList) print("\n\n按照英语成绩排序后:\n") stuList.sort(key=lambda item:item["Mark"][0]["Score"]) printStuList(stuList) print("\n\n按照Sum总分排序后:\n") stuList.sort(key=lambda item:(item["Sum"])) printStuList(stuList) nameList=list() sumList=list() for e in stuList: nameList.append(e["Name"]) sumList.append(e["Sum"]) # nameTuple=tuple(nameList) nameTuple=tuple() nameTuple=tuple(nameList) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.bar(nameTuple, sumList) plt.title('总分柱状图') plt.show()
代码4:
import json import matplotlib.pyplot as plt import numpy as np def calSum(eJson): return eJson["Score"] def printStuList(stuList): for e in stuList: sf=0 print(e["Name"],e["Gender"],e["Age"],end=' ') for s in e["Mark"]: print(s["Subject"],s["Score"],end=' ') sf=sum(list(map(calSum,e["Mark"]))) print("Sum",sf,end=' ') e["Sum"]=sf print("") print("*"*50) stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) printStuList(stuList) print(stuList) print("\n\n按照年龄排序后:\n") stuList.sort(key=lambda item:item["Age"]) printStuList(stuList) print("\n\n按照英语成绩排序后:\n") stuList.sort(key=lambda item:item["Mark"][0]["Score"]) printStuList(stuList) print("\n\n按照Sum总分排序后:\n") stuList.sort(key=lambda item:(item["Sum"])) printStuList(stuList) nameList=list() sub1List=list() sub2List=list() sub3List=list() for e in stuList: nameList.append(e["Name"]) sub1List.append(e["Mark"][0]["Score"]) sub2List.append(e["Mark"][1]["Score"]) sub3List.append(e["Mark"][2]["Score"]) # nameTuple=tuple(nameList) nameTuple=tuple() nameTuple=tuple(nameList) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False bar_width=0.3 index0=np.arange(len(sub1List)) index1=index0+bar_width index2=index1+bar_width plt.bar(index0,height=sub1List,width=bar_width,color='b',label="English") plt.bar(index1,height=sub2List,width=bar_width,color='g',label="Music") plt.bar(index2,height=sub3List,width=bar_width,color='r',label="Chinese") plt.legend() # 显示图例 plt.xticks(index0 + bar_width/2, nameList) # 让横坐标轴刻度显示 waters 里的饮用水, index_male + bar_width/2 为横坐标轴刻度的位置 plt.ylabel('成绩') # 纵坐标轴标题 plt.title('成绩柱状图') plt.show()
import json import matplotlib.pyplot as plt import numpy as np def printStuList(stuList): for e in stuList: sf=0 print(e["Name"],e["Gender"],e["Age"],end=' ') for s in e["Mark"]: print(s["Subject"],s["Score"],end=' ') sf=sum(list(map(calSum,e["Mark"]))) print("Sum",sf,end=' ') e["Sum"]=sf print("") print("*"*50) stuList=list() with open("stu_mark4.json", mode='r', encoding='utf-8') as fp: stuList=json.load(fp) print(stuList) # nameList=list() # sub1List=list() # sub2List=list() # sub3List=list() nameList=[e["Name"] for e in stuList] print(nameList) sub1List=[e["Mark"][0]["Score"] for e in stuList] sub2List=[e["Mark"][1]["Score"] for e in stuList] sub3List=[e["Mark"][2]["Score"] for e in stuList] print(sub1List,sub2List,sub3List) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False bar_width=0.3 index0=np.arange(len(sub1List)) index1=index0+bar_width index2=index1+bar_width plt.bar(index0,height=sub1List,width=bar_width,color='b',label="English") plt.bar(index1,height=sub2List,width=bar_width,color='g',label="Music") plt.bar(index2,height=sub3List,width=bar_width,color='r',label="Chinese") plt.legend() # 显示图例 plt.xticks(index0 + bar_width/2, nameList) # 让横坐标轴刻度显示 nameList 里的饮用水, index_male + bar_width/2 为横坐标轴刻度的位置 plt.ylabel('成绩') # 纵坐标轴标题 plt.title('成绩柱状图') plt.show()