카테고리 없음

aio 3기 오프라인강의 회고1

doomrender 2026. 9. 16. 17:43

대부분 프리코스로 사전 온라인 강의로 배운 내용들을 오프라인 수업으로 다시 보게 되었다.

휘발되었던 정보도 있었다.

아는 내용 부분에서는 수업 분위기, 새로운 환경에 적응하는 시간을 가졌다.

 

1일차에서는 소크라테스식 복기 방법이 매우 인상적이었다.

llm에게 복기 프롬프트를 주어서 당일 학습한 내용을 효과적으로 복기하는 방법이었다.

이를 통해 확실히 각인한 내용은 다음과 같다;

 

1.

[]은 자료형 안의 특정 항목에 접근할 때 쓴다는 것이다.

()은 함수를 실행할 때 쓴다는 것은 이미 알고 있었는데 []로 확장할 생각을 못했다.

그래서 dict 유형에서 키워드로 그와 관련된 값을 출력하기 위해선 print(parameter("키워드"))는 안되고 print(parameter["키워드"])가 된다는 것이다.

 

2. len 함수는 항목 개수를 구하는 함수이다

그러므로 항목이 있는 자료형이면 다 사용할 수 있다는 것이다.

list와 tuple에 사용 안될 거 같은데 된다는 것이다. 항목 개수가 있으니까.

 

#또한 수업 중 궁금해서 따로 찾아본 내용에 관한 것이다

1.프롬프트 작성에 관해서 역할 설정이 중요하다는 내용이 있었는데 왜인지 이해가 안갔다.

그러나 찾아보니 역할에 특정 변수 통제가 함축되어있기 때문이었다.

그러나 변수 통제는 역할에 의한 것보다 직접 적는 것이 더 효과적이라고 한다.

 

 

 

2일차에는 내가 복습하고 싶은 내용을 메모장에 기록하기로 했다.

1.원소가 하나인 튜플은 ("검색",)처럼 값 뒤에 쉼표를 붙인다. ("검색")은 괄호로 감싼 문자열일 뿐 튜플이 아니다.
example = ("검색") 이면
print(type(example).__name__) 해서 타입 보면 str이고
example = ("검색",)로 대입해서 타입 보면 tuple이다.

2.# dict는 키와 값을 함께 저장한다.
run = {
    "agent": "검색 에이전트",
    "status": "success",
    "seconds": 1.4,
}

# 새 키에 값을 대입하면 항목이 추가된다.
run["reviewed"] = True
이러면 키값 reviewed 고, 값이 True 인 원소를 추가한거

3.# 같은 dict 키에 새 값을 대입하면 기존 값이 덮어써진다.
run = {"agent": "검색", "status": "queued"}
run["status"] = "retrying"
print("1) 갱신한 상태:", run["status"])

4.# 바깥쪽 키부터 안쪽 키 순서로 접근한다.
print("1) 실행한 에이전트:", run["agent"])
print("2) 실행 상태:", run["result"]["status"])

# sources는 list이므로 마지막에는 숫자 인덱스를 사용한다.
print("3) 첫 번째 출처:", run["result"]["sources"][0])

5.is_member = input("회원인가요? (y/n): ") == "y"
order_amount = int(input("주문 금액을 입력하세요: "))

can_get_free_shipping = is_member and order_amount >= 30000
can_use_coupon = is_member or order_amount >= 50000
needs_shipping_fee = not can_get_free_shipping

print("1) 무료 배송 가능 여부:", can_get_free_shipping)
print("2) 쿠폰 사용 가능 여부:", can_use_coupon)
print("3) 배송비 필요 여부:", needs_shipping_fee)

--결과값--
회원인가요? (y/n): y
주문 금액을 입력하세요: 40000
1) 무료 배송 가능 여부: True
2) 쿠폰 사용 가능 여부: True
3) 배송비 필요 여부: False
(01_python_basic) PS C:\workspace\01_python_basic> 

6. 나는 and, or 등의 논리 연산자 앞 뒤에 조건식이 무조건 와야한다고 생각했는데, 상수든 문자열이든 어떤 값이 와도 됐다.

주어진 조건:
is_member = input("도서관 회원인가요? (y/n): ") == "y"
overdue_count = int(input("연체한 책 수를 입력하세요: "))에서

내가 정리한 식:
# TODO: 연체한 책이 한 권 이상인지 has_overdue에 저장한다.
has_overdue=overdue_count >= 1
# TODO: 회원이고 연체한 책이 없을 때만 can_borrow를 True로 만든다.
can_borrow = is_member=="y" and has_overdue<1

다음과 같이 정리할 수 있었다
# TODO: 연체한 책이 한 권 이상인지 has_overdue에 저장한다.
has_overdue= overdue_count >= 1
# TODO: 회원이고 연체한 책이 없을 때만 can_borrow를 True로 만든다.
can_borrow = is_member and not has_overdue

즉, is_member 는 이미 True나 False 값이 나온 상수이고,
can_borrow는 그냥 1인지 0인지만 결정되면 되는거라 굳이 뒤에 조건식이 나올필요 없음.
0 and 1 은 0값을 갖고
1 and 1 은 1값을 갖지
and 라는게 있어서 굳이 and 앞뒤로 조건식이 올 필요가 없다.

7. if가 True일때 수행할 식은 if 조건식 밑에 들여쓰기로 적어야한다.
즉 들여쓰기된 모든 부분이 if블록이 된다.

또한 if문과 for문은 :을 써야한다
예)
for task in tasks:
    print(task)


8.내 의문점:is_member = input("도서관 회원인가요? (y/n): ") == "y"
여기서 우항 input("도서관 회원인가요? (y/n): ") == "y"의 의미를 알려주세요.
예를 들면 제 생각에는 우항은 [input("도서관 회원인가요? (y/n): ") 와 "y"가 같다]만을 뜻하는거 같은데 왜 이게 0과 1 둘 중 하나인 bool 값을 갖는지 이해가 안갑니다

답변:
여기서 중요한 점: ==는 "같은지 판단해서 그 판단 결과를 돌려주는" 연산자입니다. 사람이 "이 둘이 같나요?"라고 물으면 "네" 또는 "아니오"로 답하듯이, Python도 ==를 계산하면 반드시 True 또는 False 중 하나를 값으로 반환합니다.
+가 두 숫자를 받아서 합을 만들어내듯이, ==는 두 값을 받아서 bool을 만들어냅니다.

9. enumerate 함수의 이해와 언패킹:

for index, task in enumerate(tasks, start=1):
    print(f"{index}) 할 일: {task}")
이 값의 결과물이 다음과 같나여?
1) 할 일: 책 읽기
2) 할 일: 과제 하기
3) 할 일: 산책하기

답변:
enumerate(tasks, start=1)는 tasks 리스트를 돌면서, 각 항목마다 (순서번호, 항목값) 쌍을 하나씩 만들어줍니다.
예를 들어 tasks = ["책 읽기", "과제 하기", "산책하기"]라면:
enumerate(tasks, start=1)은 내부적으로 이런 쌍들을 순서대로 생성합니다:
(1, "책 읽기")
(2, "과제 하기")
(3, "산책하기")

그리고 for index, task in ...는 이 쌍 (1, "책 읽기")를 받아서 첫 번째 값은 index에, 두 번째 값은 task에 자동으로 나눠 담습니다 (이걸 "언패킹"이라고 부릅니다).
index, task = (1, "책 읽기")


10. 다음과 같은 형식으로 특정 수에 대한 9단을 만들어야했다;
dan = int(input("몇 단을 출력할까요? "))
# TODO: range()로 1부터 9까지 반복한다.
# TODO: 각 단계에서 "3 x 1 = 3" 형식으로 곱셈 결과를 출력한다.

이걸 못하고 있었는데 이걸 해내는 식은 다음과 같았다;

 

 

11. elif 식은 첫 조건이 참이면 뒤 조건은 보지 않고 건너뛰지만, if 식이 여러개 있으면, 모든 if식을 다 둘러본다.
단, 오류가 안나려면 여러개의 if식들이 상호배타적이어야 한다.(=겹치는 부분이 없어야 한다)

12. 반복문에서 분기에 관련된 명령어: 분기문 
break: 반복문을 종료한다
continue: 반복문의 시작 지점으로 다시 돌아간다.

13. for문의 변수와 range 관계에 대한 이해:
for문의 변수에는 range의 값이 대입된다

예)
for num in range(0, 3):
    print(num)
이면
range가 내놓는 값이 num이라는 변수에 대입된다.

그리고 for문의 루프는 다음과 같이 진행됨;
1.range(0, 3)이 "0부터 시작해서 3 직전까지" 값을 하나씩 준다.
2.첫 번째로 0을 내놓으면, num이라는 변수에 그 값(0)이 **할당(대입)**된다.
3.루프 몸통(print(num))이 실행된다 → 0이 출력됨.
4.루프가 한 바퀴 끝났으니 다시 처음으로 가서, range가 다음 값인 1을 내놓는다.
5. ...

즉, range 값이 하나 나오고 그걸로 한 블록에 대한 실행이 다 되었다면,
다음 range 값으로 한 블록에 대한 실행이 다시 진행됨 

14.for문에 따라 while문이나 match문을 계속 실행하려면, while문이나 match문을 for문의 하위에 둬야한다(=for문 아래에 들여쓰기 해서 작성한다)

statuses = ["success", "timeout", "pending", "unknown", "failed"]

for index, status in enumerate(statuses, start=1):
    message = "미분류"
    match status:
        case "success":
            message = "완료"
        case "failed"|"timeout":
            message = "확인필요"
        case _:
            message = "알 수 없는 상태"
    print(f"{index}) {status}: {message}")

즉 for가 한 번 반복될 때마다,
14-1.message = "미분류"
14-2.현재 status를 가지고 match 검사
14-3.알맞은 case에 따라 message 변경
14-4.print() 실행
이 과정 전체가 반복됩니다.


15.함수 정의
def 함수명(매개변수): 
    함수 호출 시 수행할 동작
    ...
    ...


함수헤더의 ()안에 들어가는 것은 매개변수라 하고, 호출에서 ()에 들어가는 
것은 인자라 한다.(def가 포함된 첫 줄을 함수 헤더라 함)
함수명() 은 호출한다는 의미함

함수 정의문에서 매개변수가 없으면 함수 호출할때 함수() 만 해도 함수가 실행됨
그러나 매개변수가 있으면 인자가 필요함



17. 함수 정의문에서 매개변수 뒤에 '='을  붙여 기본값을 설정가능.

def make_order_line(item: str, quantity: int = 1) -> str:
    line = f"{item} {quantity}개"
    return line

정의문 헤더에서 quantity = 1 을 하여 quantity 매개변수의 기본값을 1로 설정한거임.


print("기본 수량:", make_order_line("연필"))
하면 quantity 매개변수 인자로 기본값인 1이 들어가는 거임.
즉, make_order_line("연필", 1) 을 호출한거랑 같은거임

print(" 수량 지정:", make_order_line("공책", quantity=3))



18. return은 함수를 호출한 위치로 보내고, print()는 화면에 보낸다.

19.
'.py' 파일은
파이썬 코드를 작성하는 파일이면서, 직접 실행할 수도 있고, 다른 파일에서 import되어 모듈로 사용될 수도 있다

그래서 보통 모듈 파일에서는 다음 코드를 많이 씁니다;
if __name__ == "__main__":
    print("이 파일을 직접 실행했을 때만 실행됩니다.")
이로써 해당 파일에서 실행시 출력이 되지만, 다른 파일에서 실행시 출력이 안된다.
해당 파일에서는 name이 main이지만, 다른 파일에서는 name이 main이 아니기 때문이다.