yangbongsoo / blockStudy

1 stars 0 forks source link

python-tuple/set/dict #28

Closed yangbongsoo closed 1 year ago

yangbongsoo commented 1 year ago
T = (1,)
print(type(T))

S = (1)
print(type(S))

C = 10,
print(type(C))

D = 1, 2, 3
print(type(D))

student = ('철수', 19, "CS")  # packing
print(student)

name, age, major = student  # unpacking 튜플이 깨지는걸 unpacking 이라고 한다.
print(name)

t1 = tuple("ab")
print(t1)
t2 = ("ab",)
print(t2)
t3 = ("ab")
print(t3)
print(t1, t2, t3)
t = t1 + (5, 6)  # 합쳐진 새로운 튜플 t 생성
print(t)

# TODO: 시험문제로 packing이 발생하는지, unpacking 이 발생하는지, 둘다 발생하는지 문제 낼 수 있다.
# TODO: 9page 중요함
t = (1, [1, 2], [], "hi")
print(t)

# 튜플의 원소는 list 주소값이다. 그 list 원소를 바꾸는건 튜플의 원소를 바꾸는게 아니다. 그러니까 수정 가능
t[1][1] = 4
print(t)
t[2][0:0] = [10, 20]
print(t)
S1 = {3, "cat", False}
S2 = set([1, 2, 3, 2])
print(S2)

S3 = set("Hi Hong!")
print(S3)  # 문자열의 문자를 집합으로 변환

# S4 = {1, 2, [3, 4]} 오류 TypeError 리스트는 원소로 올 수 없음

# 아래 두개 차이 알아라
# A.intersection(B)
# A.intersection_update(B)

# 얘도
# A.difference(B)
# A.difference_update(B)

# 새로운 operator 가 추가됐다. 8장 p15

s1 = set([1, 2, 3])
s1.add(4)  # 존재하는 데이터 추가하면 변동 없음
print(s1)

s1.update([4, 5, 6])
print(s1)

s1.remove(6)
print(s1)

s1.discard(6)  # 이미 없는 원소 삭제하면 무시(Error 안남)
print(s1.pop())
s1.clear()  # 공집합 만듬
print(s1)  # TODO: 시험에 나옴. 빈 잡합 출력하면 {} 이게 아니다. set() 이렇게 나온다.

L = [1, 1, 2, 2]
B = {3, 4, 5, 6}

A = set(L)
A = A.union({3, 4})
print(A)

C = A | B  # 합집합
print(C)
D = A & B  # 교집합
print(D)
E = A.difference(B)  # E = A - B
print(E)

# 사전 dictionary 도 여기에서 다룸
print("//////////////////////")
d = dict()
print(d)
d = {}
print(d)

number = {1: 25, 2: 30, 3: 27}
print(type(number))
print(number[2])  # 이건 인덱싱이 아님

D1 = dict([(1, 'a'), (2, 'b')])
print(D1)
D2 = dict(({1, 'a'}, {2, 'b'}))  # tuple 안에 집합 2개가 들어가 있음
print(D2)  # 출력 결과가 {1: 'a', 'b': 2} 로 나올수 있다. 튜플이라 순서가 없어서 다르게 나올 수 있음
D3 = dict({(1, 'a'), (2, 'b')})
print(D3)

grade = {'Kim': 89, 'Park': 45, 'Lee': 78}
num = grade.get('Kim')  # grade['Kim'] 와 동일
print(num)

num = grade.pop("Kim")
print(num)

print(grade, type(grade))

grade = {'Kim': 89, 'Park': 45, 'Lee': 78}
L = grade.keys()
print(L, type(L))

L = list(L)
print(L, type(L))

items = grade.items()  # items 하면 grade에서 key와 value 의 쌍을 튜플로 묶은 값들을 dict_items 객체로 반환.
print(type(items))

item = list(items)
print(item, type(item))

grade = {'Kim': 89, 'Park': 45, 'Lee': 78}
values = list(grade.values())
print(values, type(values))
print('Kim' in grade)
print(89 in grade)  # dic 의 key 만 검사. False
grade.clear()
print(grade)  # 결과는 {} 이렇게 나옴

D = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(len(D))  # D 의 원소 수 계산. 4 나옴
print(sorted(D))  # D 의 key 값을 기준으로 정렬한 리스트

print(D['b'])
print(D.get('b'))
print(D.get('e'))  # None 나옴
print(D.get('e', 0))  # 없을 시 default 값 지정 가능
# print(D['e'])  # KeyError: 'e'
print(D.pop('c'))
print(D)
print(D.pop('c', 1))  # c 없음 1 반환
# print(D.pop('c')) KeyError: 'c'

problem1

# 전체 직원 명단
employee = {'공유', '고수', '보검', '태현', '종민', '세윤', '준호', '우종', '시우', '두준'}
# 지각자 명단
late = {'우종', '보검'}
# 결근자 명단
absent = {'종민', '우종', '보검', '두준'}

print("전체 사원 명단 : {}".format(employee))
print("지각자 명단 : {}".format(late))
print("결근자 명단 : {}".format(absent))

# 지각과 결근을 한번도 하지 않은 사원에게 보너스 지급
print("보너스 지급 대상자 명단 : {}".format(employee.difference(late).difference(absent)))

# 지각과 결근을 모두 한 사원에게 야근
print("야근 대상자 명단 : {}".format(employee.intersection(late.intersection(absent))))

# 1명 이상의 신입 사원 명단을 입력 받기
newbie = set(input("신입사원 명단 입력 :").split())

if employee.isdisjoint(newbie):
    print("전체 사원 명단 : {}".format(employee.union(newbie)))
else:
    print("신입사원의 이름이 기존 사원의 이름과 중복")
    print("전체 사원 명단: {}".format(employee.union(newbie)))

problem2

D = {'c': 7, 'f': 3, 'a': 5}
# (key, value) 쌍의 데이터를 구해 오름차순으로 정렬하여 출력
print("After sort : {}".format(sorted(D.items())))

problem3

# 각 과일의 재고량, 단가
fruit = {'배': [2, 1000], '자몽': [1, 2000], '메론': [1, 8000], '감': [6, 800]}

def calculate():
    totalPrice = 0
    for eachValue in fruit.values():
        stock = eachValue[0]
        fruitPrice = eachValue[1]
        if stock < 5:
            totalPrice += (5 - stock) * fruitPrice
    return totalPrice

def reduce_stock():
    selectedFruitValue = fruit.get(selectedFruit)
    fruit[selectedFruit] = [selectedFruitValue[0] - 1, selectedFruitValue[1]]

selectedFruit = input("먹고 싶은 과일은? : ")

if selectedFruit in fruit:
    print("{} 맛있게 드세요".format(selectedFruit))
    print()
    print("각 과일 당 최소 5개는 되도록 구입합니다")
    reduce_stock()
    print("구입에 필요한 총 금액은 : {} 원 입니다".format(calculate()))
else:
    print("{} 준비되어 있지 않습니다".format(selectedFruit))
    print()
    print("각 과일 당 최소 5개는 되도록 구입합니다")
    print("구입에 필요한 총 금액은 : {} 원 입니다".format(calculate()))