3일 차 회고
아직 3일 차라서 그런지 마음이 붕 뜬 느낌이다. 내가 이쪽 분야에 발을 들이게 된 것도 엄청난 꿈이 있는 것도 아니고 단순한 흥미 때문인데 내가 주체적으로 강의에 집중할 수 있을지를 모르겠다. 그래도 열심히 해서 굳이 AI가 아니더라도 데이터 직무 쪽으로 취직을 하고 싶다는 생각이 있어서 일단은 열심히 듣고 강의를 듣다가 또 흥미가 생기게 된다면 그쪽을 더 깊게 파봐도 괜찮을 것 같다. 일단 지금은 데이터 분석 쪽에 관심이 있어서 수업이 모두 끝나고 강사님께 여쭤봤더니 토이 프로젝트를 하나 해보는 것도 괜찮을 것 같다고 하셔서 고민을 좀 해봐야 할 것 같다.
1. 자료구조
1-0. 가상환경 세팅
py -3.13 -m venv .venv # 가상환경 생성
.\.venv\Scripts\activate # 가상환경 활성화
python -m pip install --upgrade pip # pip 업그레이드
pip jupyter # jupyter 설치
1-1. 사칙연산
a = 3
b = 10
# 덧셈
print(a + b) # 13
# 뺄셈
print(a - b) # -7
# 곱셈
print(a * b) # 30
# 나눗셈
print(a / b) # 0.3
# 제곱
print(a ** b) # 59049
a = 7
a = 3
# 몫
print(a // b) # 2
# 나머지
print(a % b) # 1
1-2. 문자열
문자열은 " " 또는 ' '을 사용하여 코드를 작성한다.
문자열 안에 " 또는 '을 써야 하는 경우, \(escape character)을 사용하여 코드를 작성한다.

문자열의 길이를 출력하는 len() 함수는 size가 존재하는 데이터 타입에만 사용할 수 있다.

숫자는 문자열로 표현이 가능하지만, 문자열은 숫자로 표현이 불가능하다.
숫자는 str() 함수를 통해 문자열로 변환할 수 있다.
하지만, 문자열은 숫자로 이루어졌을 경우, int() 또는 float() 함수를 통해 숫자로 변환할 수 있다.
이때, 정수 문자열은 int() 함수로만, 실수 문자열은 float() 함수로만 숫자로 변환할 수 있다.

1-3. 인덱싱
인덱싱은 size의 값이 존재하는 데이터 타입인 경우에만 사용이 가능하다.
# H(0), e(1), l(2), l(3), o(4)
# H(-5), e(-4), l(-3), l(-2), o(-1)
a = "Hello"
a[0], a[-5] # 둘 모두 'H'를 출력한다.
1-4. 슬라이싱
슬라이싱 또한 size의 값이 존재하는 데이터 타입인 경우에만 사용이 가능하다.
# H(0), e(1), l(2), l(3), o(4)
# H(-5), e(-4), l(-3), l(-2), o(-1)
a = "Hello"
a[1:], a[1::1] # 둘 모두 'ello'를 출력한다.
a[1::2] # 'el'을 출력한다.
a[-1::-1] # 'olleH'를 출력한다.
a[-1::-2] # 'olH'를 출력한다.
1-5. f-string & .format()
"나는 수박을 먹었습니다."
"나는 밥을 먹었습니다."
"나는 커피를 먹었습니다."
food = "수박을"
print(f"나는 {food} 먹었습니다.")
food = "밥을"
print("나는 {food} 먹었습니다.".format(food=food))
food1 = "밥을"
print("나는 {food2} 먹었습니다.".format(food2=food1))
food3 = "커피"
food4 = ", 빵"
food5 = ", 과자를"
print("나는 {0}{1}{2} 먹었습니다.".format(food3, food4, food5))
1-6. 기타 문자열 포매팅
%d: 숫자를 표현
print("I eat %d apples." % 3)
# I eat 3 apples.
%s: 문자열을 표현
print("I eat %s apples." % "five")
# I eat five apples.
num = 10
day = "three"
print("I ate %d apples, so I was sick for %s days." % (num, day))
# I ate 10 apples, so I was sick for three days.
pi = 3.141592
print("파이는 %0.2f" % pi)
# 파이는 3.14
1-7. 문자열 관련 함수
a = "Hello World"
# count(): 문자열 내 특정 문자의 개수를 반환
a.count("l") # 3
a.count("a") # 0
a.count(" ") # 1
# find(): 문자열 내 특정 문자의 위치를 반환
a.find("H") # 0
a.find("a") # 해당 문자열이 없을 경우, -1 반환
# split(): 문자열을 특정 문자 기준으로 나누어 리스트로 반환
a.split(" ") # ['Hello', 'World']
a.split("o") # ['Hell', ' W', 'rld']
# upper(): 대문자로 변환
a.upper() # 'HELLO WORLD'
# lower(): 소문자로 변환
a.lower() # 'hello world'
# strip(): 문자열 앞뒤 공백 제거
" Hello World ".strip() # 'Hello World'
# lstrip(): 문자열 왼쪽 공백 제거
" Hello World ".lstrip() # 'Hello World '
# rstrip(): 문자열 오른쪽 공백 제거
" Hello World ".rstrip() # ' Hello World'
# replace(): 문자열 내 특정 문자열을 변경
a.replace(" ", "Goodjob") # 'Hello World'
a.replace("World", "Goodjob") # 'Hello Goodjob'
1-8. 문자열 연산
문자열끼리는 덧셈을 통해 연결할 수 있다.
a = "Hello"
b = "World"
print(a + b) # HelloWorld
문자열과 숫자 연산은 곱셈을 통해 반복할 수 있다.
a = "Hello"
print(a * 3) # HelloHelloHello
1-9. 리스트(List)
리스트의 선언은 다음과 같이 할 수 있다.
a = []
b = list()
리스트는 size를 갖는 데이터 타입이기 때문에 인덱싱, 슬라이싱을 할 수 있다.
x = [1, 2, 3, 4, 5] # list 선언
print(x[0]) # 1
print(x[1:3:]) # [2, 3]
print(x[-1::-2) # [5, 3, 1]
리스트에는 다양한 형식의 데이터가 올 수 있다.
a = [] # 리스트가 선언되었지만, 데이터는 없다.
b = [1, -2, 3.14]
c = ['a', 'b']
d = [1, 2, 'a', 'b']
e = [1, 'a', [1, 2, 3]]
리스트 안에 리스트가 있는 경우, 데이터는 다음과 같은 방법으로 출력할 수 있다.
print(e[2][2]) # 3
리스트는 수정이 가능(mutable)하기 때문에, 요소를 추가하거나 삭제 또는 변경할 수 있다.
# 요소의 변경
e[1] = 'b'
print(e) # [1, 'b', [1, 2, 3]]
d[2::] = [3, 4]
print(d) # [1, 2, 3, 4]
e[2][2] = 9
print(e) # [1, 'b', [1, 2, 9]]
# 요소의 추가
# append()
a = [1, 2, 3, 4]
a.append(5)
print(a) # [1, 2, 3, 4, 5]
# extend()
a = [1, 2, 3, 4]
a.extend([5])
print(d) # [1, 2, 3, 4, 5]
또한, 요소의 순서도 변경할 수 있다.
b = [1, 3, 2, 4, 5]
b.sort()
print(d) # [1, 2, 3, 4, 5]
b.reverse()
print(d) # [5, 4, 3, 2, 1]
리스트의 요소에 대해 조회를 하거나 개수를 구할 수 있다.
c = ['a', 'b', 'c', 'd']
c.index("b") # 1
c.count("a") # 1
문자열을 리스트로 변경할 수 있다.
list("10") # ['1', '0']
리스트의 길이는 len() 함수를 통해 구할 수 있다.
len(c) # 4
1-10. 튜플(Tuple)
튜플의 선언은 다음과 같이 할 수 있다.
a = ()
b = tuple()
튜플은 size를 갖는 데이터 타입이기 때문에 인덱싱, 슬라이싱을 할 수 있다.
x = (1, 2, 3, 4, 5) # tuple 선언
print(x[0]) # 1
print(x[1:3:]) # (2, 3)
print(x[-1::-2]) # (5, 3, 1)
튜플에는 다양한 형식의 데이터가 올 수 있다.
a = () # 튜플이 선언되었지만, 데이터는 없다.
b = (1,)
c = (1, 2)
d = (1, 'a', 2)
e = (1, 'a', (1, 2, 3))
튜플 안에 리스트가 있는 경우, 데이터는 다음과 같은 방법으로 출력할 수 있다.
print(e[2][2]) # 3
튜플은 수정이 불가능(immutable)하기 때문에, 요소를 추가하거나 삭제 또는 변경할 수 없다.
또한, 튜플의 요소에 대해 조회를 하거나 개수를 구할 수 있다.
a = ('a', 'b', 'c', 'd')
a.index("b") # 1
a.count("a") # 1
문자열을 튜플로 변경할 수 있다.
tuple("10") # ('1', '0')
튜플의 길이는 len() 함수를 통해 구할 수 있다.
len(a) # 4
1-11. 딕셔너리(Dictionary)
딕셔너리의 선언은 다음과 같이 할 수 있다.
a = {}
b = dict()
딕셔너리는 key와 value로 이루어져 있다.
dic = {
"key":"value"
}
딕셔너리는 다양한 형식의 데이터가 올 수 있으며, 다음과 같은 방법으로 데이터를 조회할 수 있다.
또한, size를 갖는 데이터 타입이기 때문에 인덱싱, 슬라이싱을 할 수 있다.
dic = {
"name": "홍길동",
"age": 20,
"phone": "010-1234-5678"
"list": [1, 2, 3],
"tuple": (1, 2, 3, 4),
"dict": {
"a": 1,
"b": 2
}
} # dict 선언
print(dic["list"]) # [1, 2, 3]
print(dic["phone"][-4::]) # '5678'
print(dic["dict"]["a"]) # 1
딕셔너리의 key 값과 value 값을 다음과 같이 조회할 수 있다.
dic.keys() # dict_keys(['name', 'age', 'phone', 'list', 'tuple', 'dict'])
dic.values() # dict_values(['홍길동', 20, '010-1234-5678', [1, 2, 3], (1, 2, 3, 4), {'a': 1, 'b': 2}])
이를 통해 찾고자 하는 key 값 또는 value 값이 존재하는지 확인할 수 있다.
"name" in dic.keys() # True
"aaaa" in dic.keys() # False
20 in dic.values() # True
[1, 2] in dic.values() # False
딕셔너리는 get() 함수를 통해 주어진 key에 따라 해당하는 값을 반환한다.
dic.get("name", "Hello World") # '홍길동'
dic.get("aaaa", "Hello World") # 'Hello World'
딕셔너리는 수정이 가능(mutable)하기 때문에, 요소를 추가하거나 삭제 또는 변경할 수 있다.
# 요소의 추가
dic["aaaa"] = "1111"
print(dic)
"""
dic = {
'name': "홍길동",
'age': 20,
'phone': "010-1234-5678"
'list': [1, 2, 3],
'tuple': (1, 2, 3, 4),
'dict': {
"a": 1,
"b": 2
},
'aaaa': '1111'
}
"""
# 요소의 변경
dic["aaaa"] = "2222"
print(dic)
"""
dic = {
'name': "홍길동",
'age': 20,
'phone': "010-1234-5678"
'list': [1, 2, 3],
'tuple': (1, 2, 3, 4),
'dict': {
"a": 1,
"b": 2
},
'aaaa': '2222'
}
"""
# 요소의 삭제
del dic["aaaa"]
print(dic)
"""
dic = {
'name': "홍길동",
'age': 20,
'phone': "010-1234-5678"
'list': [1, 2, 3],
'tuple': (1, 2, 3, 4),
'dict': {
"a": 1,
"b": 2
}
}
"""
딕셔너리는 items() 함수를 통해 요소들을 tuple인 (key, value) 형식으로 출력할 수 있다.
dic.items()
# dict_items([('name', '홍길동'), ('age', 20), ('phone', '010-1234-5678'),
# ('list', [1, 2, 3]), ('tuple', (1, 2, 3, 4)), ('dict', {'a': 1, 'b': 2})])
1-12. 집합(Set)
집합의 선언은 다음과 같이 할 수 있다.
a = set()
집합은 중복을 허용하지 않고, 순서가 없다.
a1 = [1, 2, 3, 3, 7, 8, 9]
a2 = [0, 1, 4, 5, 6, 8, 10]
a1 = set(a1) # {1, 2, 3, 7, 8, 9}
a2 = set(a2) # {0, 1, 4, 5, 6, 8, 10}
집합은 다양한 연산이 가능하다.
이때, 차집합은 기준이 되는 집합에 따라 결과가 달라진다.
# 교집합
a1 & a2 # {1, 8}
a1.intersection(a2) # {1, 8}
# 합집합
a1 | a2 # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
a1.union(a2) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 차집합
a1 - a2 # {2, 3, 7, 9}
a1.difference(a2) # {2, 3, 7, 9}
a2 - a1 # {0, 4, 5, 6, 10}
a2.difference(a1) # {0, 4, 5, 6, 10}
1-13. Boolean
boolean 값에는 True(참)와 False(거짓)가 있다.
a = True
b = False
bool 연산의 결과는 다음과 같다.
True + True -> True
True + False -> False
False + True -> False
False + False -> False
숫자와 문자를 bool 형식으로 바꿀 수 있고, 결과는 다음과 같다.
# 숫자 -> bool
a = 0
b = 1
c = -1
d = 3.14
bool(a) # False
bool(b) # True
bool(c) # True
bool(d) # True
# 문자 -> bool
a = str()
b = ''
c = ""
d = "Hello"
e = "Hello World"
bool(a) # False
bool(b) # False
bool(c) # False
bool(d) # True
bool(e) # True
2. 제어문
2-1. 조건문(if ~ else)
조건문은 조건이 True(참)일 경우에 실행한다.
if True:
print("Hello World")
# Hello World
if False:
print("Hello World")
#
조건이 True인 경우와 False인 경우로 나눌 때는 if ~ else를 사용한다.
if True:
print("Hello World")
else:
print("Good job")
조건을 여러 가지로 나누고 싶을 경우 if ~ elif ~ else를 사용한다.
"""
- 20대인 경우, "20대"
- 30대인 경우, "30대"
- 40대 이상인 경우, "40대 이상"
- 그 외인 경우, "미성년자"
"""
age = 35
if age >= 40:
print("40대 이상")
elif age >= 30:
print("30대")
elif age >= 20:
print("20대")
else:
print("미성년자")
# 30대
x의 type에 따라 결과가 달라지는 코드는 다음과 같이 작성할 수 있다.
이때, type() 함수 외에도 isinstance() 함수를 사용할 수 있다.
x = 10
# type() 함수
if type(x) == int:
print("Hi")
elif type(x) == str:
print("Good")
else:
print("Hello")
# isinstance() 함수
if isinstance(x, int):
print("Hi")
elif isinstance(x, str):
print("Good")
else:
print("Hello")
2-2. 반복문(for)
반복문은 반복적인 작업을 해야 할 때 효율적으로 코드를 작성할 수 있게 한다.
a = [1, 2, 3, 4, 5]
for i in a:
print(i)
"""
1
2
3
4
5
"""
전에 구현했던 구구단도 반복문을 통해 효율적으로 구현할 수 있다.
num = 2
for i in [1, 2, 3, 4, 5]:
print(f"{num} * {i} = {num * i}")
"""
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
"""
for문에서는 다양한 자료형을 변수로 받을 수 있다.
# list
lst = [
{
"name": "홍길동",
"age": 20
},
{
"name": "신사임당",
"age": 30
}
]
for i in lst:
print(i)
"""
{'name': '홍길동', 'age': 20}
{'name': '신사임당', 'age': 30}
"""
for i in lst:
print(f"이름은 {i['name']}이고, 나이는 {i['age']}입니다.")
"""
이름은 홍길동이고, 나이는 20입니다.
이름은 신사임당이고, 나이는 30입니다.
"""
# dict
dic = {
"name": "홍길동",
"age": 20,
"phone": "010-1234-5678"
}
for i in dic: # for i in dic.keys()
print(i)
"""
name
age
phone
"""
for i in dic.values():
print(i)
"""
홍길동
20
010-1234-5678
"""
for i in dic.items():
print(i)
"""
('name', '홍길동')
('age', 20)
('phone', '010-1234-5678')
"""
리스트에 요소를 삽입할 때도 반복문을 통해 효율적으로 구현할 수 있다
lst = []
for i in [1, 2, 3, 4, 5]:
lst.append(i)
print(lst) # [1, 2, 3, 4, 5]
lst = [
i for i in [1, 2, 3, 4, 5]
]
print(lst) # [1, 2, 3, 4, 5]
리스트는 단순 요소만 저장되어 있기 때문에, 인덱스도 같이 출력하고 싶을 때는 enumerate() 함수를 사용한다.
lst = ['a', 'b', 'c', 'd']
for item in enumerate(lst):
print(item)
"""
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
"""
for idx, val in enumerate(lst):
print(idx, val)
"""
0 a
1 b
2 c
3 d
"""
.
for문이 정상적으로 완료되었는지 확인하기 위해서는 else를 사용할 수 있다.
lst = [1, 2, 3, 4, 5]
for i in lst:
if i % 2 == 0
print(f"{i}는 짝수입니다.")
else:
print("Hello World")
2-3. break
break를 통해 반복문을 멈추고 빠져나올 수 있다.
for i in [1, 2, 3, 4, 5]:
if i not in [1, 2]:
break
print(i)
"""
1
2
"""
2-4. continue
continue를 통해 아래의 코드를 생략하고 다음 반복문을 진행한다.
for i in [1, 2, 3, 4, 5]:
if i in [1, 2]:
continue
print(i)
"""
3
4
5
"""
2-5. pass
pass는 아직 기능을 구현하지 못했을 때 사용할 수 있다.
for i in [1, 2, 3, 4, 5]:
if i in [1, 2]:
pass
print(i)
"""
1
2
3
4
5
"""
'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 6일차. 함수 & 클래스 (0) | 2025.01.14 |
|---|---|
| 5일차. 함수 (0) | 2025.01.13 |
| 4일차. 제어문 & 예외 처리 (0) | 2025.01.10 |
| 2일차. 가상환경 구축 & 자료구조 (0) | 2025.01.08 |
| 1일차. 개발 환경 구축 (0) | 2025.01.07 |