newhaneul

[Advanced Python Programming] 중간고사 암기 본문

4. University Study/Advanced Python Programming

[Advanced Python Programming] 중간고사 암기

뉴하늘 2026. 4. 17. 19:03
728x90

포스팅은 인하대학교 허혜선 교수님의 [202601-EEC3408-001] 고급파이썬프로그래밍을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

  • Lecture 7. Special Methods
    • 파이썬에는 객체에 대하여 +, -, *, /와 같은 연산을 적용하도록 돕는 특수 메소드(special method)가 있다.
      • x + y: __add__(self, y)
      • x - y: __sub__(self, y)
      • x * y: __mul__(self, y)
      • x / y: __truediv__(self, y)
      • x // y: __floordiv__(self, y)
      • x % y: __mod__(self, y)
      • x ** y: __pow__(self, y)
      • x > y: __gt__(self, y)
      • x >= y: __ge__(self, y)
      • x < y: __lt__(self, y)
      • x <= y: __le__(self, y)
      • x == y: __eq__(self, y)
      • x != y: __ne__(self, y)

 

  • Lecture 8. datetime 모듈 문제
    • datetime.datetime.now()
    • datetime.date.today()
    • datetime.datetime(year=, month=, day=)
    • datetime.date(year=,month=,day=)
    • datetime.timedelta(weeks=,days=,hours=,minutes=,seconds=)
    • ~.replace(year=,month=,day=)

import datetime

today = datetime.datetime.now()
print(f"오늘의 날짜: {today.year}년 {today.month}월 {today.day}일")

hour = today.hour

if hour >= 12:
    pmam = "오후"
else:
    pmam = "오전"

if hour == 0:
    hour = 12
elif hour > 12:
    hour -= 12

print(f"현재시간: {pmam} {hour}시 {today.minute}분 {today.second}초")

 

import datetime

y, m, d = map(int, input().split())
today = datetime.datetime(year=y, month=m, day=d)
plus100 = today + datetime.timedelta(days=99)

print(f"100일 기념일은: {plus100.year}년 {plus100.month}월 {plus100.day}일입니다.")
  • datetime.timedelta() 메서드는 days, hours ... s로 끝나는거 항상 주의!

특히 암기 필수

import datetime

today = datetime.date.today()
xMas = datetime.date(today.year, 12, 25)
gap = xMas - today

print(f"오늘 날짜: {today}")
print(f"크리스마스까지 {gap.days}일 남았습니다.")

 

  • Lecture 8. time 모듈 문제
    • time.time()
      • 반환값: 실수

import time

start_time = time.time()
total = 0 
for i in range(1000001):
    if i % 2 == 0:
        total += i
end_time = time.time()


print(f"계산 결과: {total}")
print(f"작업 소요 시간: {end_time - start_time}")

 

  • Lecture 8. random 모듈 문제
    • random.random(): 0 이상 1 미만 사이의 임의의 실수를 반환한다.
      • 반환값: 실수
    • random.randrange(n, m, [step]): n 이상 m 미만의 지정된 범위 내 임의의 정수를 반환하며, 간격을 지정할 수도 있다.
      • 반환값: 정수
    • random.randint(a, b): a 이상 b 이하 사이의 임의의 정수를 반환한다.
      • 반환값: 정수
    • random.choice(list): 인자로 들어온 시퀀스로부터 임의의 요소 하나를 선택하여 반환한다.
      • 반환값: list 요소
    • random.shuffle(list): 인자로 주어진 시퀀스의 요소를 매번 다른 순서로 랜덤하게 섞는다.
      • 반환값: None
    • random.sample(list, a): 시퀀스의 원소들 중에서 임의로 a개를 고른다.
      • 반환값: list

 

  • Lecture 9. 파일 모드
    • "r": 읽기 모드(read mode): 파일의 처음부터 읽는다.
    • "w": 쓰기 모드(write mode): 파일의 처음부터 쓴다. 파일이 없으면 생성된다. 만약 파일이 존재하면 기존의 내용은 지워진다.
    • "a": 추가 모드(append mode): 파일의 끝에 쓴다. 파일이 없으면 생성된다.
    • "r+": 읽기와 쓰기 모드: 파일의 내용을 유지한 채 처음부터 쓴다. 읽고 쓸 수 있는 모드이다. 모드를 변경하려면 seek()가 호출되어야 한다.
    • "b": 바이너리 모드(binary mode): 텍스트가 아닌 이미지, 영상 등의 이진 파일을 읽고 쓸 때 기존 모드에 붙여서 사용한다. (예: rb, wb)

 

  • Lecture 10. try except else finally 구문 출력 결과 이해
    • try 구문은 단독으로 사용할 수 없으며, 반드시 except 구문 또는 finally 구문과 함께 사용해야 한다.
    • else 구문은 반드시 except 구문 뒤에 사용되어야한다.
      • 1. try + except
      • 2. try + except + else
      • 3. try + except + finally
      • 4. try + except + else + finally
      • 5. try + finally

 

  • Lecture 10. Error 종류
    • SyntaxError: 파이썬의 기본 문법을 지키지 않았을 때 발생한다. (예: 괄호의 짝을 맞추지 않거나, if문이나 for문 끝에 콜론(:)을 빼먹었을 때)
    • ValueError: 정수 아닌 값 입력하는 경우
    • IndexError: 리스트의 인덱스를 넘는 숫자를 입력하는 경우
    • ZeroDivisionError: 수학적으로 불가능한, 어떤 숫자를 0으로 나누는 연산을 시도할 때 발생한다.
    • TypeError: 서로 다른 자료형끼리 허용되지 않는 연산을 시도할 때 발생한다. (예: 숫자와 문자열을 덧셈 기호로 더하려고 할 때)
    • KeyError: 딕셔너리(Dictionary) 자료형에서 존재하지 않는 키(Key) 값을 찾으려고 할 때 발생한다.
    • NameError: 선언하거나 정의하지 않은 변수나 함수 이름을 사용할 때 발생한다. 코드에 오타가 났을 때 가장 흔하게 볼 수 있다.
def test():
    print("test() 함수의 첫 줄입니다.")

    try:
        print("try 구문이 실행되었습니다.")
        return
        print("try 구문의 return 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    else:
        print("else 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("test() 함수의 마지막 줄입니다.")

test()

test() 함수의 첫 줄입니다.
try 구문이 실행되었습니다.
finally 구문이 실행되었습니다.
print("프로그램이 시작되었습니다.")

while True:
    try:
        print("try 구문이 실행되었습니다.")
        break
        print("try 구문의 break 키워드 뒤입니다.")
    except:
        print("except 구문이 실행되었습니다.")
    finally:
        print("finally 구문이 실행되었습니다.")
    print("while 반복문의 마지막 줄입니다.")

print("프로그램이 종료되었습니다.")

프로그램이 시작되었습니다.
try 구문이 실행되었습니다.
finally 구문이 실행되었습니다.
프로그램이 종료되었습니다.
def tricky_test():
    print("1. 함수 시작")
    try:
        print("2. try 블록 실행")
        raise ValueError("에러 발생!")
        print("3. 에러 발생 이후")
    except ValueError:
        print("4. except 블록 실행")
        return "except에서 반환"
    else:
        print("5. else 블록 실행")
        return "else에서 반환"
    finally:
        print("6. finally 블록 실행")
        return "finally에서 반환"

result = tricky_test()
print(f"7. 최종 결과: {result}")

1. 함수 시작
2. try 블록 실행
4. except 블록 실행
6. finally 블록 실행
7. 최종 결과: finally에서 반환
def loop_test():
    print("반복문 시작")
    for i in range(3):
        try:
            print(f"try: {i}")
            if i == 1:
                continue
            if i == 2:
                break
        finally:
            print(f"finally: {i}")
    print("반복문 종료")

loop_test()

반복문 시작
try: 0
finally: 0
try: 1
finally: 1
try: 2
finally: 2
반복문 종료

 

  • Lecture 11. Numpy 난수 생성 방법
    • np.array(list): 1차원 ndarray 배열 생성
      • 반환값: ndarray
    • np.append(a, b, axis = ): 축을 기준으로 a ndarray 배열에 b ndarray를 추가
      • 반환값: ndarray
    • np.random.rand(a, b): a x b 난수 행렬 생성
      • 반환값: ndarray
    • np.random.randint(a, b, size=(c, d)): a~b-1까지의 범위를 갖는 정수 c x d 난수 행렬 생성
      • 반환값: ndarray
    • np.zeros((n, m)): 모든 값이 0인 n x m 행렬
      • 반환값: ndarray
    • np.ones((n, m)): 모든 값이 1인 n x m 행렬
      • 반환값: ndarray
    • np.full((n, m), x): 초기 값이 x인 n x m 행렬
      • 반환값: ndarray
    • np.eye(n): n x n 크기의 단위 행렬
      • 반환값: ndarray
    • np.linspace(start, stop, num): start에서 stop 사이의 간격을 균등하게 num으로 나눈다.
      • 반환값: ndarray
    • np.logspace(start, stop, num): start에서 stop 사이의 간격을 로그 스케일로 num개 만큼 나눈다.
      • 반환값: ndarray
    • np.arange(a, b, [step]): a에서 b-1까지의 1차원 행렬 생성
      • 반환값: ndarray
    • np.linalg.solve(a, b): 연립방정식의 해를 계산
      • 반환값: ndarray
    • np.linalg.det(a): a 행렬의 행렬식 계산
      • 반환값: 실수
    • np.where(condition): 조건을 만족하는 요소들의 인덱스를 튜플 형태로 반환
      • 반환값: 튜플 ex: (array([3, 4]),)
arr2d = np.array([[10, 20, 30],
                  [40, 50, 60]])

# 40 이상인 값의 인덱스 찾기
result2d = np.where(arr2d >= 40)

print("결과:", result2d)

결과: (array([1, 1, 1]), array([0, 1, 2]))

첫 번째 배열 array([1, 1, 1])은 행(row)의 인덱스를 나타낸다.
두 번째 배열 array([0, 1, 2])는 열(column)의 인덱스를 나타낸다.

 

  • np.delete(arr, obj, axis = None): 배열에서 특정 위치(인덱스)의 요소를 삭제할 때 사용한다.
    • 반환값: 새롭게 만들어진 배열
  • np.isin(arr, elements): 배열의 각 요소가 특정 값들의 집합에 포함되어 있는지 한번에 확인할 때 사용하는 함수
    • 반환값: True, False로 이루어진 ndarray

 

 

 

  • Lecture 11. 행렬 곱 연산
    • np.matmul(a, b)
    • a @ b
    • np.dot(a, b): a와 b가 2차원 행렬일때부터 동일 (1차원 행렬인 경우에는 내적)
  • Lecture 11. Numpy Indexing, Slicing

import numpy as np

a = np.arange(0, 16).reshape(4, 4)
print(a[:, 1])
print(a[2, 1:])
print(a[:2, :2])
print(a[1:3, 1:3])

[ 1  5  9 13]

[ 9 10 11]

[[0 1]
 [4 5]]
 
[[ 5  6]
 [ 9 10]]
import numpy as np

a = np.arange(0, 16).reshape(4, 4)
print(a[:2, :3].flatten())
print(a[2:, :].flatten())
print(a[[1, 3], 1:].flatten())

[0 1 2 4 5 6]
[ 8  9 10 11 12 13 14 15]
[ 5  6  7 13 14 15]

import numpy as np

print("난수 정수 행렬 생성:")
a = np.random.randint(1, 101, size = (5, 3))
print(a)
b = a[:, 1] >= 60
print(b)
c = np.array(a[b])
print(c)

난수 정수 행렬 생성:
[[23 39 90]
 [49 51 39]
 [44 90  4]
 [60 26 10]
 [ 8 83 28]]
 
[False False  True False  True]

[[44 90  4]
 [ 8 83 28]]

import numpy as np

p1 = np.array([1, 5, 10])
p2 = np.array([2, 4, 6])

d = np.sqrt(np.sum(np.pow(p1 - p2, 2)))
print(d)

4.242640687119285

 

728x90