본문 바로가기
개발일지/Python

2022.02.02 파이썬정복 10장 사전, 집합

by 개발에정착하고싶다 2022. 2. 2.
320x100
# 제 10장 사전(dict)과 집합
'''
dic = {"boy":"소년", "school":"학교","book":"책"}

print(dic)

print(dic["boy"])
print(dic["book"])

print(dic.get("student")) # 에러가나는 대신에 일종의 pass 형식으로 get을 이용해 준다.
print(dic.get("student","사전에 없는 단어 입니다.")) # 때문에 student는 dic안에 없기때문에 에러가 나야하지만
                                                # 그렇질 않아서 넘어가고 다음 말이 출력된다.
if "student" in dic:
    print("사전에 있는 단어 입니다.")
else:
    print("이 단어는 사전에 없습니다.")


# 전체적으로 사전을 만지작 거릴때는 리스트 형식의 []를 써주는것같다.
dic["boy"] = "남자애"
dic["girl"] = "소녀"
del dic["book"] # 키만 지워줘도 값 자체가 지워진다. # 하지만 이거는 보기에만 없어진 것일뿐. 완전히 지우려면 clear를 이용해야한다.
print(dic)

'''
'''
dic = {"boy":"소년","school":"학교","book":"책"} # dict를 처음 생성해 줄때는 리스트형태인 []가 아니라 {}로 해줘야 한다.
# print(dic.keys())
# print(dic.values())
# print(dic.items())

keylist = dic.keys() # 마지막에 ()를 해주는건 ~~.~~의 특징인것같다.
for key in keylist:
    print(key)

# dict는 진짜 리스트는 아니여서 append, insert등의 편집 함수는 호출할 수 없다고 한다.
'''
'''
dic = {"boy":"소년", "girl":"소녀","book":"책"}
dic2 = {"돼지":"삼겹살","중국":"짜장면","남자":"여자"}
dic.update(dic2) # 일종의 어펜드, 혹은 + 기능의 것이다.

print(dic.keys())
print(dic.values())

# 사전함수는 key 값에 한하여 중복을 허용하지 않는다고 한다.
'''
'''
song = """by the rivers of babylon, there we sat sown
yeah we wept, when we remember zion.
when the wicked carried us away in captivity
required from us a song
now how shall we sing the lord's song in a strange land"""

alphabet = dict()
for c in song:
    if c.isalpha() == False: # 이게 알파벳인 것만 넣는 함수라곤 하는데, 납득이 안간다. 사실상 "song"안에 있는 영어는 , 를 제외하곤 알파벳 아닌가?
        continue
    c = c.lower()
    if c not in alphabet:
        alphabet[c]=1
    else:
        alphabet[c] +=1

print(alphabet)

key = list(alphabet.keys())
key.sort()
for c in key:
    num = alphabet[c]
    print(c,"=>",num)

for code in range(ord("a"), ord("z")+1): # 이건 또 뭐냐 진짜 졸라 불친절하네 뭔지 납득이 가게끔 설명을 해줘야 알아먹지 않겠나? ord?
    c = chr(code)# 유니코드값이라고 메모리 값 돌려준다는건 알겠는데 하 진짜 졸라하기 싫다 매 챕터마다 이지랄이니 원
    num = alphabet.get(c,0)
    print(c, "=>",num)
'''
'''
# 사전(dict) 후기
전체적으로 dict의 함수는 가장 핵심이 되는 alphabet에 관한 함수의 정의를 정확히 몰라서
전체적으로 이해가 안간다;
그냥 지나치자

전체적으로 진짜 설명 졸라 빈약하다. 설명이 필요없는거는 줄줄줄 설명하면서
설명이 필요한건 그냥 설명이 없다. 지가 강성모도 아니고 하..
원래 코딩이 이런건가 싶기도하다.
한두책이면 말을 안하겠지만
내가 봐왔던 책들과 모든 강의가 이런식이였다.
한 초중반의 난이도는 설명 잘해주다가 완전히 뜬금없는 함수 같은거 나오는데
설명해주는게 졸라 뜬금없고 진짜 말같지도 않은 소리 둘러대는데 그걸 이해하라는 건지;
제일 대표적인 예가 멀리갈것도 없이 위에 나왔던 alphabet이다.
알파벳이 들어가는거면 왜 어떤 알파벳은 가려서 들어가고 어떤 알파벳은 누락되는지 그 원인을 모르겠다;
늘 이런식이다.
그러다보니 점점 흥미를 잃어가고 하기가 싫어진다.
'''

'''
# 집합

# 집합에서 set()이라는걸 알려줬다.
# 정렬이 되긴 하는데 이건 오름차순도 내림차순도 아니고 뭣도 아닌것같아서 알고 싶지도 않고 짜증나서 그냥 넘겼다.

# 집합연산

# 합집합 |
# 교집합 &
# 차집합 -
# 배타적 차집합 ^ # 이거는 좀 헷갈렸는데, 한쪽 집합에만 있는 원소의 합 이다.

twox ={2,4,6,8,10,12}
threex={3,6,9,12,15}

print("교집합",  twox& threex)
print("합집합", twox | threex) # 중복은 배제 된다.
print("차집합", twox - threex)
print("차집합", threex - twox)
print("배타적 차집합", twox ^ threex) # 직접 보니깐 더 이해가 간다. 중복되는 집합을 제외하는 집합이다.

'''
'''
# 부분집합 <=
# 진성 부분집합 <
# 포함집합 >=
# 진성 포함집합 >
# 포함 여부를 확인할 때는 in, not in 이 보편적으로 이용되며 편하다.

mammal = {"코끼리","고릴라","사자","고래","사람","원숭이","개"}
primate = {"사람","원숭이","고릴라"}

if "사자" in mammal:
    print("사자는 포유류 이다.")
else:
    print("사자는 포유류가 아니다.")

print(primate <= mammal)   # <가 향하는 방향으로 봤을때 a<b면 a가 b에 속하느냐. 라는 의미
print(primate < mammal)
print(primate >= mammal)
print(primate > mammal)

'''

# 첫번째 시도 - 실패
rainbow = {"빨강":"red","주황":"orange","노랑":"yellow","초록":"green","파랑":"blue","남색":"navy","보라":"pueple"}

'''
if "green" in rainbow:
    print("True")
else:
    print("False")
'''
# 해설 코드
print(rainbow["초록"])

'''
정말로 그런 생각이 든다.
아... 데이터 진짜 이거 아닌것같은데,
데이터 다루는것도 재미없고
파이썬도 자꾸 뭐가 앞뒤가 안맞는 얘기가 중간중간에 나오면 짜증나고

한편으로는 그런 앞뒤가 안맞는걸 잘 활용하면서 계시니까들
뭔가 운영이 되오고 파이썬이 인기많은 언어가 되었겠지?
데이터에 특화된 언어라고는 하는데 정말 아직은 뭘 알때가 아닌가
아무튼 졸라재미없다.
앱개발 코스로 갈껄 왜 이렇게 해서..
라는 생각이 든다.
근데 어쩌겠냐 물은 엎어졌는데
이거 빠그라지고 다른 직종을 구하게 되더라도 이건 마쳐보도록 하자.

서장훈이 했던 말처럼 그냥 하다보면 알게되고 재밌어질까? 싶기도 하다.

몰랐는데 알아가고 싶은게 있는가 하면 이건좀.. 성질이 다른것같기도하고..
아이고.. 그래도 해보자;
300x250