
7. 튜플(Tuple)
7-1. 정의
리스트와 거의 유사.
리스트는 대괄호로 자료를 묶고, 튜플은 소괄호로 자료를 묶음.
데이터 안의 요소의 수정, 삭제가 불가능.
값의 변경을 원하지 않은 경우에 오류를 최소화하는 목적으로 사용
tu2 = (1,3,5,7) # 정상적인 튜플의 사용법
print(tu2)
(1, 3, 5, 7)
tu3 = 1,3,5,7 # 소괄호가 없지만, 튜플이다.
print(tu3)
print(type(tu3))
(1, 3, 5, 7)
<class 'tuple'>
tu4 = ('apple', 'banana', ('🍓','🍉')) # 이차원 튜플의 예시
print(tu4)
('apple', 'banana', ('🍓','🍉'))
tu5 = ('apple', 'banana', ['🍓','🍉'])
print(tu5) # 튜플 안에 리스트로 저장이 가능
print(type(tu5)) # 튜플로 감쌌기 때문에 type은 튜플
('apple', 'banana', ['🍓', '🍉'])
<class 'tuple'>
7-2. 튜플의 수정 및 삭제
tu6 = (1,2, 'apple', 'banana')
print(tu6[2]) # 인덱싱을 접근할 때 대괄호를 사용하는 부분은 리스트와 같음
tu6[2] = 'orange'
print(tu6[2]) # 데이터 안의 요소의 수정이 불가능해 출력 시 오류가 발생.
TypeError: 'tuple' object does not support item assignment
del tu6[2]
print(tu6) # 데이터 안의 요소의 삭제가 불가능해 출력 시 오류가 발생.
TypeError: 'tuple' object doesn't support item deletion
del tu6
print(tu6) # 튜플 전체 삭제는 가능함.
tu7 = ('apple', 'banana', ['🍓','🍉'])
tu7[2][0] = '🍋'
print(tu7)
# 예외로 튜플 안에 리스트가 있다면 이 리스트 안의 데이터의 수정, 삭제는 가능.
# 그러나 튜플 안의 전체 리스트에 대한 수정은 불가능.
('apple', 'banana', ['🍋', '🍉'])
tu8 = ('apple', 'banana', ['🍓','🍉'])
tu8 = '🍗'
print(tu8) # 요소를 변경하는 것이 아니기 때문에 변경이 가능함.
🍗
7-3. 튜플의 인덱싱과 슬라이싱 연산
tu9 = (1,2, 'apple', 'banana')
# 인덱싱
print(tu9[0])
print(tu9[-1]) # 리스트와 동일
1
banana
# 슬라이싱
print(tu9[1:])
print(tu9[1:3]) # 리스트와 동일
(2, 'apple', 'banana')
(2, 'apple')
# 덧셈
tu10 = (30, 40)
print(tu9 + tu10) # 리스트와 동일한 연결연산
(1, 2, 'apple', 'banana', 30, 40)
# 곱셈
print(tu9 * 3) # 리스트와 동일한 반복연산
(1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana')
# 요소의 갯수
print(len(tu9))
4
7-4. 튜플의 정렬
tu11 = (1,3,2,0)
tu11.sort() # 튜플은 sort()함수를 사용할 수 없음. 출력 시 오류가 발생.
AttributeError: 'tuple' object has no attribute 'sort'
tu12 = sorted(tu11) # 대신, sorted()함수를 사용할 수 있음.
print(tu12)
[0, 1, 2, 3]
8. 제어문(조건문)
8-1. 제어문
프로그램의 흐름을 제어하는 문장. (조건문, 반복문이 있음)
8-2. 조건문
8-2-1. 비교연산자
'부등호'(<, >, <=, >=, ==, !=)를 사용.
비교연산자의 결과는 항상 bool형으로 반환됨.
print(10 > 5)
print(10 < 5)
print(10 >= 5)
print(10 <= 5)
print(10 == 5)
print(10 != 5)
True
False
True
False
False
True
8-2-2. if문
if 조건식(결과가 True 또는 False가 나오는 문장): 조건식이 True인 경우 실행할 문장 (백쿼트 3개를 이용하여 문법 작성이 가능) |
bool1 = True
if bool1:
print('결과는 참입니다.')
print('프로그램을 종료합니다.')
결과는 참입니다.
프로그램을 종료합니다.
bool2 = False
if bool2:
print('결과는 참입니다.') # if문의 bool2가 False이므로 해당 줄의 print는 출력되지 않음
print('프로그램을 종료합니다.')
프로그램을 종료합니다.
age = int(input('나이를 입력하세요: '))
if age > 19:
print('성인입니다')
print('입력한 나이: ', age)
나이를 입력하세요: 55
성인입니다
입력한 나이: 55
8-2-3. If ~ else문
if 조건식(결과가 True 또는 False가 나오는 문장): 조건식이 True인 경우 실행할 문장 ... else: 조건식이 False인 경우 실행할 문장 ... |
age = int(input('나이를 입력하세요 : '))
if age > 19:
print('성인입니다.')
print('넷플릭스 성인영화를 감상할 수 있습니다.')
else:
print('미성년입니다.')
print('디즈니를 보세요.')
print('입력한 나이 : ', age)
나이를 입력하세요 : -5
미성년입니다.
디즈니를 보세요.
입력한 나이 : -5
8-2-4. if ~ elif ~ else문
if 조건식1(결과가 True 또는 False가 나오는 문장): 조건식1이 True인 경우 실행할 문장 ... elif 조건식2 조건식2가 True인 경우 실행할 문장 ... elif 조건식3 조건식3이 True인 경우 실행할 문장 ... else: 모든 조건식이 False인 경우 실행할 문장 ... else는 필수 문장이 아님. |
age = int(input('나이를 입력하세요 : '))
if age > 19:
print('성인입니다.')
elif age > 14:
print('청소년입니다.')
elif age > 6:
print('어린이입니다.')
elif age > 0:
print('유아입니다.')
else:
print('입력을 확인하세요.')
print('입력한 나이 : ', age)
나이를 입력하세요 : 0
입력을 확인하세요.
입력한 나이 : 0
8-2-5. 산술 연산자
print (10 + 3)
print (10 - 3)
print (10 * 3)
print (10 / 3)
print (10 % 3) # 나머지
print (10 // 3) # 몫
print (10 ** 3) # 제곱
13
7
30
3.3333333333333335
1
3
1000
8-2-6. 삼항 연산자
결과가 True일 때 실행할 문장 if 조건식 else 결과가 False일 때 실행할 문장
(if와 else만 존재하는 한 줄짜리 문법)
num = int(input('숫자를 입력하세요 : '))
if num % 2 == 0:
print('짝수')
else:
print('홀수')
숫자를 입력하세요 : 53413
홀수
num = int(input('숫자를 입력하세요 : '))
print('짝수') if num % 2 == 0 else print('홀수') # 삼항 연산자로 작성
숫자를 입력하세요 : 123
홀수
예제 1
국어점수, 영어점수, 수학점수를 입력받아 총점, 평균, 학점을 구하는 프로그램을 작성해보자.
단, 학점은 평균 기준이며 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D, 나머지는 F로 함.
kor,eng,math = input('국어, 영어, 수학 점수를 각각 입력하세요 : ').split(',')
print('총점 :', int(kor)+int(eng)+int(math))
print('평균 :', (int(kor)+int(eng)+int(math))/3)
a = (int(kor)+int(eng)+int(math))/3
if a >= 90:
print('학점 : A')
elif a >= 80:
print('학점 : B')
elif a >= 70:
print('학점 : C')
elif a >= 60:
print('학점 : D')
else:
print('학점 : F')
국어, 영어, 수학 점수를 각각 입력하세요 : 91,85,93
총점 : 269
평균 : 89.66666666666667
학점 : B
예제 2
숫자를 입력받아 2의 배수인지, 3의 배수인지 아니면 2,3의 배수가 모두 아닌지를 판별하는 프로그램을 작성해보자.
num = input('숫자를 입력하세요 : ')
if float(num) % 2 == 0:
if float(num) % 3 == 0:
print(f'{num}은 2와 3의 배수')
else:
print(f'{num}은 2의 배수')
elif float(num) % 3 == 0:
print(f'{num}은 3의 배수')
else:
print(f'{num}은 2,3의 배수가 모두 아니다.')
숫자를 입력하세요 : 12
12은 2와 3의 배수
8-2-7. 논리 연산자(AND)
양쪽 두 식의 값이 '모두' True인 경우 결과가 True가 되는 연산자.
A | B | 결과 |
True | True | True |
True | False | False |
False | True | False |
False | False | False |
예) 정보처리기사 자격을 취득하기 위해서는 모든 과목이 40점 이상, 평균이 60점 이상이 되어야 한다.
# 로그인 프로그램 만들기 (아이디 : admin, 비밀번호 : 1234)
userid = input('아이디를 입력하세요.')
userpw = input('비밀번호를 입력하세요.')
if userid == 'admin' and userpw == '1234':
print('로그인 되었습니다.')
else:
print('아이디 또는 비밀번호를 확인하세요.')
아이디를 입력하세요.admin
비밀번호를 입력하세요.1234
로그인 되었습니다.
8-2-8. 논리 연산자(OR)
양쪽 두 식의 값이 '하나라도' True 인 경우 결과가 True가 되는 연산자.
A | B | 결과 |
True | True | True |
True | False | True |
False | True | True |
False | False | False |
# 주민등록번호에 의한 성별을 판별하는 프로그램 만들기
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('성별 : 여자')
주민등록번호 13자리를 -없이 입력하세요123456789101
성별 : 남자
8-2-9. 논리 연산자(NOT)
bool의 값을 반대로 변경해주는 연산자
bool1 = True
if bool1:
print('결과는 참입니다.')
else:
print('결과는 거짓입니다.')
결과는 참입니다.
bool1 = True
if not bool1:
print('결과는 참입니다.')
else:
print('결과는 거짓입니다.')
결과는 거짓입니다.
9. 제어문(반복문)
9-1. 반복문
9-1-1. 자료형 T/F 판단
Python에서 사용하는 모든 자료형은 참/거짓으로 표현이 가능함.
bool1 = True
print(bool1)
print(type(bool1))
True
<class 'bool'>
num1 = 10
print(num1)
print(type(num1))
print(bool(num1))
10
<class 'int'>
True
num2 = 0
print(num2)
print(type(num2))
print(bool(num2))
0
<class 'int'>
False
# 0이 아닌 숫자는 모두 True, 0은 False
list1 = [1,2,3]
print(list1)
print(type(list1))
print(bool(list1))
[1, 2, 3]
<class 'list'>
True
list2 = [ ]
print(list2)
print(type(list2))
print(bool(list2))
[ ]
<class 'list'>
False
str1 = '안녕'
print(str1)
print(type(str1))
print(bool(str1))
안녕
<class 'str'>
True
str2 = ''
print(str2)
print(type(str2))
print(bool(str2))
<class 'str'>
False
[ ]
list1 = [1,3,5]
# 내용이 채워져 있으면 True, 비어있으면 False
9-1-2. 대입 연산자
= , += , -= , *= , /= , %=
왼쪽에 저장된 값과 오른쪽에 저장된 값을 연산한 뒤 다시 왼쪽에 대입 (in-place연산)
num = 10
num += 1 # 왼쪽 변에 저장된 값은 10, 오른쪽 변의 저장된 값은 1이다. 연산한 값인 11을 다시 왼쪽에 대입.
print(num)
11
num -= 1
print(num)
10
num *= 10
print(num)
100
num /= 10
print(num)
10.0
num %= 2 # 2로 나눈 나머지값을 구하는 연산
print(num)
0.0
9-1-3. while문
while 조건식: 조건식의 결과가 True인 동안 반복할 문장 |
while문과 for문은 완전히 다르게 생겼지만, 어떤 것을 써도 상관이 없음(편한대로 사용)
한꺼번에 주석처리 : 드래그해서 블록을 씌운 후 'Ctrl + /'
# 무한 루프
while True:
print('끝나지 않는 반복')
# i가 1부터 5까지 반복하는 동안 Hello Python을 계속해서 반환
i = 1
while i <=5 :
print('Hello Python')
i += 1
print(f'{i}')
Hello Python
Hello Python
Hello Python
Hello Python
Hello Python
6
# 1부터 10까지의 총 합
i = 1
sum = 0
while i <= 10:
sum += i # sum과 i를 더해서 다시 sum에 저장
i += 1
print(f'{sum}')
55
예제 1
1부터 100까지 짝수의 총 합을 구하는 프로그램을 작성해보자.
i = 1
sum = 0
while i <= 100:
if i % 2 == 0:
sum += i
i += 1
print(f'{sum}')
2550
예제 2
원하는 단을 입력받아 해당 단의 구구단을 출력하는 프로그램을 작성해보자.
num = int(input('원하는 단 : '))
i = 0
while i < 9:
i += 1
print(f'{num} * {i} = {int(num)*int(i)}')
원하는 단 : 6
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
9-1-4. for in 문
for 변수 in 이터러블(iterable)객체: 이터러블(iterable) 객체의 요소 갯수만큼 반복할 문장 |
list1 = [10,20,30,40] # 이터러블한 객체 예시
for li in list1: #list1 내부의 데이터들을 하나씩 뽑아서 li에 넣은 후 출력
print(li)
10
20
30
40
isinstance(확인하고자 하는 객체. collections.Iterable) : 이터러블한 객체인지를 확인 시 사용하는 함수.
collections.iterable이 객체를 판별해줌.
import collections
list1 = [10,20,30,40]
isinstance(list1, collections.Iterable)
True
range() : 범위를 생성해주는 함수
range(시작인덱스, 종료인덱스())
num = range(0, 10, 1) # 0에서 10이 되기 전까지 1씩 증가하는 데이터
print(num)
range(0, 10)
for i in num:
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
import collections
num = range(0, 10, 1)
isinstance(num, collections.Iterable)
True # False가 출력되면 for문 안에 사용할 수 없음
for i in range(0, 10, 1):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
for i in range(0, 10): # 증가값을 생략하면, 기본값은 1
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
for i in range(10): # 시작값을 생략하면, 기본값은 0. 종료값은 생략할 수 없음
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
예제
for in 문을 이용하여 1부터 100까지의 짝수의 총 합을 구하는 프로그램을 작성해보자.
sum = 0
for i in range(0,101,2):
sum += i
print(f'1부터 100까지 짝수의 총 합 : {sum}')
1부터 100까지 짝수의 총 합 : 2550
9-1-5. enumerate 객체
반복문 사용 시 몇 번째 반복인지를 인덱스 번호로 확인
인덱스 번호와 요소를 튜플 형태로 반환
li1 = [10, 20, 30, 40, 50]
for e in enumerate(li1):
print(e) # 튜플의 형태로 인덱스번호와 요소를 묶어서 반환해줌
(0, 10)
(1, 20)
(2, 30)
(3, 40)
(4, 50)
for i, v in enumerate(li1):
print(f'index:{i}, value:{v}') # 인덱스번호와 요소를 i값과 v값으로 받아서 반환해주는 경우
index:0, value:10
index:1, value:20
index:2, value:30
index:3, value:40
index:4, value:50