251223 - KNOU Python (재수강)

LIHA·2025년 12월 23일

KNOU

목록 보기
3/3
post-thumbnail

A받은 과목을 왜 굳이 재수강을 했냐면

부트캠프 버프로 잠깐 학점만 잘 받고 아무것도 기억나지 않아 파이썬을 좀 제대로 공부해보고자 A학점인 것을 굳이굳이 재수강을 신청했다.

물론 이상적 결과물은 A+이지만, 학점세탁이 아니더라도 정처기에 나오기도 하고 무엇보다 내가 할줄 아느냐 모르느냐가 더 중요하다고 생각했기 때문.

정보처리기사가 내게 개똥을 주었어

사실 정처기는 잘못이 없다. 공부를 안한 스스로의 탓(...)


7강 - 반복 구조

리스트의 개념을 간단히 정리하고 가자

순서화된 값의 집합체를 저장할 수 있는 데이터 타입

  • 단일 식별자로 연속된 저장공간 접근 수단 제공
  • 개별 원소의 값을 수정, 추가, 삭제 가능
  • 원소의 나열을 저장할 수 있는 시퀀스 타입 중 하나
    • 리스트, 세트, 튜플, 딕셔너리 등...

Q. 시퀀스 타입이 뭔가요?
A. 데이터 타입 중 하나.
계수 제어 반복 구조(for문) 에서 특정 반복 횟수와 반복 시 계수의 값을 정하기 위해 사용되는 타입.

파이썬의 리스트는 대괄호만으로 선언 가능

좀더 포멀하게는 list([원소 시퀀스]) 로 쓸 수 있지만, 그냥 [원소 시퀀스] 라고만 써도 된다. 이 리스트는 다른 정적언어의 배열처럼 인덱스 번호로 직접 접근할 수 있다.

rad = 30 // 원뿔의 밑넓이
height_list = [15, 7, 23, 9, 31]

위와 같이 주어져있다고 하면, for문을 통해 height_list의 인덱스 번호를 찍어 돌면서 원뿔의 부피를 구할 수 있을 것.

파이썬은 이렇게 리스트 쓰기가 간단해서, 다른 언어 배열 쓰듯이 리스트 써서 for문 도는 경우가 많다.

계수 제어 반복은 어려운게 아니다 - for문 얘기

for문을 그럴듯하게 표현하면 계수 제어 반복이다. 숫자(계수)에 따라 반복문이 제어되므로 이렇게 부른다.

for 계수-제어-변수 in 시퀀스:
(공백) 코드블록

위와 같은 구조로 이루어진다. 강의 예시는 다음과 같다.

hei_list = [1, 4, 14, 26, 31]

for hei in hei_list:
	print(hei)
    // 이렇게 쓰면 알아서 hei_list 끝까지 돌아준다

파이썬의 in range(처음, 끝) 는 처음 '이상' 끝 '미만'이다

그래서 1~10을 하고 싶으면 in range(1, 11) 을 쓰면 된다. 아래와 같이 작성한다.

[기본형]
range(시작값(이상), 끝값(미만), 증분)

[예시]
for i in range(1, 11):
print(i)

이렇게만 써도 i가 1씩 증가하면서 출력된다. 증분을 3으로 쓰면 +3 한 숫자가 끝값 미만 중 최대수까지 출력된다.

참고 블로그에 따르면 숫자 하나만 적으면 그 수가 종료지점이 된다고.

9강- 함수

파이썬은 동시할당과 교환이 가능하다

season, temp = "winter", -5

이렇게 쓰면 season과 temp에 각각 값이 들어간다.

동시할당을 좀더 자세히 보면 이렇게 생겼다.

def rtn_con_vol_surf(r,h):
    if r > 0 and h > 0:
        vol = 1/3 * 3.14 * r ** 2 * h
        surf=3.14 * r ** 2 + 3.14 * r * h
        return vol, surf
    else:
        print("반지름과 높이 값을 올바르게 입력해주세요")

vol1, surf1 = rtn_con_vol_surf(50, 100)
print(vol1, "입니다")
print(surf1, "입니다")

vol1, surf1 = ~ 저렇게 써놓으면 vol1에 부피값이, surf1에 겉넓이 값이 알아서 계산해서 들어가진다. (함수 자체가 return을 vol, surf로 다중반환 하기때문)

uni = 15
add = 693

uni, add = add, uni

이런 식으로 그냥 자리를 바꿔치는 교환도 가능하다.

함수 내에서 동시할당으로 자리가 바뀌어도 원래 입력값 순서는 바뀌지 않는다

a = int(input("첫 번째 숫자 입력: "))
b = int(input("두 번째 숫자 입력: "))
c = int(input("세 번째 숫자 입력: "))

def sort3(a, b, c):
    if a > b:
        a, b = b, a
    if a > c:
        a, c = c, a
    if b > c:
        b, c = c, b
    print(a, b, c)

sort3(a, b, c)
print("함수 수행 이후의 a, b, c 값은: ", a, b, c)

이렇게 나온다.

값에 의한 전달 - 함수 내에서 값을 새로 정의해도 밖으로 전달되지 않는다

def rtn_con_vol_surf(r,h):
    if r > 0 and h > 0:
        vol = 1/3 * 3.14 * r ** 2 * h
        surf=3.14 * r ** 2 + 3.14 * r * h
        r, h = 0, 0
        return vol, surf
    else:
        print("반지름과 높이 값을 올바르게 입력해주세요")

r= 10
h = 15
print(rtn_con_vol_surf(r,h), "입니다")
print(r, h)

위 코드에서 맨 밑 print문은 10, 15가 찍힌다. 함수 내에서 r, h = 0, 0 한 것은 전혀 영향을 미치지 않는다.

10강 - 객체지향

데이터 필드라는 것을 나타내기 위해 self.을 찍어야 할 때가 있다

class Cone:
    def __init__(self, r = 20, h = 30):
        self.r = r
        self.h = h

    def get_vol(self):
        vol = 1/3 * 3.14 * r ** 2 * h
        return vol

이때 get_vol의 vol 공식에서 그냥 r과 h를 쓰면 받는 매개변수도 없는데 계산을 할 수가 없다.

javascript의 백틱처럼 변수를 표현할 수 있는 방법이 있다 - f스트링

파이썬의 f string은 쌍따옴표 앞에 f만 써주면 변수를 중괄호로 가져와 그냥 쓸 수 있다.

name = "James"
age = 35

f"{name}{age}세. 안녕하세요"

이런 식으로.


그리고 결과

재수강 실패! A0 유지!

profile
갑자기 왜 춤춰?

0개의 댓글