함수와 함꼐 많이 사용되는 리스트와 비슷한 자료형으로, 리스트와 다른점은 한번 결정된 요소를 바꿀 수 없다.
>>> tuple_test=(10,20,30)
>>> tuple_test[0]
10
>>> tuple_test[1]
20
>>>
여기서 tuple_test[0]=50이렇게 값을 변경하려고 하면 에러가 발생한다. 다시 말하지만, 튜플은 내부요소 변경이 불가능하다.
+)튜플 요소를 하나만 선언하는 경우 꼭! 뒤에 쉼표를 넣어야 한다. 쉼표가 없으면 튜플로 인식하지 않는다.
ex) (273,)
#리스트와 튜플의 특이한 사용
[a,b]=[10,20] //이와 같은 형태로 변수를 선언하고 할당할수 있다.
(c,d)=(10,20)
#출력합니다
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
[a,b]=10,20=(10,20)
리스트와 튜플은 이와 같은 형태로 변수를 선언하고 할당할 수 있다.
그런데! 튜플은 특이하게 튜플로 인식할 수 있는 경우는 괄호를 생략해도 된다.!
# 괄호가 없는 튜플
tuple_test=10,20,30,40
print('#괄호가 없는 튜플의 값과 자료형 출력')
print('tuple_test:',tuple_test)
print('type(tuple_test):',type(tuple_test))
print()
#괄호가 없는 튜플 활용
a,b,c=50,60,70
print('괄호가 없는 튜플을 활용한 할당')
print('a:',a)
print('b:',b)
print('c:',c)
a,b=10,20
print('교환전값')
print('a:',a)
print('b:',b)
print()
#값을 교환합니다 값을 바꾸는 거 아님 원래 있던 두개를 바꾸는거
a,b=b,a
print('교환후 값')
print('a:',a)
print('b:',b)
print()
편리하게 사용할 수 있는 값교환 방법:a,b=b,a
튜플은 함수의 리턴에 많이 사용한다: 튜플을 사용하면 여러개의 값을 한번에 리턴할 수 있기 때문
#함수를 선언합니다.
def test():
return(10,20)
#여러 개의 값을 리턴 받습니다.
a,b=test()
#출력합니다.
print('a:',a)
print('b:',b)
+) 튜플도 리스트처럼 +나 * 연산자를 사용가능하나 거의 사용하지 않는다.
-> 괄호없이 여러값을 할당할 수 있다는 점 기억하기!
#랜덤한 숫자를 만들기 위해 가져옵니다.
import random
#간단한 한글 리스트를 가져옵니다
hanguls=list("가나다라마바사아자차카타파하")
#파일을 쓰기모드로 엽니다
with open("info.txt",'w') as file:
for i in range(1000):
#랜덤한 값으로 변수를 생성합니다.
name=random.choice(hanguls)+random.choice(hanguls)
weight= random.randrange(40,100)
height= random.randrange(140,200)
#텍스트를 씁니다
file.write("{},{},{}\n".format(name,weight,height))
with open("info.txt",'r') as file:
for line in file:
(name,weight,height)=line.strip().split(",")
#데이터에 문제가 있는지 없는지 확인합니다. 문제가 있으면 지나감
if(not name) or (not weight)or(not height):
continue
#결과를 계산합니다
bmi=int(weight)/((int(height)/100)**2)
result=""
if 25<=bmi:
result='과체중'
elif 18.5<=bmi:
result='정상체중'
else:
result='저체중'
#출력합니다
print('\n'.join([
'이름:{}',
'몸무게:{}',
'키:{}',
'bmi:{}',
'결과:{}'
]).format(name,weight,height,bmi,result))
print()
numbers=list(range(1,10+1))
print('홀수만 추출하기')
print(list(filter(lambda x: x%2 == 1,numbers)))
print()
print('3이상 7미만 출력하기')
print(list(filter(lambda x: 3<=x<7,numbers)))
print()
print('제곱해서 50미만 추출하기')
print(list(filter(lambda x:x*x<50,numbers)))
괄호 주의해서 작성하기