[5일차] 컬렉션 타입(튜플, 세트, 딕셔너리), 제어문(조건문, 반복문)
2026. 5. 26. 17:29ㆍKDT/1. Python
# 튜플 tuple
- 여러 가지 데이터 타입의 값을 저장할 수 있는 변경 불가능( immutable)한 순서가 있는 컬렉션
- 튜플은 괄호 ( ) 를 사용하여 생성
- 항목들은 쉼표(,)로 구분
1. 튜플 만들기
- 빈 튜플을 만들 일이 거의 없을 것임. 튜플은 변경 불가능해서 요소 추가가 불가능
- 요소가 1개일 경우 끝에 콤마를 꼭! 붙여야 함
- 연산자 우선순위에 의해 먼저 계산할 때 쓰는 소괄호로 인식
tu1 = ()
print(tu1) # ()
print(type(tu1)) # <class 'tuple'>
tu1 = (1,)
print(tu1) # (1,)
print(type(tu1)) # <class 'tuple'>
tu1 = (1)
print(tu1) # 1
print(type(tu1)) # <class 'int'>
tu2 = (1, 3, 5, 7)
print(tu2)
print(type(tu2))
tu3 = tuple([1, 3, 5, 7])
print(tu3)
print(type(tu3))
li3 = list(tu3)
print(li3) # [1, 3, 5, 7]
print(type(li3)) # <class 'list'>
tu4 = 1, 3, 5, 7 # 패킹
print(tu4)
print(type(tu4))
2. 패킹과 언패킹
- 한 변수가 여러 개의 값을 받아 컬렉션 타입이 되고, 이때 자동으로 생성된 것이 튜플
num1 = 10
num2 = 20
num3 = 30
tu4 = num1, num2, num3 # 패킹
print(tu4)
result1, result2, result3 = tu4 # 언패킹
print(result1)
print(result2)
print(result3)
3. 튜플의 인덱싱과 슬라이싱
tu5 = ('apple', 'banana', ('🍎', '🍌')) # 리스트와 똑같음
#tu5[0] = 'orange' # TypeError: 'tuple' object does not support item assignment 요소를 바꿀 수 없음
# tu5 = 'orange' # 이건 가능
print(tu5)
print(type(tu5))
print(tu5[0])
print(type(tu5[0]))
print(tu5[2][0])
print(type(tu5[2][0]))
tu5 = ('apple', 'banana', ['🍎', '🍌'])
print(tu5)
print(type(tu5))
print(tu5[2])
print(type(tu5[2]))
tu5[2][0] = '❤' # 이건 가능
print(tu5)
# tu5[2] = '🎃' # TypeError: 'tuple' object does not support item assignment
# 튜플의 슬라이싱은 결과도 튜플로 반환
tu6 = (1, 2, 'apple', 'banana')
print(tu6[1:])
print(tu6[1:3])
4. 튜플의 정렬
tu9 = (10, 30, 100, 90, 50)
# tu9.sort() # 튜플은 sort 메서드가 존재하지 않음
result = sorted(tu9, reverse=True) # 내림차순하여 리스트로 반환
print(result)
print(tu9) # 변경되지 않았음
result = tuple(result)
print(result)
# 세트 set
- 세트는 중복되지 않는 항목들의 순서가 없는 컬렉션
- 중괄호 {} 를 사용하여 생성하거나 set() 생성자 사용 가능
1. 세트 만들기
s1 = {1, 3, 5, 7}
print(s1)
print(type(s1))
s2 = {}
print(s2)
print(type(s2)) # 중괄호에 값이 없으면 자동으로 dict으로 생각
s3 = set([1, 3, 5, 7]) # list -> set
print(s3)
print(type(s3))
li4 = [1, 2, 3, 4]
print(type(li4))
s4 = set(li4) # list -> set
print(s4)
print(type(s4))
s5 = {1, 3, 5, 3, 7, 9, 1, 5, 10, 7} # 중복 자료 자동으로 날아감
print(s5)
li6 = [1, 3, 5, 3, 7, 9, 1, 5, 10, 7]
print(li6)
s6 = set(li6)
print(s6)
2. 세트의 메소드
- add() : 순서 상관 없이 세트의 요소를 추가
s1 = {1, 3, 5, 7}
s1.add(2)
s1.add(4)
s1.add(7)
print(s1) # {1, 2, 3, 4, 5, 7}
- update() : 세트에 여러 요소를 추가
s1 = {1, 3, 5, 7}
s1.update([2, 4, 6, 8, 10])
print(s1) # {1, 2, 3, 4, 5, 6, 7, 8, 10}
- remove() : 세트의 요소를 제거. 단 요소가 없으면 에러 발생
s1 = {1, 3, 5, 7}
s1.remove(3)
print(s1)
# s1.remove(3) # KeyError: 3
- discard() : 세트의 요소를 제거. 단 요소가 없어도 에러 발생하지 않음
s1 = {1, 3, 5, 7}
s1.discard(3)
print(s1) # {1, 5, 7}
s1.discard(3)
print(s1) # {1, 5, 7}
- copy() : 세트를 복사
s1 = {1, 3, 5, 7}
s2 = s1 # 메모리 주소를 복사 (같은 주소를 가리킴)
print(id(s1)) # id() : 메모리 주소 반환
print(id(s2))
s2 = s1.copy() # 값을 복사 (s1 set를 복사해서 다른 메모리 주소에 만들어서 s2가 가리키도록 만듦)
print(s1)
print(s2)
print(id(s1))
print(id(s2))
- union() : 합집합을 계산하여 반환
s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}
result1 = s3.union(s4)
print(result1) # {70, 40, 10, 50, 20, 60, 30}
result2 = s3 | s4 # set or set (| 연산도 동일한 결과)
print(result2) # {70, 40, 10, 50, 20, 60, 30}
- intersection() : 교집합을 계산하여 반환
result1 = s3.intersection(s4)
print(result1) # {40, 50, 30}
result2 = s3 & s4 # set and set (& 연산도 동일한 결과)
print(result2) # {40, 50, 30}
- difference() : 차집합을 계산하여 반환
result1 = s3.difference(s4)
print(result1) # {10, 20}
result2 = s3 - s4
print(result2) # {10, 20}
- symmetric_difference() : 대칭 차집합을 계산하여 반환
result1 = s3.symmetric_difference(s4)
print(result1) # {20, 70, 10, 60}
result2 = s3 ^ s4
print(result2) # {20, 70, 10, 60}
# 딕셔너리
- key-value 쌍을 저장하는 순서 없는 변경 가능한(mutable) 컬렉션
(Python 3.7 이전까지는 순서없음. 3.7이후는 입력 순서를 유지하지만 '논리적으로는' 순서없음으로 간주) - 딕셔너리는 중괄호 {}를 사용하여 생성
- 키-값 쌍들은 쉼표(,)로 구분
- 각 키-값 쌍은 콜론(:)으로 구분
1. 딕셔너리 만들기
dic1 = {}
print(dic1) # {}
print(type(dic1)) # <class 'dict'>
dic2 = {1:'김사과', 2:'반하나', 3:'오렌지', 4:'이메론'}
print(dic2)
print(type(dic2))
print(dic2[1]) # 김사과
print(dic2[3]) # 오렌지
dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
# key를 string으로 (중복만 아니면 됨)
print(dic3) # {'no': 1, 'userid': 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
print(dic3['userid']) # apple
print(dic3['hp']) # 010-1111-1111
2. 딕셔너리 수정하기
- 딕셔너리에 키-값 쌍을 추가, 삭제, 변경 가능
- 단, 딕셔너리의 키는 변경 불가능한 (immutable) 타입 (기본형4가지 + 튜플)
ex. 문자열, 정수, 튜플은 딕셔너리의 키로 사용가능. 리스트는 키로 사용 불가능 - 하지만 딕셔너리의 값은 어떤 타입이든 상관 없음
dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3)
# 추가
# 해당 key의 값 없으면 새로 생성
dic3['gender'] = 'female'
print(dic3)
# 변경
dic3['no'] = 10
print(dic3)
# 추가 (리스트)
dic3['score'] = [100, 90, 40]
print(dic3)
# 삭제
del dic3['no']
print(dic3)
# key에 list 사용하면? -> 불가능
# TypeError: unhashable type: 'list'
# dic3[[10, 20, 30]] = ['십', '이십', '삼십']
# key에 tuple 사용하면? -> 가능
dic3[(10, 20, 30)] = ['십', '이십', '삼십']
print(dic3)
dic3['과일'] = {'사과':'🍎', '딸기':'🍓', '수박':'🍉'}
print(dic3)
# key에 dict 사용하면? -> 불가능
# TypeError: unhashable type: 'dict'
# 어쨋든 value 값이 수정가능하기 때문에
# dic3[{'자동차':'car'}] = ['아반떼', '소나타', '그랜져']
3. 함수와 메서드
- keys() : 딕셔너리의 모든 키 반환
- values() : 딕셔너리의 모든 값 반환
- items() : 딕셔너리의 모든 키-값을 튜플로 반환
dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3)
print(dic3.keys()) # dict_keys(['no', 'userid', 'name', 'hp'])
print(dic3.values()) # dict_values([1, 'apple', '김사과', '010-1111-1111'])
print(dic3.items()) # dict_items([('no', 1), ('userid', 'apple'), ('name', '김사과'), ('hp', '010-1111-1111')])
- get() : 특정 키에 대한 값을 반환. 만약 키가 없으면 None 반환
None을 치환할 수 있는 문자열 설정 가능
dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print(dic3['useris'])
# print(dic3['gender']) # KeyError : 'gender' (없는 key는 에러나겠죠?)
print(dic3.get('userid') # apple
print(dic3.get('gender') # None
print(dic3.get('gender', '성별 알수없음') # 성별 알수없음
print(dic3.get('name', '이름 알수없음') # 김사과 (해당 value 존재하면 출력)
- pop() : 특정 키에 대한 값을 제거하고 제거된 값을 반환. 키가 없다면 에러발생
temp = dic3.pop('hp') # 값만 반환하기 때문에 값을 temp 변수에 저장
print(dic3) # {'no':1, 'userid': 'apple', 'name': '김사과'}
print(temp) # 010-1111-1111
- in : 딕셔너리에 특정 '키'가 있는지 확인 (True or False로 반환)
dic3 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
print('hp' in dic3) # True
print('010-1111-1111' in dic3) # False (저건 value니까)
# 조건문
- 프로그램의 실행 흐름을 제어하기 위한 문법
- 기본적으로 if, elif, else를 사용하여 조건의 참과 거짓에 따라 다른 코드 실행 가능
- 또한 간단한 조건에 대해서 조건부 표현식을 사용해 한 줄로 값을 선택 가능
- Python 3.10부터는 match~case 문법을 활용한 구조적 패턴 매칭을 통해 값 뿐만 아니라 컬렉션 타입의 데이터 구조를 기준으로 분기 처리 가능
- 이처럼 상황에 따라 다양한 방식의 조건문을 제공하여 간단한 분기부터 복잡한 처리까지 유연하게 구현 가능
# if, elif, else
1. if문
- 가장 기본적인 조건문
- 특정 조건이 True일 경우에만 해당 불록 내의 코드 실행
- 조건 : True 또는 False로 평가될 수 있는 표현식
- 조건이 True로 평가되면 if문 바로 아래의 코드 블록이 실행
- 그렇지 않으면 그 코드 블록 건너뜀
if 조건:
실행할 코드
if True:
print('결과는 참입니다')
print('프로그램을 종료합니다')
if False:
print('결과는 참입니다') # 실행x
print('프로그램을 종료합니다')
if '안녕하세요':
print('결과는 참입니다')
print('프로그램을 종료합니다')
if '':
print('결과는 참입니다') # 실행x
print('프로그램을 종료합니다')
if '안녕하세요':print('결과는 참입니다')
print('프로그램을 종료합니다')
- 입력한 나이가 19 초과일 경우, '성인입니다 입력한 나이 : 20'
- 입력한 나이가 19 이하일 경우, '입력한 나이 : 15'
- if 아래의 블록을 실행하는 것이기 때문에 여러 코드가 있으면 여러 코드 실행
age = int(input('나이를 입력하세요: '))
if age > 19:
print('성인입니다')
print('넷플릭스 성인영화를 감상할 수 있습니다')
print('입력한 나이: ', age)
2. else문
- 조건문에서 특정 조건이 충족되지 않을 때 실행할 코드 블록을 정의
if 조건:
코드 블록1 # True
else:
코드 블록2 # False
- 입력한 나이가 19 초과일 경우, '성인입니다 넷플릭스 성인영화를 감상할 수 있어요 입력한 나이 : 20'
- 입력한 나이가 19 이하일 경우, '미성년입니다 디즈니플러스를 보세요 입력한 나이 : 18'
age = int(input('나이를 입력하세요'))
if age > 19:
print('성인입니다')
print('넷플릭스 성인영화를 감상할 수 있어요')
else:
print('미성년입니다')
print('디즈니플러스를 보세요')
print('입력한 나이: ', age)
- 로그인 프로그램 만들기
- 아이디 : admin, 비밀번호 : 1234
- 잘못된 아이디 또는 비밀번호 입력한 경우, '아이디 또는 비밀번호를 확인하세요'
- 올바른 아이디와 비밀번호 입력한 경우, '로그인 되었습니다'
userid = input('아이디를 입력하세요')
userpw = input('비밀번호를 입력하세요')
if userid == 'admin' and userpw == '1234':
print('로그인 되었습니다')
else:
print('아이디 또는 비밀번호를 확인하세요')
- 주민등록번호에 의한 성별을 판별하는 프로그램 만들기
- 0010113068518
- 인덱스 6이 1 | 3 | 5 | 7 | 9 일 경우, '남자'
- 인덱스 6이 그 외의 숫자일 경우, '여자'
juminNo = input('주민등록번호 13자리를 -없이 입력하세요')
if juminNo[6] == '1' or juminNo[6] == '3' or juminNo[6] == '5' or juminNo[6] == '7' or juminNo[6] == '9':
print('남자')
else:
print('여자')
- 입력받은 문자열의 길이가 3 미만일 경우, '아이디가 너무 짧습니다. (입력한 글자 수 : 2)'
- 입력받은 문자열의 길이가 3 이상일 경우, '아이디 admin는 사용 가능합니다.'
text = input("아이디를 입력하세요: ")
# length = len(text)
# if length < 3:
if (length := len(text)) < 3:
print(f"아이디가 너무 짧습니다. (입력한 글자 수: {length})")
else:
print(f"아이디 '{text}'는 사용 가능합니다.")
* 왈러스 연산자 :=
- 값의 할당과 동시에 그 값을 표현식 안에서 사용 가능하도록 해주는 할당 표현식(assignment expression)
- 기존에는 값을 변수에 저장한 뒤 다시 사용하는 두 단계 과정이 필요했지만
:= 연산자를 사용하면 조건문, 반복문, 컴프리헨션 등에서 값을 한 번 계산하면서 변수에 저장하고 바로 활용할 수 있어 더 간결해짐
3. elif문
- if-else 구조에서 추가적인 조건 검사를 하기 위해 사용
- else if의 줄임말
- 주어진 여러 조건 중에서 하나만 참일 때 실행되는 코드 블록을 정의
- if 없이 단독으로 사용 불가능
- 필요에 따라 여러 번 사용 가능
- else는 선택적. 사용될 경우 항상 if나 elif 뒤에 오도록.
if 조건1:
코드 블록1
elif 조건2:
코드 블록2
elif 조건3:
코드 블록3
else:
코드 블록4
age = int(input("나이를 입력하세요: "))
if age > 19:
print("성인입니다")
elif age > 14:
print("청소년입니다")
elif age > 6:
print("어린이입니다")
elif age > 0:
print("유아입니다")
# else:
# print("입력을 확인하세요')
print("입력한 나이: ", age)
- 중첩도 가능
print("MBTI 간단 성격 유형 검사에 오신 걸 환영합니다!")
# 첫 번째 질문: 외향/내향
answer1 = input("Q1. 새로운 사람들과 만나는 걸 좋아하시나요? (y/n): ")
if answer1.lower() == 'y': # .lower() : 소문자로
# 외향형으로 진행
print("외향형으로 분석 중...")
answer2 = input("Q2. 주변 환경에 대해 자주 인지하고 있나요? (y/n): ")
if answer2.lower() == 'y':
# 감각형(외향, 감각)
answer3 = input("Q3. 계획을 세우는 것을 좋아하시나요? (y/n): ")
if answer3.lower() == 'y':
print("당신의 성격 유형은 ESTJ입니다!")
else:
print("당신의 성격 유형은 ESFP입니다!")
else:
# 직관형(외향, 직관)
answer3 = input("Q3. 큰 그림을 보는 것을 좋아하시나요? (y/n): ")
if answer3.lower() == 'y':
print("당신의 성격 유형은 ENFP입니다!")
else:
print("당신의 성격 유형은 ENTJ입니다!")
else:
# 내향형으로 진행
print("내향형으로 분석 중...")
answer2 = input("Q2. 구체적인 정보나 사실을 중요하게 생각하시나요? (y/n): ")
if answer2.lower() == 'y':
# 감각형(내향, 감각)
answer3 = input("Q3. 일정을 엄격하게 관리하는 것을 좋아하시나요? (y/n): ")
if answer3.lower() == 'y':
print("당신의 성격 유형은 ISTJ입니다!")
else:
print("당신의 성격 유형은 ISFP입니다!")
else:
# 직관형(내향, 직관)
answer3 = input("Q3. 논리적인 문제 해결을 좋아하시나요? (y/n): ")
if answer3.lower() == 'y':
print("당신의 성격 유형은 INTP입니다!")
else:
print("당신의 성격 유형은 INFJ입니다!")
# if 여러 개 vs. if-elif-else
1. if-elif-else
- 조건을 위에서부터 검사하다가
- 처음 True가 나오면 그 이후는 전부 무시
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("F")
2. if 여러 번
- 각각 독립적으로 검사
- 여러 개가 동시에 실행될 수 있음
score = 85
if score >= 90:
print("A")
if score >= 80:
print("B")
if score >= 70:
print("C")
# 조건부 표현식 (Conditional Expression)
- 조건의 참과 거짓에 따라 값을 선택하는 한 줄짜리 조건문
- 간단한 분기 로직을 간결하게 표현
- 다만 조건이 복잡하거나 여러 줄의 처리가 필요한 경우 일반적인 if문 사용이 가독성 좋음
# if~elif~else로 작성
age = int(input('나이를 입력하세요'))
if age > 19:
print('성인입니다')
elif age > 14:
print('청소년입니다')
elif age > 6:
print('어린이입니다')
elif age > 0:
print('유아입니다')
else:
print('다시 입력해주세요')
print('입력한 나이: ', age)
# 조건부 표현식으로 작성
# 가독성👎
age = int(input('나이를 입력하세요'))
print('성인입니다') if age > 19 else print('청소년입니다') if age > 14 else print('어린이입니다') if age > 6 else print('유아입니다') if age > 0 else print('다시 입력해주세요')
# 구조적 패턴 매칭 match-case
- if-elif-else 구문을 좀 더 간결하게 만든 분기문
- Java/C의 switch-case와 비슷하지만 훨씬 더 강력한 기능
match 값:
case 패턴1:
실행할 코드1
case 패턴2:
실행할 코드2
case _:
기본 실행 코드 (default)
month = int(input("월을 입력하세요 (1~12): "))
match month:
case 1 | 3 | 5 | 7 | 8 | 10 | 12:
print(f"{month}월은 31일까지 있습니다.")
case 4 | 6 | 9 | 11:
print(f"{month}월은 30일까지 있습니다.")
case 2:
print("2월은 28일 또는 윤년이면 29일까지 있습니다.")
case _:
print("잘못된 월입니다. 1~12 사이의 숫자를 입력해주세요.")
- 리스트와 튜플은 서로 다른 타입이지만, 구조적 패턴 매칭에서는 "시퀀스 패턴"으로 인해 비슷하게 매칭 가능
- 타입을 명확히 구분하려면 list(), tuple() 패턴을 사용
# scores = [95, 88, 76] # 리스트
# scores = (95, 88, 76) # 튜플 (아래 설명 때문에 첫번째 case문에 걸림. 만약 요소 개수가 다르면 건너 뜀)
scores = {"국어":95, "영어":88, "수학":76} # 딕셔너리 (딕셔너리는 딕셔너리형으로)
match scores:
case [korean, english, math]: # 리스트
print(f"1. 국어: {korean}, 영어: {english}, 수학: {math}")
case (korean, _, math): # 튜플
print(f"2. 국어: {korean}, 수학: {math}")
case {"국어": korean, "영어": english, "수학": math}: # 딕셔너리
print(f"3. 국어: {korean}, 영어: {english}, 수학: {math}")
# scores = {"국어":95, "영어":88, "수학":76}
scores = [95, 88, 76]
# scores = (95, 88, 76)
match scores:
# 타입 먼저 구분
case list():
match scores:
case [korean, english, math]:
print(f"리스트 → 국어: {korean}, 영어: {english}, 수학: {math}")
case tuple():
match scores:
case (korean, _, math):
print(f"튜플 → 국어: {korean}, 수학: {math}")
case dict():
match scores:
case {"국어": korean, "영어": english, "수학": math}:
print(f"딕셔너리 → 국어: {korean}, 영어: {english}, 수학: {math}")
# 반복문
- 특정 코드를 여러 번 실행하기 위해 사용하는 제어문
- 대표적으로 for, while문
- for문은 iterable(리스트, 문자열 등) 객체의 요소를 순차적으로 반복할 때 사용
- while문은 조건이 True인 동안 계속 실행
- 또한 break, continue를 통해 반복 흐름 제어 가능
- 들여쓰기를 통해 반복 범위 구분
# while문
- 주어진 조건이 참인 동안 반복적으로 코드 블록을 실행
- 조건이 거짓이 되면 반복을 멈춤
- 조건은 결과가 참 또는 거짓이 될 수 있는 표현식
- 조건이 참일 때 코드 블록이 실행된 후 다시 조건을 검사. 이 과정을 조건이 거짓일 될 때까지 반복
while 조건:
조건이 참인 동안 실행될 코드
while True:
print('Hello Python') # 무한루프
while False:
print('Hello Python')
i = 1
while i <= 5:
print('Hello Python')
i += 1
# 1부터 10까지의 총합
i = 1
sum = 0
while i <= 10:
sum += i
i += 1
print(f'1부터 10까지의 합: {sum}')
# 1부터 100까지 짝수의 합
i = 1
sum = 0
while i <= 100:
if i % 2 == 0:
sum += i
i += 1
print(f'1부터 100까지의 짝수의 합: {sum}')
# for문
- 시퀀스(리스트, 튜플, 문자열 등) 각 항목에 대해 반복 작업 수행
- 지정된 범위 내에서 반복할 때 사용
- 반복할 요소들이 미리 정해져 있는 경우 유용
- 요소: 반복할 시퀀스의 각 항목이 for 문의 실행 도중에 할당되는 변수
for 요소 in 시퀀스:
요소에 대한 작업 수행
for s in "Hello":
print(s)
list1 = [10, 20, 30, 40]
for li in list1:
print(li)
# score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 확인
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
count = 0
for i in score:
if i >= 60:
count += 1
print(f'60점 이상인 학생의 수는 {count}명입니다')
# 리스트에서 길이가 5 이상인 문자열만 출력
words = ["apple", "hi", "banana", "go", "mango"]
for word in words:
if (length := len(word)) >= 5:
print(f"{word} (길이: {length})")
* 튜플을 은근히 많이 사용함
* 딕셔너리는 내부적으로 set으로 구성. 즉 key에 중복 값이 들어온다고 에러나는 것이 아니라 원래 있던 값을 변경하도록 함
* 딕셔너리 많이 사용하니까 잘 익히기
* if-else문 : 조건의 범위가 존재할 때 (ex. 성적 90~100, 80~89 ...)
* match-case문 : 값이 딱 일치하는 것이 존재할 때 (ex. 1~12월 운세)
* AI는 패턴 분석에서 왔다고 볼 수 있음. 패턴 분석으로 어떤 것을 유추해내는 것.
'KDT > 1. Python' 카테고리의 다른 글
| [7일차] 사용자정의함수, 객체지향프로그래밍(캡슐화, 상속) (0) | 2026.05.28 |
|---|---|
| [6일차] 제어문(반복문), 사용자 정의 함수(함수 생성, 전역변수, 지역변수) (0) | 2026.05.27 |
| [4일차] 입출력, 연산자, 컬렉션타입(리스트) (0) | 2026.05.26 |
| [3일차] 변수, 자료형, 문자열 다루기 (0) | 2026.05.21 |
| [2일차] Python 개발환경 구축 (0) | 2026.05.20 |