1. 파이썬 기초탄탄
2. 개인 학습 시간
.
.
.
오늘은 두번째 시간.
원래 파이썬 강의 3주차까지 수강하고 들었어야 했는데,
진도가 밀려서 3주차 강의 앞부분을 2배속으로 급히 훑고 들었다.
강의내용 정리
항상 에러에 대해서는 다음과 같은 순서로 대처하기
에러 구간을 파악 - 정보 확인 - 서칭 - 해결
몇가지 흔한 에러들에 대해서 정리해보자면
Syntax - 문법 틀렸다
Index - 인덱스 잘못 적음(5개밖에 없는데, print(a[5]) 적으면 오류남. 왜냐면 없으니까!)
Name - 이름 잘못 적음(이거는 ''를 했냐 안했냐도 잘 봐줘야 함)
ZeroDivisionError - 0으로 나누려고 할 때
{키:벨류} -- 여기서 키는 리스트의 인덱스 같은 느낌
리스트 다음으로 많이 쓰이는 게 바로 JSON!
(JSON에 대한 설명은 아래로.)
딕셔너리는 수정과 삭제가 쉬움.(a는 리스트 이름)
있나 없나 존재 여부를 조회할 수 있음
굉장히 자주 사용할 예정이고 특히, 조건문이랑 반복문이랑 결합해서 자주 활용됨
"찾을 거" in 리스트 -- 이렇게 했을 때,
있다? True. 없다? False
중복을 허용하지 않는 데이터 형. (그래서 이미 있는 내용 추가하면 변화가 없음)
중괄호 사용한다~{}
위에서 순차적으로 내려옴
if 조건A:
처리A
elif 조건B:
처리B
else:
처리C
처리D
조건A를 만족하면 처리A, 처리D 출력
불만족 한다? 한칸 내려가서 조건B를 만족하는지 확인.
만족하면 처리B랑 처리D 출력.
불만족 한다? 한칸 내려가서... 이렇게 차근차근 내려가는 거임
elif는 여러개 사용할 수 있음
+)
if 조건A:
if 조건B:
처리B
요렇게 생긴 건 if 안에 if인거임.
처리B가 나올려면 조건A, 조건B 둘다 만족시켜야 하는 거임
'=='이 같다는 뜻.
반복문
if 조건문이랑 같이 많이 활용됨
시퀀스 타입 = 문자열, 리스트
range --> 내장함수
컨티뉴, 브레이크, 패스
Wwhile 문
영원히 수행하는 거
for i in [1,2,3]:
print(i)
이렇게 출력됨
1
2
3
딕셔너리의 경우,
my_dict={'name':1, 'age':2}
for key, value in my_dict.items():
print(key,value)
키랑 벨류 하나씩 출력해달라고 함(이때, key,value라고 적을 필요는 없음. i,j 뭐 이렇게 적어도 된다~)
그럼 아래와 같이 출력된다~
name 1
age 2
range(start,stop,step) -- 요렇게 쓰는 함수
range(2,6,2) --> 2부터 5(6-1)까지 2씩 뛰어가며 만들어라
=> 2,4
영원히 수행함
while (조건문):
(실행구문)
이렇게 하면 이게 실행구문이 계속 만들어짐
이걸 제어하기 위해서 보통 limit를 사용함
n = 0
while n < 3:
print('while 3번만 실행')
n = n + 1 # n+=1
이렇게 하면 n이 3이 되는 시점에 while n < 3: 한테 막혀서 더이상 실행이 되지 않고, while 3번만 실행이라는 문구는 진짜로 3번만 실행됨
.
그리고 다음 시간까지 풀어오면 좋을 문제가 있었는데,
이거에 시간이 좀 많이 걸렸다..
Q . 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. ( 예) N = 123이면, 6을 return)
혼자 해보다가 안되서 해결하신 분 있으시냐고 팀에 물어봤더니
한분이 힌트를 주셨다!
for문, int, str 인데... 일단 나도 이 조합으로 해보고있었어서 방향은 맞구나하고 알 수 있었다
하지만! 계속해서 풀리지 않는 문제!!!!
그래서 결국 GPT에게 도움을 요청했다
지피니티가 sum말고 누적합을 활용해보라고 조언해줌
그 결과 만들어진 나의 밤티 코드,,,,, ( ༎ຶŎ༎ຶ )
for i in str(n):
print(i)
total = 0
for j in i:
total += int(j)
print(total)
이러니까
1
2
3
3 이 나옴..

아 왜지;;; 했는데 print(i)로 123이 나오고 print(total)로 3이 나왔던 거임!
( i에 마지막 값이 저장된다는 걸 새로 알게 됨)
누접합까지 한번에 하라는 조언을 듣고 다시 생각의 시간을 거쳐 나온 답..!
def solution(n):
answer = 0
for i in str(n):
answer += int(i)
return answer
이쁜 정답이 나왔음 ₍₍ (ง ˘ω˘ )ว ⁾⁾
.
.
사전캠프에 파이썬 강의를 들어둬서 그런지 1주차 내용은 거의 알고 있는 내용들이었다
그래서 배속해서 빠르게 들었음
강의내용 정리
.
'=' 이거는 변수 선언/정의/할당 하는 것
문자는 ''나 ""으로 묶어두는데, 뭘 사용하든 통일만 되면 된다
그렇기 때문에 문자열 자체에 '나 "를 포함시키고 싶다면 이걸 묶어주는 건 다른 걸로 하면 됨
25.0 정수? 실수?
어쨌던간 .0이 붙어있기 때문에 실수(float)이다~
정수랑 실수가 섞인 연산을 했을 때, 결과물의 데이터 타입은?
실수!
num % (숫자) == 0
이 식은 배수를 구할 때 자주 활용되니 기억해둘 것.
.
리스트, 튜플, 딕셔너리
-> 많은 양의 데이터 관리를 편리하게 만들어 주는 친구들
리스트 각 요소에 번호표를 부여.
가, 나, 다, 라, ..., 타, 파, 하
0 -1
첫 시작이 0이고 젤 뒤에 꺼는 -1이라는 점에 유의하기
그리고 리스트 안에 리스트가 들어있는 경우가 있음
이걸 중첩된 리스트라고 칭하기도 하는데 아래와 같이 생겼음
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
이럴 때는 대괄호를 두번 써서 원하는 내용물을 출력할 수 있음~
print(nested_list[1][0]) -- 두 번째 항목에서 첫 번째꺼
# 출력: 4
- ⭐⭐append(): 리스트에 항목을 추가합니다.⭐⭐
- ⭐extend(): 리스트에 다른 리스트의 모든 항목을 추가합니다.⭐
- insert(): 리스트의 특정 위치에 항목을 삽입합니다.
- remove(): 리스트에서 특정 값을 삭제합니다.
- pop(): 리스트에서 특정 위치의 값을 제거하고 반환합니다.
몰랐는데 제거 + 담기가 되는 함수였음..!
pop() 예시
popped_value = my_list.pop(5) -- 이렇게 하면
print(popped_value) # 출력: 6 -- 여기엔 6이 담기고
print(my_list) # 출력: [1, 2, 10, 4, 5, 7, 8, 9] -- 여기엔 6이 빠짐
CRUD가 된다는 점에서 리스트가 가변성이 있다는 걸 알 수 있음.
- index(): 리스트에서 특정 값의 인덱스를 찾습니다.
- count(): 리스트에서 특정 값의 개수를 세어줍니다.
- sort(): 리스트의 항목들을 정렬합니다.
- reverse(): 리스트의 항목들을 역순으로 뒤집습니다.
.
리스트 내용을 삭제할 수 있는 방법이 꽤나 여러가지가 있음.
위에 적혀있는 것처럼 remove()랑 pop()도 있고 아래의 두가지도 있다~
del my_list[0]
print("첫 번째 항목 삭제 후 리스트:", my_list)
이걸 슬라이싱이랑 함께 쓰면 인덱스 몇번부터 몇번까지 지워줘~ 이런 것도 된닫!
my_list.clear()
print("모든 항목 제거 후 리스트:", my_list)
+) 검색하다가 알게 됐는데, del은 함수가 아니라 예약어고 그래서 함수랑 같이 사용할 수 없다고 한다..!
예약어?
값을 변경할 땐, 인덱스로 또 위치를 콕 집은 다음에 변경할 내용을 적어주면 됨
my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']
my_list[3] = 'dragonfruit' -- 4번째꺼를 용과로 바꾸겠다
print(my_list)
=> ['apple', 'banana', 'cherry', 'dragonfruit', 'elderberry']
짠!
[시작숫자:끝숫자:간격]
슬라이싱을 할 때는 -1을 기억하기
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
여기서 my_list[2:5] 하면
[3, 4, 5] 이렇게 나옴. 인덱스 5번은 안나옵니다잉
print(my_list[-3:])
이 경우에는 인덱스 번호가 음수라고 출력도 역방향으로 되는 게 아님!!
-3번 인덱스부터 오른쪽으로 출력
# 출력: [8, 9, 10]
print(my_list[1:9:2])
이런 식으로 숫자가 맨 뒤에는 간격 설정도 할 수 있음
# 출력: [2, 4, 6, 8]
copy_of_list = my_list[:]
print(copy_of_list)
[:] 하면 리스트 통으로 복사할 수 있음
근데 이걸 어디다 쓰는 거임..?
# 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
리스트 복사 활용법
일단 리스트 복사는 원본 데이터를 보호하면서 데이터를 활용하거나 수정할 때 필수적이라고 함!
(리스트가 복사된다는 것도 첨 알았는데, 복사에도 깊은 복사랑 얉은 복사가 있단다...
배움에는 끝이 없구나~~)
reversed_list = my_list[::-1]
[::-1] 하면 거꾸로 출력이 가능하다..!
print(reversed_list)
# 출력: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
더 신기한 건 [::-2]하면 두칸씩 건너뛰면서 출력해줌
# 출력: [10, 8, 6, 4, 2]
시작숫자, 끝숫자는 입력 안하고 간격만 입력한 거라고 이해하면 될 듯!
reverse: 정렬 순서를 정함
False -> 오름차순(기본값)
True -> 내름차순
리스트.sort() 혹은
리스트.sort(reverse=False) 하면 오름차순으로 1,2,3,4, .... 이런 식으로 출력되고
리스트.sort(reverse=True) 하면 역으로 10,9,8,... 일케 출력됨
문자의 정렬
리스트의 문자열 길이로 정렬할 수도 있음!
words = ['apple', 'banana', 'orange', 'grape', 'cherry']
words.sort(key=len)
print("문자열 길이로 정렬된 리스트:", words)
#출력: ['apple', 'grape', 'banana', 'cherry', 'orange']
- - - 5글자 - - - - - - - - - 6글자 - - - - -
key=len 해가지고 정렬 기준을 길이로 설정하면 가능하다~
.
.
JSON: JavaScript Object Notation
데이터를 주고받을 때 많이 사용하는 가벼운 텍스트 기반 데이터 형식.
딕셔너리와 JSON은 '키-값' 쌍으로 데이터를 구조화한다는 점에서 매우 유사함.
하지만,
딕셔너리는 파이썬 같은 특정 프로그래밍 언어의 자료구조
JSON은 언어에 독립적으로 데이터를 저장하고 교환하기 위한 텍스트 기반 형식
파이썬 딕셔너리 -> JSON 문자열로 변환(직렬화)
JSON 문자열 -> 딕셔너리로 변환(역직렬화)
직렬화/역직렬화 과정은 웹 개발 등에서 필수적인 작업이라고 함.
c[3:3]
이렇게 하면 [] 빈 리스트가 나옴..!
시퀀스 타입(Sequence Type)
파이썬에서 여러 개의 데이터를 순서대로 저장하는 자료형을 말합니다.
=> 시퀀스 = 순서(인덱스)가 있는 자료형
리스트, 튜플, 문자열, range 다 포함되는 거임
누적합
누적합 관련 자료들을 찾아봤는데, 잘 정리된 내용이 많았지만 지금의 내가 읽기엔 영어도 한국어도 안 읽히는 관계로...피티한데 친절한 설명을 부탁했다
numbers = [1, 2, 3, 4]
total = 0
result = [] -- 비어있는 리스트
for n in numbers: -- numbers라는 리스트 안에 항목을 n으로 지칭함
total += n -- 토탈에 누적합 된 n값을 저장저장
result.append(total) -- 토탈에 들어간 내용을 리스트로 만들어 줌
print(result) # [1, 3, 6, 10]
이거는 나름 이해할 만한 게시글
암튼간에 누적합이 가는 곳마다 for문이 따라간다는 건 알겠닫
.
.
.
오늘의 소감
오늘 튜터님들 조 순회 때, TIL 관련해서 얘기가 나와서 팀원들의 TIL 슥 둘러보고왔다. 웃긴 짤이랑 사진도 막 넣어서 재밌게 구성하신 분도 있고, 손필기 하신 분도 있고 포맷 자체가 신박한 분도 있었다. 둘러보니까 꽤 재밌어서 앞으로 잠올 때마다 TIL 산책해야겠다 흐흐. 보면서 좋은 점들은 좀 본받고, 질문거리도 생각해보고 해야지
새롭게 알게된 점 & 어려웠던 점
오늘 코드카타 13번(세션 숙제) 푸는 게 어려웠다
코드 자체는 굉장히 간단했는데, 그냥 뭘 써야하는지 몰라서 헤멨던 것 같다
하지만 팀원과 지피티를 등에 업고 결국 풀었음~~
내일의 목표
내일 11시에 라이브 세션이 있는데, 선수과목으로 강의를 4주차까지 들어야 한다...
내가....할 수 있을까...?
지금 2주차 반까지 왔는데 일단 빡세게 하면 3주차까진 할 수 있을 것 같은데, 4주차까지는 잘 모르겠다ㅠㅜ 진도가 한번 밀리니까 따라잡기가 쉽지 않다 흑흑
그래도 일단 하는데까진 해봐야지..! 귤을 먹으면서 힘내보자