[내일배움캠프] DAY8 - 파이썬 기초탄탄2, 파이썬 종합반 1-2주차

채은·2025년 12월 8일

1. 파이썬 기초탄탄
2. 개인 학습 시간

.
.
.

1. 파이썬 기초탄탄

오늘은 두번째 시간.
원래 파이썬 강의 3주차까지 수강하고 들었어야 했는데,
진도가 밀려서 3주차 강의 앞부분을 2배속으로 급히 훑고 들었다.

강의내용 정리

sorted vs .sort()

  • sorted => 내장합수
    원본 리스트를 변경X
    리스트뿐만 아니라, 문자열, 튜플, 딕셔너리반복 가능한 객체에 적용이 가능하다~
  • .sort() => 메소드합수
    원본 리스트 자체가 변경됨
    리스트 전용 (메소드 함수도 리스트만 쓸 수 있는 거, 문자열에만 쓸 수 있는 거, 딕셔너리만 쓸 수 있는 거가 있다)

파이썬 에러 관리

항상 에러에 대해서는 다음과 같은 순서로 대처하기
에러 구간을 파악 - 정보 확인 - 서칭 - 해결

몇가지 흔한 에러들에 대해서 정리해보자면
Syntax - 문법 틀렸다
Index - 인덱스 잘못 적음(5개밖에 없는데, print(a[5]) 적으면 오류남. 왜냐면 없으니까!)
Name - 이름 잘못 적음(이거는 ''를 했냐 안했냐도 잘 봐줘야 함)
ZeroDivisionError - 0으로 나누려고 할 때

딕셔너리

{키:벨류} -- 여기서 키는 리스트의 인덱스 같은 느낌

리스트 다음으로 많이 쓰이는 게 바로 JSON!
(JSON에 대한 설명은 아래로.)

딕셔너리는 수정과 삭제가 쉬움.(a는 리스트 이름)

  • 추가/수정: a["키"] = "벨류"
  • 삭제: del a["키"]
  • 전체삭제: a.clear()
  • 키/벨류만 추출:
    a.keys() -- 요런식으로 키 값만 쓸 수도 있고, 같은 형식으로 벨류도 가능하다
    a.items() -- 이렇게 하면 쌍으로 추출

in

있나 없나 존재 여부를 조회할 수 있음
굉장히 자주 사용할 예정이고 특히, 조건문이랑 반복문이랑 결합해서 자주 활용됨

"찾을 거" in 리스트 -- 이렇게 했을 때,
있다? True. 없다? False

Set

중복을 허용하지 않는 데이터 형. (그래서 이미 있는 내용 추가하면 변화가 없음)
중괄호 사용한다~{}

조건문

위에서 순차적으로 내려옴

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 반복문

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

range(start,stop,step) -- 요렇게 쓰는 함수
range(2,6,2) --> 2부터 5(6-1)까지 2씩 뛰어가며 만들어라
=> 2,4

continue, break, pass

  • continue: 무시하고 다음꺼 실행
  • break: 바로 중지
  • pass: 코드가 비어있는 셈 칠 수 있음

While 반복문

영원히 수행함

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
    
이쁜 정답이 나왔음 ₍₍ (ง ˘ω˘ )ว ⁾⁾

.

.

2. 개인 학습 시간

✏️ 데이터 분석 파이썬 종합반 1주차

사전캠프에 파이썬 강의를 들어둬서 그런지 1주차 내용은 거의 알고 있는 내용들이었다
그래서 배속해서 빠르게 들었음

강의내용 정리

유용한 단축키들

  • 실행: Shift + Enter
  • 새 코드 셀 추가: Ctrl + M + A
  • 코드 셀 삭제: Ctrl + M + D
  • 실행 취소: Ctrl + M + Z
  • 코드 셀 분할: 나눌 위치에 Ctrl + M + 하이픈(-) (가독성 높일 수 있음)
  • 셀 유형 변경: 코드 셀을 마크다운 셀로 변경 Ctrl + M + M (설명 적을 때 유용)

.

기초내용들

  • '=' 이거는 변수 선언/정의/할당 하는 것

  • 파이썬 데이터 타입

  • 문자는 ''나 ""으로 묶어두는데, 뭘 사용하든 통일만 되면 된다
    그렇기 때문에 문자열 자체에 '나 "를 포함시키고 싶다면 이걸 묶어주는 건 다른 걸로 하면 됨

  • 25.0 정수? 실수?
    어쨌던간 .0이 붙어있기 때문에 실수(float)이다~

  • 정수랑 실수가 섞인 연산을 했을 때, 결과물의 데이터 타입은?
    실수!

  • num % (숫자) == 0

이 식은 배수를 구할 때 자주 활용되니 기억해둘 것.

  • NaN(Not a Number, 결측치)
    정의할 수 없는 수치값
    수학적으로 말이 안될 때, 데이터 자체가 비어있을 때 등이 결측값이 된다

.

✏️ 데이터 분석 파이썬 종합반 2주차

리스트, 튜플, 딕셔너리
-> 많은 양의 데이터 관리를 편리하게 만들어 주는 친구들

리스트?

  • 가변한 시퀀스
  • [] 사용
    (튜플 같은 경우엔 값 변경이 안됨)

인덱싱

리스트 각 요소에 번호표를 부여.

가, 나, 다, 라, ..., 타, 파, 하
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: 인덱스 기반으로 콕 찝어서 삭제 (어쩌면 remove랑 pop)
del my_list[0]
print("첫 번째 항목 삭제 후 리스트:", my_list) 

이걸 슬라이싱이랑 함께 쓰면 인덱스 몇번부터 몇번까지 지워줘~ 이런 것도 된닫!

  • clear(): 싸그리 지워
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주차까지는 잘 모르겠다ㅠㅜ 진도가 한번 밀리니까 따라잡기가 쉽지 않다 흑흑
그래도 일단 하는데까진 해봐야지..! 귤을 먹으면서 힘내보자

profile
맨땅에 헤딩

0개의 댓글