과제

컴사파 - 7주차

とおき 2022. 10. 10. 23:34

어떻게함?

7.1 class Person, class Student-

## 22211975_homework7
"""
 Project: 22211975_homework7.1
 Author:
 Date of last update: 22.10.16
 Update list:
    -v1.0: added user-defined module
"""

class Person:
    def __init__(self, name, reg_id, age):
        self.setName(name)
        self.setRegID(reg_id)
        self.setAge(age)
    def getName(self):
        return self.name
    def getRegID(self):
        return self.reg_id
    def getAge(self):
        return self.age
    def setName(self, nm):
        self.name = nm
    def setRegID(self, rg_id):
        self.reg_id = rg_id
    def setAge(self, ag):
        if 0 <= ag < 250:
            self.age = ag
        else:
            print("*** Error in setting age (name:{}, age:{})".format(self.name, ag))
            self.age = 0 # default value
    def __str__(self):
        return "Person({}, {}, {})".format(self.getName(), self.getRegID(), self.getAge())
    
class Student(Person):
    def __init__(self, name, reg_id, age, st_id, major, gpa):
        Person.__init__(self, name, reg_id, age)
        self.setMajor(major)
        self.setSTID(st_id)
        self.setGPA(gpa)
    def getMajor(self):
        return self.major
    def getSTID(self):
        return self.st_id
    def getGPA(self):
        return self.GPA
    def setMajor(self, major):
        # checking available major
        set_majors = {"EE", "ICE", "ME", "CE"}
        if major in set_majors:
            self.major = major
        else:
            print("*** Error in setting major (name:{}, age:{})".format(self.name, major))
            self.major = None # default value
    def setSTID(self, st_id):
        # include checking correctness of ST_ID here
        self.st_id = st_id
    def setGPA(self, gpa):
        #include checking correct range of GPA
        self.GPA = gpa
    def __lt__(self, other):
        if (self.GPA > other.GPA):
            return True
        else:
            return False
    def __str__(self):
        return "Student({}, {}, {}, {}, {}, {})".\
        format(self.getName(), self.getRegID(), self.getAge(), self.getSTID(), self.getMajor(), self.getGPA())

def compareStudent(st1, st2, compare):
    if compare == "st_id": 
        if st1.st_id < st2.st_id:
            return True
        else:
            return False
    elif compare == "name": 
        if st1.name < st2.name:
            return True
        else:
            return False
    elif compare == "GPA": 
        if st1.GPA > st2.GPA: # GPA in decreasing order return True
            return True
        else:
            return False
    else:
        return None

def sortStudent(L_st, key):
    for i in range(0, len(L_st)):
        min_idx = i
        for j in range(i+1, len(L_st)):
            if compareStudent(L_st[j], L_st[min_idx], key):
                min_idx = j
        if min_idx != i:
            L_st[i], L_st[min_idx] = L_st[min_idx], L_st[i]

def printStudents(L_st):
    for s in range(len(L_st)):
        print(L_st[s])
        
# Application
if __name__ == "__main__":
    students = [Student("Kim", 990101, 21, 12345, "EE", 4.0),
                Student("Lee", 980715, 22, 11234, "ME", 4.2),
                Student("Park", 101225, 20, 10234, "ICE", 4.3),
                Student("Hong", 110315, 19, 13123, "CE", 4.1),
                Student("Yoon", 971005, 23, 11321, "ICE", 4.2),
                Student("Wrong", 100000, 23, 15321, "??", 3.2) ]
    print("students before sorting : ")
    printStudents(students)

    sortStudent(students, "name")
    print("\nstudents after sorting by name : ")
    printStudents(students)

    sortStudent(students, "st_id")
    print("\nstudents after sorting by student_id : ")
    printStudents(students)

    sortStudent(students, "GPA")
    print("\nstudents after sorting by GPA in decreasing order:")
    printStudents(students)

7.2 class Date

## 22211975_homework7
"""
 Project: 22211975_homework7.2
 Author: 
 Date of last update: 22.10.16
 Update list:
    -v1.0: added user-defined module
"""
class Date:
      def __init__(self, yr, mt, dy):
            self.setYear(yr)
            self.setMonth(mt)
            self.setDay(dy)
      def setYear(self, yr):
            self.year = yr
      def setMonth(self, mn):
            if 1 <= mn <= 12:
                  self.month = mn
            else:
                  print("*** Error in date setting ({}, {})".format(self.year, mn))
                  self.month = 1 # default value
      def isLeapYear(self, yr):
            if ((yr % 4 == 0) and (yr % 100 != 0)) or (yr % 400 == 0):
                  return True
            else:
                  return False
      def setDay(self, dy):
            daysOfMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            if self.isLeapYear(self.year):
                  daysOfMonth[2] = 29
            if 1 <= dy <= daysOfMonth[self.month]:
                  self.day = dy
            else:
                  print("*** Error in date setting ({}, {}, {})".format(self.year, self.month, dy))
                  self.day = 1
      def getYear(self):
            return self.year
      def getMonth(self):
            return self.month
      def getDay(self):
            return self.day
      def __lt__(self, other):
            if (self.year < other.year):
                  return True
            elif (self.year == other.year) and (self.month < other.month):
                  return True
            elif (self.year == other.year) and (self.month == other.month) and (self.day < other.day):
                  return True
            else:
                  return False
      def __str__(self):
            return "({:2d}-{:2d}-{:2d})".format(self.getYear(), self.getMonth(), self.getDay())

def printDates(L_dates):
      for d in L_dates:
            print(d)
######################################################
# Application
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
if __name__ == "__main__":
      dates = [Date(2000, 9, 15),
            Date(1997, 2, 20),
            Date(2001, 5, 2),
            Date(2001, 5, 1),
            Date(1999, 3, 1)]
      print("dates before sorting : ")
      for d in dates:
            print(d)
#
      dates.sort()
      print("\nstudents after sorting : ")
      for d in dates:
            print(d)

7.3 class Time

## 22211975_homework7
"""
 Project: 22211975_homework7.3
 Author: 
 Date of last update: 22.10.16
 Update list:
    -v1.0: added user-defined module
"""
class Time:
      def __init__(self, hr, mn, sec):
            self.setHour(hr)
            self.setMinute(mn)
            self.setSecond(sec)

      def setHour(self, hr):
            if 0 <= hr <= 23:
                  self.hour = hr
            else:
                  print("*** Error in setting time (hour: {})".format(hr))
                  self.hour = 0

      def setMinute(self, mn):
            if 0 <= mn <= 59:
                  self.minute = mn
            else:
                  print("*** Error in setting time (minute: {})".format(mn))
                  self.minute = 0

      def setSecond(self, sec):
            if 0 <= sec <= 59:      
                  self.second = sec
            else:
                  print("*** Error in setting time (second: {})".format(sec))
                  self.second = 0

      def getHour(self):
            return self.hour
      def getMinute(self):
            return self.minute
      def getSecond(self):
            return self.second

      def __lt__(self, other):
            if (self.hour < other.hour):
                  return True
            elif (self.hour == other.hour) and (self.minute < other.minute):
                  return True
            elif (self.hour == other.hour) and (self.minute == other.minute) and (self.second < other.second):
                  return True
            else:
                  return False

      def __str__(self):
            return "({:2d}:{:2d}:{:2d})".format(self.getHour(), self.getMinute(), self.getSecond())

def printTimes(L_times):
      for t in L_times:
            print(t)
######################################################
# Application
times = [Time(23, 59, 59),
      Time(9, 0, 5),
      Time(13, 30, 0),
      Time(3, 59, 59),
      Time(0, 0, 0), ]
print("times before sorting : ")
for t in times:
      print(t)

times.sort()

print("\ntimes after sorting : ")
for t in times:
      print(t)

7.4 class Mtrx

## 22211975_homework7
"""
 Project: 22211975_homework8.2
 Author:
 Date of last update: 22.10.31
 Update list:
    -v1.0: added user-defined module
"""
class Mtrx:
    def __init__(self, name, n_row, n_col, L_data):
        self.name = name
        self.n_row = n_row
        self.n_col = n_col

        self.rows = []
        index = 0
        for i in range(0, self.n_row):
            L_row = []
            for j in range(0, self.n_col):
                L_row.append(L_data[index])
                index = index + 1
            self.rows.append(L_row)

    def setName(self, name):
        self.name = name

    def __str__(self):
        s = "{} = \n".format(self.name)
        for i in range(0, self.n_row):
            for j in range(0, self.n_col):
                s += "{:3d}".format(self.rows[i][j], end=" ")
            s += "\n"
        return s

    def __add__(self, other): # operator overloading of '+'
        L_res = []
        for i in range(0, self.n_row):
            for j in range(0, self.n_col):
                r_ij= self.rows[i][j] + other.rows[i][j]
                L_res.append(r_ij)
        return Mtrx("R", self.n_row, self.n_col, L_res)

    def __sub__(self, other): # operator overloading of '-'
        L_res = []
        for i in range(0, self.n_row):
            for j in range(0, self.n_col):
                r_ij= self.rows[i][j] - other.rows[i][j]
                L_res.append(r_ij)
        return Mtrx("R", self.n_row, self.n_col, L_res)

    def __mul__(self, other): # operator overloading of '*'
        L_res = []
        for i in range(0, self.n_row):
            for j in range(0, other.n_col):
                r_ij= 0
                for k in range(0, other.n_row):
                    r_ij = r_ij + self.rows[i][k] * other.rows[k][j]
                L_res.append(r_ij)
        return Mtrx("R", self.n_row, other.n_col, L_res)

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
if __name__ == "__main__":
    LA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    LB = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
    LC = [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
    mA = Mtrx("mA", 3, 5, LA) 
    print(mA)
    mB = Mtrx("mB", 3, 5, LB) 
    print(mB)
    mC = Mtrx("mC", 5, 3, LC) 
    print(mC)
    mD = mA + mB
    mD.setName("mD = mA + mB") 
    print(mD)
    mE = mA - mB
    mE.setName("mE = mA - mB") 
    print(mE)
    mF = mA * mC
    mF.setName("mF = mA * mC") 
    print(mF)