Jun's Blog

간단한 기능 구현해보기(배열) - (2) 본문

Python

간단한 기능 구현해보기(배열) - (2)

luckydadit 2025. 3. 4. 17:57

1. List 활용해 보기

# coffees = [] # List()를 의미함.
coffees = list()

coffees.append('아메리카노')
coffees.append('콜드브루')
coffees.append('카푸치노')
coffees.append('바닐라라떼')
coffees.append('디카페인커피')
coffees.append('카페라떼')
coffees.append('카푸치노')

# 인덱싱
print('앞에서 2번째 음료 : %s' % (coffees[2]))
print('뒤에서 1번째 음료 : %s' % (coffees[-1]))

# 슬라이싱
print('1번째부터 3번째까지 음료 : %s' % (coffees[1:4]))
print('3번째부터 끝까지 음료 : %s' % (coffees[3:]))
print('처음부터 2번째까지 음료 : %s' % (coffees[:3]))

print('요소 개수 : %d' % (len(coffees)))

 

<실행결과>

 

print('짝수 요소만 출력 : %s' % (coffees[0::2]))
print('홀수 요소만 출력 : : %s' % (coffees[1::2]))

 

<실행결과>

 

print('오름차순 정렬')
coffees.sort()
print(coffees)

print('내림차순 정렬')
coffees.sort(reverse=True)
print(coffees)

print('무작위로 섞기')
import random
random.shuffle(coffees)
print(coffees)

 

<실행결과>

 

2. 튜플(tuple) 활용해보기

# 목록에 소괄호를 사용하거나, 단수 콤마만 연결하면 tuple이 됩니다.
coffee01 = ('아메리카노', '카페라떼')
coffee02 = ('콜드브루', '아이스커피')
coffee03 = '카푸치노', '마키야또'

print('자료형 타입 : ', end='')
print(type(coffee01))
print(type(coffee03))

 

<실행결과>

 

mytuple = coffee01 * 3
print(mytuple)

 

<실행결과>

 

# 튜플 합치기
# + 기호 사용시 요소 개수가 1개이더라도 반드시 콤마를 붙여야 합니다.
coffees = coffee01 + coffee02 + coffee03 + coffee04 + ('에스프레소',)
length = len(coffees)
print('요소 개수 : %d' % (len(coffees)))
print(coffees)

 

<실행결과>

 

# 불변성을 가지는 튜플은 값을 할당할 수 없습니다.
# coffees[1] = '우유'
# tuple과는 다르게 list는 값을 할당 할 수 있습니다.
coffees[6] = '막걸리'

 

# 인덱싱
print('앞에서 2번째 요소 : %s' % (coffees[2]))
print('뒤에서 1번째 요소 : %s' % (coffees[-1]))

# 슬라이싱
print('1번째부터 3번째까지 요소 : ', end='')
print(coffees[1:4])
print('4번째부터 끝까지 요소 : ', end='')
print(coffees[4:])

 

<실행결과>

 

# count() 함수를 사용하여 특정 항목이 몇개 있는지 확인 가능합니다.
myconut = coffees.count('아메리카노')
print(myconut)

myindex = coffees.index('아메리카노')
print('아메리카노의 위치 색인 : %d' % (myindex))

 

<실행결과>

 

print('튜플의 응용(swap 기법)')
x, y = 3, 4
print('before x : %d, y : %d' % (x, y))

x, y = y, x
print('after x : %d, y : %d' % (x, y))

 

<실행결과>

 

3. 사전(dict) 활용해보기

Java의 map와 유사합니다.
# coffees = {} # dict()을 의미함.
coffees = dict()

print('자료형 타입 : ', end='')
print(type(coffees))

coffees['에스프레소'] = 1000
print(coffees)

 

<실행결과>

 

coffees['에스프레소'] = 1000
coffees['에스프레소'] = 1500
print(coffees)

 

<실행결과>

 

coffees['에스프레소'] = 1000
coffees['카페라떼'] = 2000
coffees['카푸치노'] = 3000
coffees['마키야또'] = 4000

print(coffees)

 

<실행결과>

 

findItem = '카페라떼' # 찾고자 하는 요소

bool = findItem in coffees

if bool :
    print(f'"{findItem}" 항목이 있습니다.')
else:
    print(f'"{findItem}" 항목이 없습니다.')

 

<실행결과>

 

 

응용 문제 1 : '핫초코'가 있는지 확인하고, 없을 경우 5000원으로 추가해주세요.
bool = findItem in coffees
if not bool :
    coffees[findItem] = 5000
#end if

print(coffees)

 

<실행결과>

응용 문제 2 : 6,000 원짜리 품목이 존재하지 않으면, '아이스 커피'를 등록해 보세요.
findItem = '아이스크림'
price = 6000
bool = price in coffees.values()
if bool:
    print(f'가격이 "{price}"인 항목이 존재합니다.')
else :
    print('품목이 존재하지 않아서 추가합니다.')
    coffees[findItem] = price
#end if

print(coffees)

 

<실행결과>

 

응용 문제 3 : 아래의 항목들을 for문을 사용하여 추가해보세요.
바닐라라떼 : 7000원, 라벤더: 8000원, 딸기라떼: 9000원, 콜드브루: 10000원
listCoffee = ['바닐라라떼','라벤더','딸기라떼','콜드브루']

for idx in range(len(listCoffee)):
    coffees[listCoffee[idx]] = (idx + 7) * 1000

print(coffees)

 

<실행결과>

 

응용 문제 4 : 기존 상품의 가격을 출력해주세요.
findItem = '핫초코'
print('%s의 가격은 %d원입니다.' % (findItem, coffees[findItem]))

 

<실행결과>

응용 문제 5 : 다음 항목들이 존재하면 출력, 그렇지 않으면 5000원으로 상품 등록하기
['라벤더', '우유 커피']
targetList = ['라벤더', '우유 커피']

for item in targetList:
    try:
        price = coffees[item]
        message = '품명 : %s, 가격 : %d' % (item, price)
        print(message)
    except KeyError:
        print(f'{item} 키가 존재하지 않아서 신규 추가하도록 합니다.')
        coffees[item] = 5000
#end for

print(coffees)

 

<실행결과>

 

findItem = '둥글레차'
price = coffees.get(findItem, 3000) # findItem이 없을 경우, 기본값으로 3000원을 지정합니다.
message = '품명 : %s, 가격 : %d' % (findItem, price)
print(message)

 

<실행결과>

 

findItem = '카푸치노'
popItem = coffees.pop(findItem) # 특정 Item을 사전에서 제거할 때 사용합니다.
#del coffees['카푸치노'] 로 실행해도 동일한 결과로 처리됩니다.
print(f'목록에서 제거된 {findItem}의 이전 가격은 {popItem}이었습니다.')

print(coffees)

 

<실행결과>

 

 

print('\n모든 품목들의 단가 정보 출력')
for (key, value) in coffees.items():
    print(f'{key}의 단가는 {value}원입니다.')

 

<실행결과>

 

응용 문제 6 : keys() 함수와 [] 기호를 사용하여 전체 목록을 출력하시오.
 단, 다음 품목별은 단가를 변경하여 출력하도록 합니다.
 500원 인상 : '카페라떼', '카푸치노'
 500원 인하 : '핫초코'

 

for item in coffees.keys():
    if item in ('카페라떼', '카푸치노'):
        coffees[item] = coffees[item] + 500
    elif item in ('핫초코'):
        coffees[item] = coffees[item] - 500
    else:
        pass
    #end if

    print(f'품명 : {item}, 가격 : {coffees[item]}원')
#end for

 

<실행결과>

 

4. 집합(Set) 활용해보기

 

집합(Set)은 순서가 없으며, 중복을 허용하지 않습니다.
coffees = set()

print('자료형 타입 : ', end='')
print(type(coffees))

coffees.add('아메리카노')
coffees.add(100)
coffees.add(True)
coffees.add('아메리카노')


print(f'요소 개수 : {len(coffees)}')

coffees.clear() # 요소들을 모두 지울때 사용

print(f'요소 개수 : {len(coffees)}')

 

<실행결과>

 

coffees.add('아메리카노')
coffees.add('에스프레소')
coffees.add('믹스커피')
coffees.add('카페라떼')

newItems = ['콜드브루','고구마라떼','디카페인커피']
coffees.update(newItems)

print(coffees[2]) # 집합(Set)은 순서가 없으므로 에러 발생함

 

<실행결과>

 

 

findItem = '카푸치노'
bool = findItem in coffees
print(f'{findItem} 존재 여부 : {bool}')

 

<실행결과>

 

문제 1 : '마키야또'가 존재하는지 확인하고, 없으면 추가해 보세요.
findItem = '마키야또'

bool = findItem in coffees

if not bool:
    coffees.add(findItem)
else:
    print(f'{findItem}이 존재합니다.')
#end if

print(coffees)

 

<실행결과>

 

#'마키야또' 삭제하기
findItem = '믹스커피'
coffees.remove(findItem)

print(coffees)

 

<실행결과>

 

문제 2 : 집합에 존재하지 않는 '바닐라라떼'를 삭제를 시도하고, 예외처리 하세요.
removeItem = '바닐라라떼'
try:
    coffees.remove(removeItem)
except KeyError:
    print(f'{removeItem}는 존재하지 않아 지울 수 없습니다.')
# end try-except

 

<실행결과>

 

 

print('반복문을 이용한 출력')
for element in coffees:
    print(element)
# end for

 

<실행결과>

 

print('\n집합 연산')
store01 = set(['고구마라떼','에스프레소','아메리카노','마키야또'])

store02 = set(['아메리카노','마키야또','카페라떼','디카페인커피'])

 

4.1 합집합

print('2개의 store에서 판매 가능한 품목')
# | 기호도 가능합니다.
union_set = store01.union(store02)
print('합집합 : %s' % (union_set))

 

<실행결과>

 

4.2 교집합

print('2개의 store에서 공통적으로 판매 가능한 품목')
# & 기호도 가능합니다.
intersection_set = store01.intersection(store02)
print('교집합 : %s' % (intersection_set))

 

<실행결과>

 

4.3 차집합

print('첫번째 store에서만 판매 가능한 품목')
# - 기호도 가능합니다.
difference_set_01 = store01.difference(store02)
print('차집합(A-B) : %s' % (difference_set_01))

print('두번째 store에서만 판매 가능한 품목')
# - 기호도 가능합니다.
difference_set_02 = store02.difference(store01)
print('차집합(B-A) : %s' % (difference_set_02))

 

<실행결과>

 

4.3.1 차집합들의 합집합

symmetric_difference_set = store01.symmetric_difference(store02)
print('차집합들의 합집합 : %s' % (symmetric_difference_set))

 

<실행결과>