1. 程式人生 > >python學習例項(6)

python學習例項(6)

#=============================
#6.6 檔案系統(File System)
#=============================

#+++++++++++++++++++++++++++++
#6.6.3 Python中的檔案操作
#+++++++++++++++++++++++++++++

#<程式:讀取檔案os.py>
f = open("./Task1.txt",'r'); fls = f.readlines()
for line in fls:
    line = line.strip(); print (line)
f.close()



#<程式:讀取檔案os.py,計算並寫回>
f = open("./Task1.txt",'r+'); fls = f.readlines()
for line in fls:
    line = line.strip(); lstr = line.split()
    if lstr[0] == '3':
        res = 0
        for e in lstr[1:]:
            res+=int(e)
f.write('\n4 '+str(res)); f.close()


#+++++++++++++++++++++++++++++
#6.6.4 學生例項4.6.3擴充套件
#+++++++++++++++++++++++++++++

#<程式:儲存考試結果到class1.txt檔案>
class student:
	def __init__ (self,mname,studentID):
		self.name = mname; self.StuID = studentID;	self.Course_Grade = {};
		self.Course_ID = []; self.GPA = 0;	self.Credit = 0
	def selectCourse(self,CourseName,CourseID):
		self.Course_Grade[CourseID]=0;			#CourseID:0 加入字典
		self.Course_ID.append(CourseID)			# CourseID 加入列表
		self.Credit = self.Credit+ CourseDict[CourseID].Credit #總學分數更新
	def getInfo(self):
		print("Name:",self.name);print("StudentID",self.StuID);print("Course:")
		for courseID,grade in self.Course_Grade.items():
			print(CourseDict[courseID].courseName,grade)
			print("GPA",self.GPA); 	print("Credit",self.Credit); print("")
	def TakeExam(self, CourseID):
		self.Course_Grade[CourseID]=random.randint(50,100)
		self.calculateGPA()
	def Grade2GPA(self,grade):
		if(grade>=90):
			return 4
		elif(grade>=80):
			return 3
		elif(grade>=70):
			return 2
		elif(grade>=60):
			return 1
		else:
			return 0
	def calculateGPA(self):
		g = 0;
		#遍歷每一門所修的課程
		for courseID,grade in self.Course_Grade.items():
			g = g + self.Grade2GPA(grade)* CourseDict[courseID].Credit
		self.GPA = round(g/self.Credit,2)

class Course:
	def __init__ (self,cid,mname,CourseCredit,FinalDate):
		self.courseID = cid
		self.courseName = mname
		self.studentID = []
		self.Credit = CourseCredit
		self.ExamDate = FinalDate
	def SelectThisCourse(self,stuID):	#記錄誰修了這門課,在studentID列表裡
		self.studentID.append(stuID)

def setupCourse (CourseDict):	#建立CourseList: list of Course objects
    CourseDict[1]=Course(1,"Introducation to Computer Science",4,1)
    CourseDict[2]=Course(2,"Advanced Mathematics",5,2)
    CourseDict[3]=Course(3,"Python",3,3)
    CourseDict[4]=Course(4,"College English",4,4)
    CourseDict[5]=Course(5,"Linear Algebra",3,5)

def setupClass (StudentDict):    #輸入一個空列表
    NameList = ["Aaron","Abraham","Andy","Benson","Bill","Brent","Chris","Daniel",
    "Edward","Evan","Francis","Howard","James","Kenneth","Norma","Ophelia","Pearl",
    "Phoenix","Prima","XiaoMing"] 
    stuid = 1
    for name in NameList:
        StudentDict [stuid]=student(name,stuid)     #student物件的字典
        stuid = stuid + 1

def SelectCourse (StudentList, CourseList):
    for stu in StudentList:		#每一個學生修幾門課
        CourseNum = random.randint(3,len(CourseList))		#修CourseNum數量的課
        #隨機選,返回列表
        CourseIndex = random.sample(range(len(CourseList)), CourseNum)
        for index in CourseIndex:
            stu.selectCourse(CourseList[index].courseName,CourseList[index].Credit)
            CourseList[index].SelectThisCourse(stu.StuID)

def ExamSimulation (StudentList, CourseList):
    for day in range(1,6):	#Simulate the date
        for cour in CourseList:
            if(cour.ExamDate==day):	# Hold the exam of course on that day
                for stuID in cour.studentID:
                    for stu in StudentList:
                        if(stu.StuID == stuID):	#student stuID selected this course
                            stu.TakeExam(cour.courseID)

import random
CourseDict={}
StudentDict={}
setupCourse(CourseDict)
setupClass(StudentDict)
SelectCourse(list(StudentDict.values()),list(CourseDict.values()))
ExamSimulation(list(StudentDict.values()),list(CourseDict.values()))

SaveToFile = ["ID"," ","Name"," ","Credit"," ","GPA","\n"]
for stu in StudentDict.values():
                SaveToFile.append(str(stu.StuID))
                SaveToFile.append(" ")
                SaveToFile.append(str(stu.name))
                SaveToFile.append(" ")
                SaveToFile.append(str(stu.Credit))
                SaveToFile.append(" ")
                SaveToFile.append(str(stu.GPA))
                SaveToFile.append("\n")
f = open("class1.txt","w")
f.writelines(SaveToFile)
f.close()




#<程式:查詢檔案class1.txt中滿足某條件的學生資訊>
def select(path,col,op,val):
	f = open(path,"r")
	colNum = 0
	if col == "ID": colNum = 0
	elif col == "Name": colNum = 1
	elif col == "Credit": colNum = 2
	elif col == "GPA": colNum = 3
	f.readline()
	Info = f.readlines()
	res = []
	for e in Info:
		e = e.strip()
		eList = e.split()
		if colNum != 1:
			exp = eList[colNum] + op + val
		else:
			exp = "'" + eList[colNum] + "'" + op + "'" + val + "'"
		if eval(exp):
			res.append(e)
	f.close()
	return res
for e in select("class1.txt","Credit",">=","15"):
    print (e)



#<程式:對檔案class1.txt中學生進行排序>
def sort(path,col,direct):	
#direct表示排序方向,">"為從大到小排序,"<"相反。
	colNum = 0
	if col == "Credit": colNum = 2
	elif col == "GPA": colNum = 3
	ifrev = False
	if direct == ">":ifrev = True
	f = open(path,"r")
	f.readline()
	Info = f.readlines()
	res = []
	for e in Info:
		eList = e.split()
		res.append(eList)
	res =sorted(res, key=lambda res: res[colNum],reverse=ifrev) 
#第三個引數為排序方向
	f.close()
	return res
L = [('b',2),('a',1),('c',3),('d',4)]
print (sorted(L, key=lambda x:x[1]))