4일 차 회고.
오늘 토이 프로젝트 참가 여부를 신청받았는데 계속 고민하다가 지금은 공부에 더 집중해야 할 것 같아서 참여하지 않기로 결정했다. 프로젝트를 진행하며 공부할 수 있겠지만, 그래도 시간이 너무 부족할 것 같았다. 너무 선택의 연속이고 이에 따른 후회도 많지만 받아들이고 차근차근 나아가야 할 것 같다..
0. 가상환경 세팅
이제는 수업 시작 전에 자연스럽게 가상환경을 세팅해 준다.
py -3.13 -m venv .venv # 가상환경 생성
.\.venv\Shells\activate # 가상환경 활성화
python -m pip install --upgrade pip # pip 업그레이드
pip install jupyter # jupyter 설치
1. 제어문
1-1. 가위 바위 보
먼저, 내가 짠 코드이다.
import enum
a = input("당신은 A입니다. [ 가위, 바위, 보 ] 중 입력해주세요.")
b = input("당신은 B입니다. [ 가위, 바위, 보 ] 중 입력해주세요.")
print(f"A: {a}")
print(f"B: {b}")
if a == b:
print("무승부입니다.")
elif (a == '가위' and b == '바위') or (a == '바위' and b == '보') or (a == '보' and b == '가위'):
print("A가 이겼습니다.")
elif (a == '가위' and b == '보') or (a == '바위' and b == '가위') or (a == '보' and b == '바위'):
print("B가 이겼습니다.")
else:
print("다시 실행하십시오.")
그리고 다음은 강사님이 주신 코드를 보고 다시 짠 코드이다.
import enum
class RSP_GAME(enum.Enum):
가위 = {
"바위": "패배",
"보": "승리"
}
바위 = {
"가위": "승리",
"보": "패배"
}
보 = {
"가위": "패배",
"보": "승리"
}
A = input("당신은 A입니다. [ 가위, 바위, 보 ] 중 입력하세요.")
A = A.strip()
if A not in RSP_GAME.__members__:
print("잘못 입력하였습니다.")
else:
A = RSP_GAME[A]
print(f"A: {A.name}")
B = input("당신은 B입니다. [ 가위, 바위, 보 ] 중 입력하세요.")
B = B.strip()
if B not in RSP_GAME.__members__:
print("잘못 입력하였습니다.")
else:
B = RSP_GAME[B]
print(f"B: {B.name}")
if A == B:
print("무승부입니다.")
else:
print(f"A가 {A.value[B.name]}하였습니다.")
print(f"B가 {B.value[A.name]}하였습니다.")
위 코드는 지금까지 배운 내용을 기반으로 작성한 코드로, 추후에는 더 좋은 코드로 작성할 수 있을 것이다.
1-2. 반복문(while)
while문은 for문과 마찬가지로 반복적인 작업을 할 때 사용할 수 있다. 코드의 차이는 다음과 같다.
while문은 조건문이 True인 경우에 실행하고, False인 경우에 while문을 종료한다.
while문의 경우, while문 이전에 초기값을 설정해야 하는 경우가 있다.
# for문
lst = [1, 2, 3, 4, 5]
for i in lst
print(i)
# while문
lst = [1, 2, 3, 4, 5]
i = 0
while i < len(lst):
print(lst[i])
i = i + 1
while문 또한 정상적으로 완료되었는지 확인하기 위해 else를 사용할 수 있다.
lst = [1, 2, 3, 4, 5]
lst_len = len(lst)
i = 0
while i < lst_len:
if lst[i] % 2 == 0:
print(f"{lst[i]}는 짝수입니다.")
i = i + 1
else:
print("Hello World")
2. 예외 처리
2-1. Value Error
Value Error는 부적절한 데이터를 가진 인자를 받았을 때 발생하는 에러이다.


2-2. Index Error
Index Error는 인덱스 범위를 벗어나는 경우에 발생하는 에러이다.


2-3. Syntax Error
Syntax Error는 문법 오류가 발생하는 경우에 발생하는 에러이다.

2-4. Name Error
Name Error는 변수명을 찾을 수 없는 경우에 발생하는 에러이다.


2-5. Zero Division Error
Zero Division Error는 0으로 나누려는 경우에 발생하는 에러이다.

2-6. Type Error
Type Error는 잘못된 타입을 사용했을 때 발생하는 에러이다.


2-7. Attribute Error
Attribute Error는 속성을 참조 또는 대입에 실패한 경우에 발생하는 에러이다.

2-8. Key Error
Key Error는 딕셔너리에서 접근하려는 키 값이 없는 경우에 발생하는 에러이다.

2-9. 예외 처리
예외 처리는 다음과 같이 한다.
try:
...
except <Error Type>: # 오류 종류를 선언하지 않으면, Exception
print("Exception Handling")
이때, 오류 종류가 다르면 예외 처리되지 않는다.


except문은 여러 개 작성할 수 있다. 이때, except문은 if문처럼 작동하기 때문에 범위가 좁은 에러부터 작성해야 한다.
else문은 예외가 발생하지 않을 경우 작동한다.

finally문은 맨 마지막에 오류의 발생 여부와 상관없이 작동한다.

2-10. assert
assert는 조건이 False일 때, 오류 메시지를 출력한다.

2-11. raise
raise는 예외를 강제로 발생시킬 때 사용한다. 이때, raise 뒤에는 발생시키고 싶은 예외 이름을 작성한다.


2-12. Exception 생성
아직 class를 배우지는 않았지만, 다음과 같은 방법으로 새로운 예외를 만들어 발생할 수 있다.

3. 가위 바위 보 코드
다음 시간에 다시 수정하기
import enum
class Game(enum.Enum):
가위 = {
'바위': '패배',
'보': '승리'
}
바위 = {
'가위': '승리',
'보': '패배'
}
보 = {
'가위': '패배',
'바위': '승리'
}
while(1):
A = input("A: [ 가위, 바위, 보 ] 중에서 입력하시오.")
A = A.strip()
if A not in Game.__members__:
print("A: 다시 입력하시오.")
else:
A = Game[A]
print(f"A: {A.name}")
break
while(1):
B = input("B: [ 가위, 바위, 보 ] 중에서 입력하시오.")
B = B.strip()
if B not in Game.__members__:
print("B: 다시 입력하시오.")
else:
B = Game[B]
print(f"B: {B.name}")
break
if A.name == B.name:
print("무승부입니다.")
else:
print(f"A가 {A.value[B.name]}했습니다.")
print(f"B가 {B.value[A.name]}했습니다.")'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 6일차. 함수 & 클래스 (0) | 2025.01.14 |
|---|---|
| 5일차. 함수 (0) | 2025.01.13 |
| 3일차. 자료구조 & 제어문 (0) | 2025.01.09 |
| 2일차. 가상환경 구축 & 자료구조 (0) | 2025.01.08 |
| 1일차. 개발 환경 구축 (0) | 2025.01.07 |