
안녕하세요.
벌써 실습을 시작하고 둘쨋날이 찾아왔네요..
지금까지 계속 셀프 브랜딩과 함께 했는데, 갑자기 냅다 실습으로 던져졌기 때문에 조금 서운합니다.
그럼 시작.
오늘의 순서
- 조건문 — 한 건을 판단한다
- 반복문 — 모든 로그에 같은 판단을 한다
- 집합과 Counter — 사람 수와 횟수를 센다
- 종합 — 로그 목록에서 확인할 계정을 찾는다
- 함수 — 여러 줄의 일에 이름을 붙인다.
- 파일 — 코드 밖의 글자를 읽고 쓴다.
- 모듈 — 함수를 다른 파일에 두고 불러 쓴다.
- CSV — 칸 이름이 붙은 표 파일을 읽는다.
조건문
값에 따라 실행할 길을 고른다.
1) 참일 때만 들여쓴 줄을 실행한다.
2) if ·else로 두 갈래를 만든다.
3) elif로 세 단계를 나눈다.
조건문 용어
| 용어(한글발음) | 한 줄 뜻 | 비유 |
| 조건문 if, 이프 |
조건이 참일 때만 그 줄을 실행하는 문장 | 갈림길의 표지판 |
| 엘리프 elif |
앞 조건이 거짓일 때 다시 따져 보는 갈래 | 두 번째 표지판 |
| 들여쓰기 indent, 인덴트 |
줄 앞의 빈칸으로 묶음을 나타내는 것 | 문단의 들여쓰기 |
조건에 쓰는 비교기호 여섯 개
| 기호 | 뜻 | 예 - fail_count가 5일 때 | 결과 |
| == | 같다 | fail_count == 5 | True |
| != | 다르다 | fail_count != 5 | False |
| > | 크다 | fail_count > 5 | False |
| >= | 크거나 같다 | fail_count >= 5 | True |
| < | 작다 | fail_count < 3 | False |
| <= | 작거나 같 | fail_count <= 5 | True |
조건 연산자
and는 두 조건이 모두 참이여야 합니다 > 둘 중 하나라도 거짓이면 전체가 거짓임.
or은 하나만 참이여도 됩니다.
지킬 것 네 가지
| 지킬 것 | 이렇게 |
| if 뒤에 조건, 줄 끝에 콜론 | if log["result"] == "FAIL": |
| 참일 때 할 일은 네칸 들여쓰기 | 들여쓰기가 끝나는 곳이 if 의 끝 |
| 갈래가 여럿이면 elif, 나머지는 else | else 뒤에는 조건을 쓰지 않는다 |
| 범위가 겹치면 큰 기준을 먼저 | >= 5 를 >= 2 위에 |
반복문
같은 일을 모든 값에 적용한다.
for
1) 목록에서 하나씩 꺼낸다.
2) 로그 딕셔너리를 하나 씩 본다.
3) 실패한 계정만 모은다.
# for 값 in 목록
# 🔎 코드를 읽는 법
# `for 값 in 목록`은 ‘목록에서 값을 하나씩 꺼내며’라고 읽습니다.
# 들여쓰기가 끝나는 곳까지가 한 번에 반복할 일입니다.
users = ["kim01", "lee02", "park03"] # 확인할 계정 목록
for user in users: # 계정을 하나씩 꺼내 반복
print(user)
kim01
lee02
park03
반복문 용어
| 용어(한글발음) | 한 줄 뜻 | 비유 |
| 반복문 for, 포 |
모아 둔 것을 하나씩 꺼내 같은 일을 되풀이 | 출석부 한 명씩 부르기 |
| while 와일 |
조건이 참인 동안 계속 되풀이 | 물이 끓을 때까지 기다리기 |
range() 함수
정해진 횟수만큼 되풀이한다.
정수 시컨스를 생성하는 Python의 내장 함수로 반복문에 자주 사용됩니다!
# range(stop): 0부터 stop-1까지의 정수를 생성합니다.
print(list(range(5))) # 출력: [0, 1, 2, 3, 4]
# range(start, stop): start부터 stop-1까지의 정수를 생성합니다.
print(list(range(2, 6))) # 출력: [2, 3, 4, 5]
# range(start, stop, step): start부터 stop-1까지 step 간격으로 정수를 생성합니다.
range(start, stop, step): start부터 stop-1까지 step 간격으로 정수를 생성합니다.
range()는 for 반복문과 함께 사용하여 특정 횟수만큼 반복 작업을 수행할 수 있습니다.
for i in range(3):
print(i) # 출력: 0, 1, 2
while
조건이 참인 동안 되풀이한다.
fail_count = 0
while fail_count < 3:
fail_count = fail_count + 1
print(fail_count)
1
2
3
| for (담아 둔 것의 개수만큼) | while (조건이 참인 동안) |
| 리스트·딕셔너리·문자열을 돈다 | 몇 번 돌지 미리 모를 때 쓴다 |
| 개수가 정해져 있어 저절로 끝난다 | 조건을 바꾸는 줄이 꼭 필요하다 |
| 로그 목록 돌기는 거의 for | 없으면 멈추지 않는다 |
반복문 지킬것 네 가지
| 지킬 것 | 이렇게 |
| ① for 값 in 목록 : 으로 쓴다 | 값 이름은 목록 이름의 단수형 — logs 에서 log |
| ② 줄 끝에 콜론, 반복할 일은 네 칸 들여쓰기 | if 와 같은 규칙 |
| ③ 모을 때는 빈 목록을 반복문 위에 한 번만 | 안에 만들면 바퀴마다 비워진다 |
| ④ 결과는 반복이 끝난 뒤 한 번만 출 | print 를 안에 두면 바퀴마다 찍힌다 |
집합 · Counter
중복을 지우고 횟수를 센다. 실패한 사람이 몇 명인지, 각자 몇 번 실패했는 지를 구분합니다.
1) 중복을 지우고 싶을 때
2) 값마다 횟수를 세고 싶을 때
3) 계정과 횟수를 함께 돌고 싶을 때
4) 기준 이상인 계정만 찾고 싶을 때
🔎 코드를 읽는 법
`set`은 ‘몇 명’, `Counter`는 ‘각자 몇 번’이라는 질문에 답합니다.
먼저 무엇을 세려는지 말로 정하세요.
집계 용어
| 용어 (한글발음) | 한 줄 뜻 | 비유 |
| 집합 set, 셋 |
같은 값을 한 번만 담는 그릇 | 중복 없는 출석 명단 |
| 카운터 Counter |
값마다 몇 번 나왔는지 세어 주는 도구 | 정 자로 표시하는 계수기 |
| 임계값 Threshold, 스레숄드 |
이 값을 넘으면 조치한다고 정해둔 선 | 수위 경보선 |
| 하드코딩 hard coding, 하드코딩 |
바뀔 값을 코드 한가운데 박아두는 것 | 벽에 못으로 박아 놓기 |
1.1) set()은 같은 값을 하나만 남깁니다.
set은 순서를 지키지 않습니다. (순서가 필요하면 리스트를 쓰면 됨.)
set은 번호로 꺼낼 수 없다.
# 중복이 있는 실패 계정 목록을 준비합니다.
failed_users = ["kim01", "kim01", "lee02", "park03", "kim01"]
unique_users = set(failed_users) # 중복 제거
print(unique_users)
print(f"실패 계정 {len(unique_users)}명") # 서로 다른 계정 수 확인
{'kim01', 'park03', 'lee02'}
실패 계정 3명
set 메서드
| 메서드 | 뜻 |
| add() | 집합에 요소 추가하기 |
| remove(), discard() | 집합에서 요소 제거하기 |
| union() | 합집합 구하기 |
| intersection() | 교집합 구하기 |
| difference() | 차집합 구하기 |
2.1) Counter는 값마다 나온 횟수를 딕셔너리처럼 돌려줍니다.
Counter를 쓰려먼 맨 위에 한 줄(import 선언 해야함. ex.from collections import Counter)값마다 몇 번인지 센다.없는 계정은 0이다.(딕셔너리에서는 없는 키 값은 KeyError가 발생함, 근데 Counter는 0을 출력)
.items()는 키와 값을 한 쌍씩 꺼낸다.
from collections import Counter # 항목별 횟수를 세는 도구
# 중복이 있는 실패 계정 목록을 준비합니다.
failed_users = ["kim01", "kim01", "lee02", "park03", "kim01"]
counts = Counter(failed_users) # 계정별 횟수 계산
print(counts)
print(counts["kim01"]) # kim01의 횟수만 확인
Counter({'kim01': 3, 'lee02': 1, 'park03': 1})
3
2.2) .items()는 키와 값을 한 쌍씩 꺼낸다.
한 번 꺼낼 때마다 (계정, 횟수) 두 값이 붙어서 나옵니다.
.items() 없이 돌면 계정 이름만 나옵니다. 두 이름에 나눠 담을 수 없습니다.(ValueError)
from collections import Counter # 항목별 횟수를 세는 도구
# 실패 계정별 횟수를 계산합니다.
counts = Counter(["kim01", "kim01", "lee02", "park03", "kim01"])
for user, count in counts.items(): # 계정과 횟수를 함께 반복
print(f"{user}: {count}회")
kim01: 3회
lee02: 1회
park03: 1회
Counter와 기준값의 지킬 것 네 가지
| 지킬 것 | 이렇게 |
| ① 맨 위에 from collections import Counter | 빠뜨리면 NameError |
| ② Counter( 목록 ) 으로 세고, 대괄호로 한 계정 | 없는 계정은 0 |
| ③ 계정과 횟수를 같이 쓰려면 .items() | for user, count in counts.items(): |
| ④ 기준값은 맨 위에 대문자 이름으 | THRESHOLD = 2 |
set vs counter
| set | counter |
| 몇 명인지 알 수 있다 | {'kim01':3, 'lee02':1} 모양 |
| 누가 몇 번인지는 사라진다 | .items |
(함수, 메서드의 차이) 미니과제(가독성있는 문서화,,?)
1. 함수(function)
기본 구조 >> 함수명()
- 독립적으로 존재하는 코드의 묶음
- 특정 클래스에 종속되지 않는다.
> 호출방식 : 이름만으로 직접 호출한다. (ex: print(), len(), my_func())
2. 메서드(method)
기본 구조 >> object.method_name()
- 클래스 내부에 정의되어 특정 객체에 종속된 함수
- 첫번째 인자로 self를 포함함.
> 호출방식 : 객체 뒤에 점(.)을 찍고 호출한다. (ex: object.split(), object.append())
함수
함수는 여러 줄의 코드를 묶어 이름을 붙인 것.
이름을 부르면 묶인 코드가 실행됨.
1) 적어 두고, 부를 때 실행된다.
2) 부를 때 값을 넘긴다.
함수 용어
| 용어 (한글발음) | 한 줄 뜻 | 비유 |
| 함수 function, 펑션 |
여러 줄짜리 일에 이름을 붙여 둔 것 | 이름 붙인 조리법 |
| 매개변수 parameter, 파라미터 |
함수가 받아 쓰는 값의 이름 | 조리법의 재료 칸 |
| 기본값 default, 디폴트 |
안 넘겨주면 대신 쓰는 값 | 기본 매운맛 |
| return 리턴 |
함수가 결과를 밖으로 돌려주는 것 | 완성된 요리 내주기 |
함수를 만드는 다섯가지 규칙
- def로 시작하고 한 칸 띄운 뒤 이름을 쓴다.
- 이름 뒤에는 괄호 (), 줄 끝에는 콜론 :을 붙인다. 하나라도 빠뜨리면 SyntaxError가 남.
- 함수가 하는 일은 그 아래에 네 칸 들여쓴다. 들여쓰기가 끝나는 곳이 함수의 끝.
- 이름은 무엇을 하는지 알 수 있게 짓는다. 소문자와 밑줄을 쓴다. — count_failed, show_alert.
- 정의가 먼저, 호출이 나중이다. 부를 때도 괄호를 꼭 붙인다.
🔎 코드를 읽는 법
`def` 줄은 ‘이런 일을 이 이름으로 부르겠다’고 적어 두는 것
적기만 하면 아무 일도 일어나지 않음. 이름 뒤에 괄호를 붙여 불러야 실행됨.
def say_hello():
print("안녕하세요")
say_hello() # 부르는 순간 실행된다
say_hello() # 또 부르면 또 실행된다
안녕하세요
안녕하세요
함수에서 쓰는 말
| 말 | 뜻 | 예 |
| 정의한다 | 함수를 적어 두는 일. def 로 시작한다 | def show_alert(user): |
| 호출한다 | 이름을 불러 실제로 실행하는 일 | show_alert("kim01") |
| 매개변수 | 함수가 받아 쓸 값에 붙인 이름 (괄호 안) | user |
| 인자 | 부를 때 실제로 넘기는 값 | "kim01" |
| 반환값 | 함수가 돌려주는 결과 | return count 의 count |
return
> 결과를 돌려준다.
def add(a, b):
return a + b
result = add(3, 5) # 돌려받은 8이 result에 담긴다
print(result)
8
파일
코드 밖의 글자를 읽고 쓴다.
1) 파일에 글자를 쓰고 싶을 때
2) 파일 전체를 읽고 싶을 때
3) 한 줄씩 읽고 싶을 때
4) 특정 글자가 든 줄만 고르고 싶을 때
5) 기존 파일 뒤에 이어서 쓰고 싶을 때
6) 내 코드를 파일로 남기고 싶을 때
파일 용어
| 용어 (한글발음) | 한 줄 뜻 | 비유 |
| open 오픈 |
파일을 여는 파이썬 명령 | 서랍 열기 |
| mode 파일 모드, 모드 |
읽기·쓰기·덧붙이기 중 무엇으로 열지 | 읽기 전용인지 필기 가능인지 |
| with문 위드 |
블록이 끝나면 파일을 알아서 닫는 문장 | 자동으로 닫히는 문 |
| encoding 인코딩 |
글자를 숫자로 바꿔 저장하는 방식 | 글자를 적는 규칙 |
모드 세 가지
| 모드 | 무엇을 하나 | 원래 내용은 |
| "r" 읽기 모드를 안 쓰면 이것 |
파일을 읽는다 | 그대로 있다 |
| "w" 새로 쓰기 | 없으면 만들고, 있으면 새로 쓴다 | 통째로 지워진다 |
| "a" 덧붙이기 | 맨 뒤에 이어서 쓴다 | 그대로 두고 뒤에 붙인다 |
파일 읽기
> read()는 통째로, 모드를 적지 않으면 기본이 읽기 모드입니다.
with open("memo.txt", "w", encoding="utf-8") as f:
f.write("첫 번째 줄\n두 번째 줄\n")
with open("memo.txt", encoding="utf-8") as f:
print(f.read())
첫번째 줄
두번째 줄
with를 쓰는 이유! >> 닫는 것을 잊지 않으려고
1) 연 파일은 닫아야 한다 > 안 닫으면 쓴 내용이 저장되지 않거나 다른 프로그램이 못 연다
2) with 는 묶음이 끝나면 저절로 닫는다 > 중간에 오류가 나도 닫힌다
3) 한글 파일에는 encoding="utf-8" > 없으면 컴퓨터마다 다르게 읽어 글자가 깨진다
파일 지킬 것 네 가지
| 지킬 것 | 이렇게 |
| ① with open("memo.txt", encoding="utf-8") as f: 로 연다 | 닫는 것을 파이썬이 대신 해 준다 |
| ② 모드는 셋 — 안 쓰면 읽기, "w" 새로 쓰기, "a" 덧붙이기 | 기록을 쌓을 때는 반드시 "a |
| ③ 한글 파일에는 encoding="utf-8" | 열 때마다 붙인다 |
| ④ write 는 줄을 안 바꾼다 | 줄 끝마다 을 직접 붙인다 |
모듈
함수를 다른 파일에 두고 불러 쓴다.
1) 자주 쓰는 함수를 따로 모아 두고 싶을 때
2) 파이썬에 이미 들어 있는 도구를 쓰고 싶을 때
3) 지금 날짜와 시각을 쓰고 싶을 때
4) 글자로 적힌 시각에서 시만 꺼내고 싶을 때
모듈 용어
| 용어 (한글발음) | 한 줄 뜻 | 비유 |
| 모듈 module, 모듈 |
함수 여럿을 모아 둔 파이썬 파일 하나 | 요리책 한 권 |
| 임포트 import |
다른 파일의 함수를 끌어다 쓰는 것 | 옆 책에서 조리법 빌리기 |
| 표준 라이브러리 standard library |
파이썬을 깔면 함께 오는 모듈 묶음 | 기본으로 딸린 요리책 |
%%writefile
> 셀을 실행하지 말고 파일로 저장하라. (코랩한테 시키는 명령어)
| 셀에 쓰는 줄 | 코랩이 하는 일 | 화면에 나오는 |
| %%writefile utils.py | 셀 내용을 utils.py 파일로 저장한다. 코드는 실행하지 않는다 |
Writing utils.py |
| !python utils.py | 저장한 파일을 실행한다 | 코드의 출력 |
| 왼쪽 📁 파일 탭 | 만들어진 파일을 눈으로 확인한다 | utils.py |
표준 라이브러리
>> 이미 들어 있는 요리 책
| 모듈 | 무엇을 하나 | 언제 쓰나 |
| collections | Counter 가 여기 있다 | 오전에 이미 썼다 |
| datetime | 날짜와 시각을 다룬다 | 지금 |
| csv | 쉼표로 나뉜 표 파일을 읽는다 | 8교시 |
| json · logging | 결과 저장 · 기록 남기기 | 다음 시간 |
CSV
칸 이름이 붙은 표 파일을 읽는다.
1) 표 파일을 줄마다 읽고 싶을 때
2) 칸 이름으로 값을 꺼내고 싶을 때
3) 칸 순서가 바뀐 파일이 와도 괜찮은 이유
4) 이름을 남이 알아보게 짓고 싶을 때
CSV 용어
| 용어 (한글발음) | 한 줄 뜻 | 비유 |
| CSV 씨에스브이 |
쉼표로 칸을 나눈 표 파일 | 줄 친 장부 |
| header 헤더 |
표 첫 줄에 적힌 칸 이름들 | 장부의 항목 이름 |
| DictReader 딕트리더 |
표를 딕셔너리로 읽어 주는 도구 | 이름표를 붙여 주는 기계 |
| PEP8 펩에이트 |
파이썬 코드를 어떻게 적을지 정한 관례 | 회사 문서 서식 |
종합은 대충 로그목록에서 같은 데이터를 이용해서 조건문, 반복문, Counter, 기준값 판정을 하는 문제를 풀어봤습니다.
오전 수업에 대한 전체적인 총평은 비전공자가 냅다 배우기에는 속성,, 강의였다,,?
저는 전공자라서 한번 배웠던 경험으로 배우면서 까먹었던 개념을 다시 한번 익힐 수 있게 되었던 것 같고,,
바위 틈새에 모래 끼워넣는 느낌으로 배웠습니다..
와 위에는 오전에 썼던 거구요..
지금 오후 다끝나고 블로그 정리하니까 너무 힘드네여,,,,
몰아치는,, 하루,,,,,,,,,,,,,,,,,, 내일부터는 추석이라 4일동안 쉽니다.
그때 동안 리프레쉬하고 다시 열정가득,,? 돌아와볼게여,, 아됴.
'공부 > SKT ALEPH' 카테고리의 다른 글
| AI·자동화 기초(에이전트·API·스크립팅) - 1 (0) | 2026.09.22 |
|---|



