오늘은 list, tuple, dictionaty에 대해 배워보겠습니다.
제대로 들어가기 전에 어제 배웠던 while를 복습해보겠습니다.
목차 | |
1. | while 복습 |
2. | list |
3. | tuple |
4. | dictionary |
5. | 느낀점 |
1. while 복습
바로 문제 하나를 풀어보면서 복습을 해보겠습니다.
- 사탕 자판기를 만드시오. (아래의 요구를 충족할 것)
1. 사탕의 재고는 10개이고 사탕 1개당 500원으로 판매한다.
2. 돈을 입력을 받으면 사탕 1개를 출력해주며
거스름돈이 많이 남으면 사탕을 더 구매할 수 있다.
3. 하나씩 구매할 때마다 재고가 하나씩 줄어들며 매출이 오른다.
4. 매번 구매할 때마다 사탕 재고 수를 알려주며 사탕 재고가 없어질 때까지 자판기를 반복한다.
- 풀이
먼저 입력된 금액이 부족할 때를 표현하자면 이렇게 됩니다.
if msg < money: # 입력된 금액 부족
print("금액이 부족합니다.")
거스름돈이 사탕 가격보다 높아야 사탕을 더 구매할 수 있으니 while을 이용해서 표현해야 합니다.
while changes >= money: # 거스름돈이 사탕 가격보다 높음
msg2 = input("더 구매하시겠습니까? (Y / N) >>")
if msg2.lower() == "y": # 사탕을 더 구매함
candy -= 1
print("사탕 1개 출력 (재고 > %d)" % candy)
changes = changes - money
print("거스름돈 : %d" % changes)
total = total + money
elif msg2.lower() == "n": # 사탕을 더 구매 안 함
print("거스름돈 : %d" % changes)
print("이용해 주셔서 감사합니다, 매출 : %d" % total)
나머지 필요한 부분까지 다 정리를 하면
candy = 10 # 사탕 개수
money = 500 # 사탕 가격
total = 0 # 매출
stop = 0 # 중단
while candy > 0 :
if stop == 1 :
break
msg = int(input("사탕 가격 %d원 >>" % money))
changes = msg - money
if msg < money: # 입력된 금액 부족
print("금액이 부족합니다.")
elif changes >= money:
candy -= 1
print("사탕 1개 출력 (재고 > %d)" % candy)
print("거스름돈 : %d" % changes)
total = total + money
while changes >= money: # 거스름돈이 사탕 가격보다 높음
msg2 = input("더 구매하시겠습니까? (Y / N) >>")
if msg2.lower() == "y": # 사탕을 더 구매함
candy -= 1
print("사탕 1개 출력 (재고 > %d)" % candy)
changes = changes - money
print("거스름돈 : %d" % changes)
total = total + money
elif msg2.lower() == "n": # 사탕을 더 구매 안 함
print("거스름돈 : %d" % changes)
print("이용해 주셔서 감사합니다, 매출 : %d" % total)
stop = 1
break
else: # 잘못 입력됨
print("잘못 입력되었습니다.")
stop = 1
break
else: # 사탕 -1
candy -= 1
print("사탕 1개 출력 (재고 > %d)" % candy)
print("거스름돈 : %d" % changes)
total = total + money
if candy <= 0 : # 사탕 재고 소진
print("사탕 재고 소진, 매출 : %d" % total)
print("종료")
이렇게 길게 정리가 됩니다.. 이렇게 생각을 오랫동안 하게 되는 문제를 풀게 되면
확실히 몰랐던 개념에 대해 잘 이해가 됩니다.
2. list
1. 변수 = list()
2. 리스트 안에는 어떠한 자료형도 포함할 수 있습니다.
크게 2가지 정도로 리스트에 대해서 말할 수 있습니다.
리스트를 사용해보면서 리스트 활용에 대해서 보이도록 하겠습니다.
# 리스트 기본 형식
a = []
b = [1,2,3,4,5]
c = ['a','b','c','d']
d = [1,2,'a','b']
e = [1,2,[3,4,5]]
# 리스트 인덱싱 슬라이싱 가능.
print(b[1] + b[2])
print(c[1] + c[2])
# print(d[1] + d[2]) -------- 에러(불가능)
print(e[2][0])
print()
print(b[:3])
print(b[3:])
print(e[2][:2])
# len(list) : list 총 길이
print(len(a1))
# 리스트 수정하기
a1[0] = 7
print(a1)
# 리스트 값 수정하기 del 객체요소
del a1[0]
print(a1)
그 다음으로는 리스트와 함께 쓰이는 명령어에 대해 알아보겠습니다.
◎ 요소 추가 - append
test = [1,2,3]
test.append(4)
test.append(5)
print(test)
◎ 리스트 정렬 - sort
test[0] = 7
print(test)
test.sort()
print(test)
◎ 리스트 뒤집기 - reverse
a = ['t','e','s']
a.reverse()
print(a)
◎ 인덱스 반환 - index
print(a.index('s'))
◎ 리스트 요소 삽입 - insert
a.insert(0, 10)
print(a)
◎ 리스트 요소 제거 - remove
a.remove('s') # 리턴 값이 없음
print(a)
◎ 리스트 요소 추출 - pop
print(a.pop(0)) # index 사용 가능. (번지 지정 가능)
print(a)
◎ 리스트에 포함된 요소의 개수 세기 - count
a = ['t','e','s','t']
print(a.count('t'))
print(a)
◎ 리스트 확장 - extend
a.extend(['b','c'])
print(a)
b = ['g','h','j']
a.extend(b)
print(a)
◎ 리스트 컴프리헨션
파이썬의 고유 기능입니다.
# [식 for 변수 in list]
# [식 for 변수 in list if 조건식]
예시를 하나 보여드리자면
result = [num for num in score if num >= 80]
# => socore에 있는 요소를 num으로 옮기는데 80이상이어야함
이렇게 표현할 수 있습니다.
이제 문제 하나를 풀어보겠습니다.
- 학생들의 점수를 입력 받아 리스트에 추가하고 점수는 n개만큼 입력하고, 리스트를 정렬하여 출력하며, 점수의 합계와 평균도 출력하고 점수가 80점 이상인 합격자의 수를 출력하시오.
# 준비
print("---------[ 점수 ]---------")
n = int(input("인원 수 >> ")) # 몇 명?
cut = int(input("합격 점수 >> ")) # 커트라인 몇 점?
sum = 0 # 합계
avg = 0 # 평균
score = [] # 리스트
# 점수 입력
while len(score) != n:
msg = int(input("점수 입력(남은 점수 %d개) >> " % ( n - (len(score) + 1 ))))
if msg > 100 or msg < 0 :
print("다시 입력")
else:
score.append(msg)
# 정리
score.sort() # 오름차순 정렬 > sort(reverse=True) 내림차순 정렬
score.reverse()
print(score)
print("---------[ 결과 ]---------")
list80 =[]
# 점수 출력
for i in score:
sum = sum + i
avg = sum / len(score)
if i >= cut : # 합격자 수
list80.append(i)
print("합계: %d점, 평균: %.2f점, 합격자: %d명" % (sum, avg, len(list80)))
3. tuple
튜플에 대해 정리하자면
1. 리스트와 거의 비슷합니다. (리스트 잠금 형태라고 생각하시면 됩니다.)
2. 리스트 [], 튜플 ()
3. 요소의 변경이 안 됩니다.
4. 인덱싱과 슬라이싱 가능합니다.
튜플보다는 리스트를 더 많이 이용하기에 따로 문제나 예시는 하지 않고 넘어가겠습니다.
4. dictionary
딕셔너리에 대해 정리하자면
# key value를 한 쌍으로 가지는 자료형
# {key:value, key:value, key:value ...}
# valu의 자료형은 제한이 없다.
# d = {}
이렇게 정리할 수 있습니다.
예제 하나를 보여드리겠습니다.
dic = {'hong':89, 'kim':97, 'pack':56, 'choi':84}
print(type(dic))
dic2 = {1:[1,2,3], 2:[4,5,6]}
(이제부터 보여드리는 개념들은 dic = {'hong':89, 'kim':97, 'pack':56, 'choi':84}를 생략하였습니다.)
◎ 값 추가 dic[key] = value
dic['lee'] = 99
print(dic)
dic2['kim'] = 99
print(dic)
del dic['lee']
◎ key 리스트 만들기 = keys()
print(dic.keys())
for i in dic.keys():
print(i)
◎ value 리스트 만들기 = values()
print(dic.values())
◎ key value 쌍으로 튜플로 생성 = items()
print(dic.items())
for i in dic.items():
print(i)
◎ 삭제 = clear()
dic.clear()
print(dic)
◎ key로 value값 얻기 = get()
print(dic.get('lee', -1))
print(dic.get('kim'))
◎ in
: 해당 키값이 딕셔너리에 있는지 확인 해줍니다.
# True / False로 리턴
print('kim' in dic)
자 이제 문제 하나를 풀어보면서 마무리 짓겠습니다.
- 3명의 학생 이름과 점수를 입력 받아 딕셔너리에 저장하고 출력하면 학생들의 점수의 합계와 평균을 출력하고 가장 높은 점수를 가진 학생의 이름을 출력하시오. (단, 가장 높은 점수를 가진 학생은 1명일 때만)
dic = {}
# n = int(input("학생의 수: "))
n = 3
num = 0
while num < 3 : # for i in range(n)
name = input("학생의 이름: ")
score = int(input("학생의 점수: "))
dic[name] = score
num = num + 1
sum = 0
avg = 0
for i in dic.values():
sum = sum + i
avg = sum / 3
print("합계: %d점, 평균: %.2f점" % (sum, avg))
print(dic)
# 가장 높은 점수를 가진 학생의 이름을 출력
max = 0
max_key =''
for i in dic.keys():
if dic.get(i) > max:
max = dic.get(i)
max_key = i
print("최우수자:%s" % max_key)
5. 느낀점
마지막에 풀었던 딕셔너리 문제의 해결을 하지 못해서 아쉬웠고 딕셔너리에 대해 헷갈리는 부분이 많았는데 예제 문제들을 풀면서 개념들을 이해할 수 있게 되었다. 점점 외워야 할 개념들이 많아져서 부담감이 들긴 하지만 외워야 내가 코딩을 할 때 편하게 쉽게 내가 원하는 대로 표현해나갈 수 있다고 생각하니 꼭 외워야 하겠다라는 생각이 들었다.
'Python' 카테고리의 다른 글
Python 기초(File, Class) - AWS 풀스택 과정 (예습) 5일차 (0) | 2024.07.06 |
---|---|
Python 기초(Set, Function) - AWS 풀스택 과정 (예습) 4일차 (0) | 2024.07.04 |
Python 기초(For, While) - AWS 풀스택 과정 (예습) 2일차 (0) | 2024.07.02 |
Python 설정 및 기초(변수, 문자열, IF) - AWS 풀스택 과정 (예습) 1일차 (0) | 2024.07.02 |