1. 튜플
여러 가지 데이터 타입의 값을 저장할 수 있는, 변경 불가능(immutable)한 순서가 있는 컬렉션이다.
한번 들어간 요소는 변경이 불가능하다. 튜플은 소괄호() 를 이용해서 사용한다.
1-1. 튜플의 사용
tu1 = (1,) # 요소가 1개일 경우 끝에 컴마를 붙여야함
print(tu1)
print(type(tu1))
결과:
(1,)
<class 'tuple'>
요소가 1개일 경우 끝에 컴마를 붙여야 튜플이 된다.
tu2 = (1, 3, 5, 7)
print(tu2)
print(type(tu2))
결과:
(1, 3, 5, 7)
<class 'tuple'>
값이 여러개 일경우 끝에 컴마를 붙이지 않아도 됨.
tu3 = tuple([1, 3, 5, 7])
print(tu3)
print(type(tu3))
결과:
(1, 3, 5, 7)
<class 'tuple'>
튜플 소괄호 안에 대괄호 를 이용하여 만들수도 있다.
tu4 = 1, 3, 5, 7
print(tu4)
print(type(tu4))
결과:
(1, 3, 5, 7)
<class 'tuple'>
소괄호를 쓰지 않아도 튜플이된다.
tu5 = ('apple', 'banana', ('🍓','🍎'))
print(tu5)
print(tu5[0])
print(tu5[2][0])
print(type(tu5))
print(type(tu5[2]))
print(type(tu5[2][0]))
결과:
('apple', 'banana', ('🍓', '🍎'))
apple
🍓
<class 'tuple'>
<class 'tuple'>
<class 'str'>
위와 같이 리스트 처럼 사용할 수도 있다.
tu5 = ('apple', 'banana', ('🍎','🍓'))
tu5[0] = 'orange'
결과:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-3970025b24bb> in <cell line: 2>()
1 tu5 = ('apple', 'banana', ('🍎','🍓'))
----> 2 tu5[0] = 'orange'
TypeError: 'tuple' object does not support item assignment
튜플은 요소를 변경 할수 없기때문에 변경하려 하면 에러가난다.
tu5 = ('apple', 'banana', ('🍎','🍓'))
tu5 = 'orange'
print(type(tu5))
결과:
orange
<class 'str'>
튜플의 메모리 자체를 바꾸는것은 가능하다.
tu5 = ('apple', 'banana', ['🍎','🍓'])
print(tu5)
print(tu5[2][0])
tu5[2][0] = '🍗'
print(tu5)
결과:
('apple', 'banana', ['🍎', '🍓'])
🍎
('apple', 'banana', ['🍗', '🍓'])
튜플안에 리스트를 넣는것도 가능하고 리스트안의 값은 변경이 가능하다.
tu5 = ('apple', 'banana', ['🍎','🍓'])
print(tu5)
print(tu5[2][0])
tu5[2][0] = '🍗'
print(tu5)
tu5[2] = '🍢'
결과:
('apple', 'banana', ['🍎', '🍓'])
🍎
('apple', 'banana', ['🍗', '🍓'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-4a675a804e3f> in <cell line: 7>()
5 print(tu5)
6
----> 7 tu5[2] = '🍢'
TypeError: 'tuple' object does not support item assignment
하지만 위의 코드는 리스트안의 값이 아닌 튜플 안의 리스트 를 변경하는 것 이기 때문에 불가능하다.
*1-2. 인덱싱 *
#인덱싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[0])
print(tu1[-1])
결과:
1
banana
1-3. 슬라이싱
#슬라이싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[1:])
print(tu1[1:3])
결과:
(2, 'apple', 'banana')
(2, 'apple')
리스트와 같이 인덱싱과 슬라이싱 또한 가능하다.
1-4. 결합
#결합
tu1 = (10, 20, 30)
tu2 = (40, 50, 60)
print(tu1 + tu2)
print(tu2 + tu1)
결과:
(10, 20, 30, 40, 50, 60)
(40, 50, 60, 10, 20, 30)
결합 또한 가능 하다는것을 볼수있다.
1-5. 변경
tu1 = tu1 + (40, 50)
print(tu1)
print(tu1 * 3)
결과:
(10, 20, 30, 40, 50)
(10, 20, 30, 40, 50, 40, 50, 10, 20, 30, 40, 50, 40, 50, 10, 20, 30, 40, 50, 40, 50)
메모리 요소를 바꾸는것이 아닌 메모리 주소를 바꾸는것은 가능하며, 반복하여 출력하는것도 가능하다.
1-6. 연산
tu3 = (10, 20, 30)
print(tu3[0] + tu3[2])
결과:
40
요소를 더한값을 출력하는것은 가능하다.
1-7. 여러함수에 값 담기
apple, banana, orange = ('김사과', '반하나', '오렌지')
print(apple)
print(banana)
print(orange)
결과:
김사과
반하나
오렌지
튜플을 이용하면 위 처럼 여러함수에 순서대로 값을 넣을수 있다.(리스트도 가능하지만 튜플을 많이 사용한다)
apple, banana, orange = '김사과', '반하나', '오렌지'
print(apple)
print(banana)
print(orange)
결과:
김사과
반하나
오렌지
괄호를 사용하지 않아도 튜플로 담을수 있다.
1-8. in연산자
print(2 in (2, 4, 6, 8, 10))
print(3 in (2, 4, 6, 8, 10))
결과:
True
False
in 연산자를 이용하여 내가 원하는 값이 튜플 안에 있는지 True, False 로 알수있다.
1-9. 정렬
tu1 = (10, 30, 20, 70)
tu1.sort()
결과:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-36-5eed31d2fddc> in <cell line: 2>()
1 tu1 = (10, 30, 20, 70)
----> 2 tu1.sort()
AttributeError: 'tuple' object has no attribute 'sort'
tuple 에는 sort메서드가 존재하지 않는다.(튜플은 요소들의 위치가 바뀌면 값이 바뀌는 것 이기 때문에 sort로 정렬이 불가능하다.)
tu1 = (10, 30, 20, 70)
tu1 = sorted(tu1)
print(tu1)
tu1 = tuple(tu1)
print(type(tu1))
결과:
[10, 20, 30, 70]
sorted 함수로 다른 변수에 저장해서 정렬 할수는 있지만 list타입으로 반환이 되기 때문에 다시 tuple타입으로 변경 해주어야한다.
2.input 함수
- 사용자 에게 데이터를 입력받을 수 있는 함수
- 데이터는 항상 문자형(str)으로 입력된다.
2-1. input 입력받기.
name = input()
입력: 김사과
print(name)
결과:
김사과
name = input('이름을 입력하세요')
이름을 입력하세요 : 김사과
print(f'{name}님 안녕하세요!')
결과:
김사과님 안녕하세요!
입력을 받는 칸에 메세지를 작성할수있다.
2-2.여러함수 입력받기
# 김사과 20 50
# '김사과 20 50' -> ['김사과', '20', '50']
# name, age, weight = ['김사과', '20', '50']
name, age, weight = input('이름, 나이, 몸무게를 띄어쓰기로 구분하여 입력하세요').split(' ')
이름, 나이, 몸무게를 띄어쓰기로 구분하여 입력하세요 : 김사과 20 50
print(name, age, weight)
결과:
김사과 20 50
input 은 문자열 로 저장되기 때문에 문자열 함수도 이용이 가능하다.(split 을 이용하여 여러 함수를 저장하면 리스트 형식으로 저장이 된다.)
2-3.input 연산
num1 = input('첫번째 숫자를 입력하세요')
num2 = input('두번째 숫자를 입력하세요')
print('결과: ', num1 + num2)
첫번째 숫자를 입력하세요: 10
두번째 숫자를 입력하세요: 5
결과: 105
num1 = input('첫번째 숫자를 입력하세요')
num2 = input('두번째 숫자를 입력하세요')
print('결과: ', int(num1) + int(num2))
첫번째 숫자를 입력하세요: 10
두번째 숫자를 입력하세요: 5
결과: 15
3. 문제
- 국어점수, 영어점수, 수학점수를 입력받아 총점, 평균을 구하는 프로그램을 작성해보다
- 단, 입력방법은 100/70/85 형태로 입력
국어점수, 영어점수, 수학점수 = input('점수를 입력하세요.').split('/')
total = int(국어점수) + int(영어점수) + int(수학점수)
avg = total / 3
print(f'총점: {total}\n평균: %.2f' % (avg))
점수를 입력하세요.: 100/80/85
총점: 265
평균: 88.33
국어점수, 영어점수, 수학점수 = list(map(int,input().split('/')))
total = 국어점수 + 영어점수 + 수학점수
avg = total / 3
print(f'총점: {total}\n평균: %.2f' % (avg))
100/70/85
총점: 255
평균: 85.0
map함수 을 이용하면 입력을 받을때 int타입 으로 입력을 받을수있다.