과제

컴사파 - 6주차

とおき 2022. 10. 4. 17:12

패키지

# MyList.py
"""
 Project: MyList.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added genRandList, printListSample, shufflelist
"""
import random

def genRandList(L, n):
    for i in range(n+1):
        Rand = random.randint(0, n)
        while Rand in L: 
            Rand = random.randint(0, n)
        else: 
            L.append(Rand)
    return L

def printListSample(L, n, per_line, sample_lines):
    last_list = n % 20 
    cnt = 0
    for i in range(per_line * sample_lines):
        if cnt == per_line * sample_lines:
            break
        else:
            cnt += 1
            print("{:7}".format(L[i]), end = ' ')
            if cnt % per_line == 0:
                print('')
    print('\n ---------------------------------------------------------------------------------- ')
    cnt = 0
    if n % 20 == 0:
        for i in range(n-(per_line * sample_lines), n):
            if cnt == per_line * sample_lines:
                break
            else:
                cnt += 1
                print("{:7}".format(L[i]), end = ' ')
                if cnt % per_line == 0:
                    print('')
    else:
        for i in range(n-last_list, n):
            if cnt == per_line * sample_lines:
                break
            else:
                cnt += 1
                print("{:7}".format(L[i]), end = ' ')
                if cnt % per_line == 0:
                    print('')

def shuffleList(L):
    random.shuffle(L)
    return L
#MySortings.py
"""
 Project: MySortings.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added selectionSort, mergeSort
"""
def selectionSort(L):
    for i in range(len(L) - 1):
        index = i
        for j in range(i + 1, len(L)):
            if L[j] < L[index]:
                index = j
        L[i], L[index] = L[index], L[i]
    
def mergeSort(L):
    if len(L) > 1:
        middle = len(L) // 2
        L_left = L[:middle]
        L_right = L[middle:]

        mergeSort(L_left)
        mergeSort(L_right)

        i = 0 
        j = 0 
        k = 0

        while i < len(L_left) and j < len(L_right):
            if L_left[i] <= L_right[j]:
              L[k] = L_left[i]
              i += 1 
            else:
                L[k] = L_right[j]
                j += 1
            k += 1
        while i < len(L_left):
            L[k] = L_left[i]
            i += 1
            k += 1
        while j < len(L_right):
            L[k] = L_right[j]
            j += 1
            k += 1
            
    return L
#MyMatrix
"""
 Project: MyMatrix.py Package
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added several Matrix algorithm
"""
def printMtrx(name, M):
    print(f"{name} = ")
    for y in range(len(M)):
        print("{}".format(M[y]))
        
def sumMtrx(M1, M2):
    sum_Mtrx = []
    for i in range(len(M1)):
        temp=[]
        for j in range(len(M1[i])):
            temp.append(M1[i][j]+M2[i][j])
        sum_Mtrx.append(temp)
    return sum_Mtrx

def subMtrx(M1, M2):
    sub_Mtrx = []
    for i in range(len(M1)):
        temp=[]
        for j in range(len(M1[i])):
            temp.append(M1[i][j]-M2[i][j])
        sub_Mtrx.append(temp) 
    return sub_Mtrx

def mulMtrx(M1, M2):
    mul_Mtrx = [[] for i in range(len(M1))]
    for i in range(len(M1)):
        temp = [0] * len(M2[0])
        for j in range(len(M1[0])):
            for k in range(len(M2[0])):
                temp[k] += M1[i][j] * M2[j][k] 
        mul_Mtrx[i] = temp
    return mul_Mtrx

6.1 사용자 정의 패키지/서브패키지 - selectionSort()

 사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/”를 생성하고, 중복되지 않는 정수형 난수의 리 스트 생성, 샘플 출력 및 뒤섞기 기능을 제공하는 genRandList(L, size), printListSample(L, size, per_line, sample_lines) 및 shuffleList(L, size)를 포함하는 사용자 정의 모듈 “MyList.py”을 준비하라.

 사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/” 에 선택 정렬 알고리즘을 구현한 selectionSort(L)을 포함하는 사용자 정의 “MySortings.py”을 구현하라. 앞에서 구현한 사용자 정의 모듈 “MyList.py”을 함께 사용하는 다음 응용 프로그램을 사용하여 정확한 동작을 확인하라.


## 22211975_homework6
"""
 Project: 22211975_homework6.1
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import sys
myPyModules_dir = "C:\MyPyPackage\myPyModules"
sys.path.append(myPyModules_dir)

# user-defined package / module
import MyList as ML
import MySortings as MS

L = []
n = 500

ML.genRandList(L, n)
print("정렬 전: ")
ML.printListSample(L, n, 10, 3)

MS.selectionSort(L)

print("\n정렬 후:")
ML.printListSample(L, n, 10, 3)

6.2 사용자 정의 패키지/서브패키지 - MySortings, mergeSort()

 앞에서 준비하였던 사용자 정의 모듈 “MySortings.py”에 병합정렬 (mergeSort) 기능을 수행하는 함수/메소드 mergeSort(L)를 추가 하라. 다음 응용 프로그램을 사용하여 50000개의 중복되지 않는 정수형 난수에 대한 선택정렬과 병합정렬을 각각 실행시키고, 실 행에 걸린 경과시간을 측정하여 비교하라.

## 22211975_homework6
"""
 Project: 22211975_homework6.2
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import time, sys
sys.path.append("C:/MyPyPackage/myPyModules")
import MyList as ML
import MySortings as MS

while True:
    size = int(input("\n리스트의 크기를 입력하세요 (0 입력시 종료): "))
    L = []
    ML.genRandList(L, size)
    print(f"(사이즈 : {size}) 병합 정렬 전 : ")
    ML.printListSample(L, size, 10, 2)
    t1 = time.time() # start time
    MS.mergeSort(L) # L 을 병합정렬 한다.
    t2 = time.time() # end time
    print(f"\n(사이즈 : {size}) 병합 정렬 후 : ")
    ML.printListSample(L, size, 10, 2)
    print(f"{size}개의 난수를 병합 정렬 하는데 {t2-t1} 초가 걸렸습니다.")
    ML.shuffleList(L)
    print(f"\(사이즈 : {size}) 선택 정렬 전 : ")
    ML.printListSample(L, size, 10, 2)
    t1 = time.time() # start time
    MS.selectionSort(L) # L 을 선택정렬 한다.
    t2 = time.time() # end time
    print(f"\n(사이즈 : {size}) 선택 정렬 후 : ")
    ML.printListSample(L, size, 10, 2)
    print(f"{size}개의 난수를 선택 정렬 하는데 {t2-t1} 초가 걸렸습니다.")

6.3 사용자 정의 패키지/서브패키지 - MyMatrix

 사용자 정의 모듈 “MyMatrix.py” 을 준비하고, 행렬의 덧셈, 뺄셈, 곱셈 연산을 수행하는 함수/메소드 printMtrx(name, M), addMtrx(A, B), subMtrx(A, B), mulMtrx(A, B)를 포함시켜라. 이 사용자 정의 모듈을 사용자 정의 패키지 “MyPyPackage.myPyModules ”에 포함시킬 것. 다음 응용 프로그램을 사용하여 정확한 동작을 확인할 것.


## 22211975_homework6
"""
 Project: 22211975_homework6.3
 Author:
 Date of last update: 22.10.04
 Update list:
    -v1.0: added user-defined module
"""
import sys 
sys.path.append("C:/MyPyPackage/myPyModules") 
import MyMatrix as MM

A = [[1,2,3,4], [5,6,7,8], [9,10,0,1]]
B = [[1,0,0,0], [0,1,0,0], [0,0,1,1]]
C = [[1,0,0], [0,1,0], [0,0,1], [0,0,0]]

MM.printMtrx("A", A) 
MM.printMtrx("B", B) 
MM.printMtrx("C", C)

D = MM.addMtrx(A, B) 
MM.printMtrx("A + B", D)

E = MM.subMtrx(A, B) 
MM.printMtrx("A - B", E)

F = MM.mulMtrx(A, C) 
MM.printMtrx("A * C", F)