- [연습문제] 튜플(01)
- 자주 접속하는 웹사이트 비번을 튜플에 저장해보자!
passwds = ('password1234', 'abc123', 'qwerty', 'letmein', 'welcome00')
print(type(passwds))
- 대학생 길동이의 1, 2, 3학년의 성적은 다음과 같다.
졸업할 때 4.0이상의 학점을 받기 위해 길동이가 받아야 하는 4학년 1 2학기의 최소 학점을 구해보자!
scores = ((3.7, 4.2), (2.9, 4.3), (4.1, 4.2))
total = 0
for s1 in scores:
for s2 in s1:
total += s2
avg = round((total / 6), 1)
print(f'3학년 총학점 : {round(total, 1)}')
print(f'3학년 평균 : {avg}')
grade4TargetScore = round((4.0 * 8 - total), 1)
print(f'4학년 목표 총학점 : {grade4TargetScore}')
minScore = round((grade4TargetScore / 2), 1)
print(f'4학년 한 학기 최소학점 : {minScore}')
scores = list(scores)
scores.append((minScore, minScore))
print(f'scores : {scores}')
scores = tuple(scores)
print(f'scores : {scores}')
- [연습문제] 튜플(02)
- 다음 2개의 튜플에 대해서 합집합과 교집합을 출력해보자!
tuple1 = (1, 3, 2, 6, 12, 5, 7, 8)
tuple2 = (0, 5, 2, 9, 8, 6, 17, 3)
방법1
### 방법1 ###
tuple1 = (1, 3, 2, 6, 12, 5, 7, 8)
tuple2 = (0, 5, 2, 9, 8, 6, 17, 3)
tempHap = list(tuple1) # 수정을 위해 튜플을 리스트로 변경해 준다!
tempGyo = list()
for n in tuple2:
if n not in tempHap:
tempHap.append(n)
else:
tempGyo.append(n)
tempHap = tuple(tempHap) # 수정이 완료 되었으니 다시 튜플로 변경해 준다!
tempGyo = tuple(tempGyo)
print('합집합(중복X)\t: {}'.format(tempHap))
print('교집합\t: {}'.format(tempGyo))
방법2
### 방법2 ###
tuple1 = (1, 3, 2, 6, 12, 5, 7, 8)
tuple2 = (0, 5, 2, 9, 8, 6, 17, 3)
tempHap = tuple1 + tuple2 # + 로 합집합!
tempGyo = list()
tempHap = list(tempHap)
print(f'tempHap : {tempHap}')
print(f'tempGyo : {tempGyo}')
idx = 0
while True:
if idx >= len(tempHap):
break
if tempHap.count(tempHap[idx]) >= 2: # 2개 이상이라는 것은 중복이라는 것!
tempGyo.append(tempHap[idx])
tempHap.remove(tempHap[idx])
continue
idx += 1
print(f'tempHap : {tempHap}')
print(f'tempHap : {tuple(sorted(tempHap))}') # 정렬 + 튜플로 변환
print(f'tempGyo : {tuple(sorted(tempGyo))}')
- [연습문제] 튜플(03)
- 다음 튜플을 요구 사항에 맞춰 아이템을 슬라이스하자!
Index 0부터 3까지
Index 2부터 4까지
Index 3부터 끝까지
Index 2부터 뒤에서 -2까지
Index 0부터 끝까지 3단계
numbers = (8.7, 9.0, 9.1, 9.2, 8.6, 9.3, 7.9, 8.1, 8.3)
# Index 0부터 3까지
print(numbers[0:4])
# Index 2부터 4까지
print(numbers[2:5])
# Index 3부터 끝까지
print(numbers[3:])
# Index 2부터 뒤에서 -2까지
print(numbers[2:-2])
print(numbers[2:-1]) # -2까지니까 -1로 해야한다!
# Index 0부터 끝까지 3단계
print(numbers[::3])
# 최소값과 최대값을 구할 때!
print(f'최소값 : {min(numbers)}') # min()함수 사용!
print(f'최대값 : {max(numbers)}') # max()함수 사용!
# 최고값과 최대값의 인덱스를 알고 싶을 때!
print(f'최소값 인덱스 : {numbers.index(min(numbers))}') # index() 함수 사용!
print(f'최대값 인덱스 : {numbers.index(max(numbers))}') # max()함수 사용!
- 시험 점수를 입력한 후 튜플에 저장하고 과목별 학점을 출력해보자!
korScore = int(input('국어 점수 입력 : '))
engScore = int(input('영어 점수 입력 : '))
matScore = int(input('수학 점수 입력 : '))
sciScore = int(input('과학 점수 입력 : '))
hisScore = int(input('국사 점수 입력 : '))
scores = ({'kor':korScore},
{'eng':engScore},
{'mat':matScore},
{'sci':sciScore},
{'his':hisScore}
)
print(scores)
for item in scores:
for key in item.keys():
if item[key] >= 90:
item[key] = 'A'
elif item[key] >= 80:
item[key] = 'B'
elif item[key] >= 70:
item[key] = 'C'
elif item[key] >= 60:
item[key] = 'D'
else:
item[key] = 'F'
print(scores) # 튜플안에 있는 딕셔너리의 수정이므로 수정이 가능하다!
- [연습문제] 튜플(04)
- 다음 튜플의 과일 개수에 대해서 오름차순 및 내림차순으로 정렬해보자!
fruits = ({'수박':8}, {'포도':13}, {'참외':12}, {'사과':17}, {'자두':19}, {'자몽':15})
fruits = list(fruits) # 튜플은 변경, 수정이 불가하므로 리스트로 변경 해준다!
cIdx = 0 # current Index 현재 비교를 위해 선택되어 있는 녀석!
nIdx = 1 # next Index cIdx 뒤에 위치한 녀석으로 비교할 녀석
eIdx = len(fruits) -1 # 마지막 인덱스 값
flag = True
while flag:
curDic = fruits[cIdx] # cIdx가 0 이므로 curDic에 첫번째가 들어간다!
nextDic = fruits[nIdx]
# value값으로 비교를 해야하므로 value값을 꺼내보자!
curDicCnt = list(curDic.values())[0] # 해당 딕셔너리의 과일 개수
nextDicCnt = list(nextDic.values())[0] # 해당 딕셔너리의 과일 개수
if nextDicCnt < curDicCnt: # next가 cur보다 작으면 next를 앞으로!
fruits.insert(cIdx, fruits.pop(nIdx)) # 자리바꿈
nIdx = cIdx + 1
continue
nIdx += 1
if nIdx > eIdx: # 끝 인덱스까지 했으면 current Idx를 하나 올려준다!
cIdx += 1
nIdx = cIdx + 1
if cIdx == 5: # 끝까지 다 했으면 종료!
flag = False
print(tuple(fruits))
cIdx = 0 # current Index 현재 비교를 위해 선택되어 있는 녀석!
nIdx = 1 # next Index cIdx 뒤에 위치한 녀석으로 비교할 녀석
eIdx = len(fruits) -1 # 마지막 인덱스 값
flag = True
while flag:
curDic = fruits[cIdx] # cIdx가 0 이므로 curDic에 첫번째가 들어간다!
nextDic = fruits[nIdx]
# value값으로 비교를 해야하므로 value값을 꺼내보자!
curDicCnt = list(curDic.values())[0] # 해당 딕셔너리의 과일 개수
nextDicCnt = list(nextDic.values())[0] # 해당 딕셔너리의 과일 개수
if nextDicCnt > curDicCnt: # next가 cur보다 작으면 next를 앞으로!
fruits.insert(cIdx, fruits.pop(nIdx)) # 자리바꿈
nIdx = cIdx + 1
continue
nIdx += 1
if nIdx > eIdx: # 끝 인덱스까지 했으면 current Idx를 하나 올려준다!
cIdx += 1
nIdx = cIdx + 1
if cIdx == 5: # 끝까지 다 했으면 종료!
flag = False
print(tuple(fruits))
# 매우 어렵다 다시 꼭 복습!
매우 어렵다 다시 꼭 복습!
- [연습문제] 튜플(05)
- 학급별 학생 수를 나타낸 튜플을 이용해서, 요구 사항에 맞는 데이터를 출력하는 프로그램을 만들어보자!
전체 학생 수
평균 학생 수
학생 수가 가장 적은 학급
학생 수가 가장 많은 학급
학급별 학생 편차
studentCnt = ({'cls01':18},
{'cls02':21},
{'cls03':20},
{'cls04':19},
{'cls05':22},
{'cls06':20},
{'cls07':23},
{'cls08':17})
totalCnt = 0
minStdCnt = 0 # 가장 작은 학생수
minCls = '' # 가장 작은 학생수 학급
maxStdCnt = 0 # 가장 많은 학생수
maxCls = '' # 가장 많은 학생수 학급
deviation = [] # 편차
for idx, dic in enumerate(studentCnt): # 인덱스와 딕셔너리 뽑아내기
for k, v in dic.items(): # 딕셔너리의 아이템에서 key와 value뽑아내기
totalCnt += v # 총 학생수
if minStdCnt == 0 or minStdCnt > v: # 학생수 가장 작은! # minStdCnt 초기값이 0이므로 !
minStdCnt = v
minCls = k
if maxStdCnt < v: # 학생수 가장 많은!
maxStdCnt = v
maxCls = k
avgCnt = totalCnt / len(studentCnt)
print(f'전체 학생 수 : {totalCnt}')
print(f'평균 학생 수 : {avgCnt}')
print(f'학생 수가 가장 적은 학급 : {minCls}({minStdCnt})명')
print(f'학생 수가 가장 많은 학급 : {maxCls}({maxStdCnt})명')
# 편차 구하기
for idx, dic in enumerate(studentCnt):
for k, v in dic.items():
deviation.append(v -avgCnt)
print(f'학급별 학생 편차 : {deviation}')