Created
December 17, 2019 11:34
-
-
Save hongdonghyun/efc0395b972c2ef69c6de3b32f5ada79 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Q1. 1번 문제 print(([q1[s] for s in q1 if s == '가을'])) | |
# 왜 대괄호로 q1과 전체 문장을 감싼건지 이유를 모르겠습니다. | |
# 왜 list로 만든건지, 자주 활용되는지와 원리와 과정이 알고 싶습니다. | |
# 보기엔 더 좋긴한데 왜?라는 생각과 제가 활용할 방법을 몰라서요. | |
# Answer | |
# [q1[s] for s in q1 if s == '가을'] 해당 형식으로 문장을 감싼건 리스트 컴프리헨션이라는 파이썬 문법중 하나입니다 | |
# 파이썬을 만든사람이 이렇게 쓸 수 있도록 만들어준거에요. | |
# 리스트 컴프리헨션을 사용하는 이유는 코드가 간결해진다는 장점이 있습니다. | |
# 코드가 줄어든다는 장점도 있구요. | |
# 성능상의 특별한 차이는 존재하지 않습니다. | |
# 이 간결하다는것은 파이썬을 처음 배우시는분들에겐 쉽게 납득할만한 이유가 아니라는것도 이해합니다. | |
# 아무리 봐도 리스트 컴프리헨션으로 작성한 코드가 더 어렵게 생겼다고 느끼거든요. 저 또한 그랬습니다. | |
# 제가 설명한 이유에 억지로 납득하지 않으셔도 됩니다. | |
# 파이썬을 계속 사용하시게 된다면 자연스럽게 습득하실 내용입니다. | |
# 리스트 컴프리헨션을 사용하지 않는다면 해당 코드는 다음과 같이 작성할 수 있겠습니다 | |
q1 = {"봄": "딸기", "여름": "토마토", "가을": "사과"} | |
some_variable = [] | |
for s in q1: | |
if s == "가을": | |
some_variable.append(q1[s]) | |
# 리스트 컴프리헨션을 사용한다면 다음과 같이 축약이 가능합니다. | |
some_variable = [q1[s] for s in q1 if s == "가을"] | |
# 리스트 컴프리헨션으로 만드는방법은 다음과 같습니다. | |
some_variable2 = [] # [] | |
for s in q1: # [for s in q1] | |
if s == "가을": # [for s in q1 if s == "가을"] | |
some_variable2.append(q1[s]) # [q1[s] for s in q1 if s == "가을"] | |
# [리스트에 들어갈 요소 for 변수 in 반복문] | |
# Q2. 위 문장도 리스트 컴프리헨션인가요? | |
# Answer | |
# 네 리스트 컴프리헨션이 맞습니다. | |
# 다만 보내주신 코드에 print(([q1[s] for s in q1 if s == '가을'])) 이부분은 | |
# print([q1[s] for s in q1 if s == '가을']) 이런식으로 소괄호 하나가 빠져야 더 올바른 코드라 할 수 있겠군요. | |
# Q3-1 1번 뿐만이 아니라 다른 정답들도 궁금한건데, 리스트 컴프리헨션은 컴퓨터가 뒤에서 이해하는건가요? 어디부터 생각해서 작성하는게 보다 편한가요? | |
# Answer | |
# 네 리스트 컴프리헨션은 컴퓨터가 알아서 이해합니다. | |
# 리스트 컴프리헨션 작성시는 for문을 기준으로 즉, 반복문을 기준점으로 잡으시고 작성하시면 그나마 쉽습니다. (저는 그랬습니다.) | |
# 해당경우는 사람마다 달라서 뭐가 편하다라고 제가 답변드리기가 어렵네요. | |
# Q3-2. 2번에 hasAppple을 기준으로 풀이해주면 감사하겠습니다. | |
# Answer | |
# 2번 문제를 리스트 컴프리헨션을 쓰지 않고 풀면 다음과 같은 코드가 되겠습니다 | |
q2 = {"봄": "딸기", "여름": "토마토", "가을": "사과"} | |
has_apple = [] | |
for key, val in q2.items(): | |
if key == "사과" or val == "사과": | |
has_apple.append("사과다!") | |
# 이제 해당 코드를 리스트 컴프리헨션으로 축약해보겠습니다 | |
#1. has_apple2 = [] # 리스트를 담을 변수를 선언 | |
#2. has_apple2 = [ for key, val in q2.items() ] # for문을 먼저 넣습니다. | |
#3. has_apple2 = [ for key, val in q2.items() if key == "사과" or val == "사과"] # 조건이 있는경우 조건을 넣습니다. | |
#4. has_apple2 = ["사과다" for key, val in q2.items() if key == "사과" or val == "사과"] # 해당 조건을 만족한 경우 리스트에 넣을값을 넣습니다. | |
if len(has_apple) > 0: | |
print("사과 있음") | |
else: | |
print("사과 없음") | |
# Q4. 3번 정답에서 grage = '나가'의 목적이 무엇인지 모르겠습니다. | |
# Answer | |
# 해당 문제는 부등호의 범위를 정확히 이해하셔야 합니다 | |
# > 과 >= 차이점은 | |
# >은 크다 영어로 greater | |
# >=은 크거나 같다 영어로 greater than equal | |
# 컴퓨터는 값이 같은것을 크거나 혹은 작다라고 판단하지 않습니다. | |
# 같다 라고 판단합니다. | |
score = 100 | |
grade = '' | |
if 0 < score > 100: # score가 0보다 크고 100보다 큰경우 | |
# 현재 score는 100이므로 0보다는 크지만 100보다 크지 않죠? | |
# 해당 조건은 다음과 동등합니다. | |
# score > 100 | |
print("0 < score > 100 = ", 0 < score > 100) | |
# 0 < score > 100 의 조건을 충족했다면 | |
# grade변수에 '나가'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = '나가' | |
elif score > 80: # score가 80보다 큰경우 | |
print("score > 80 =", score > 80) | |
# score > 80 의 조건을 충족했다면 | |
# grade변수에 'A'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = 'A' | |
elif score > 60: # score가 60보다 큰경우 | |
print("score > 60 =", score > 60) | |
# score > 60 의 조건을 충족했다면 | |
# grade변수에 'B'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = 'B' | |
elif score > 40: # score가 40보다 큰경우 | |
print("score > 40 =", score > 40) | |
# score > 40 의 조건을 충족했다면 | |
# grade변수에 'C'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = 'C' | |
elif score > 20: # score가 20보다 큰경우 | |
print("score > 20 =", score > 20) | |
# score > 20 의 조건을 충족했다면 | |
# grade변수에 'D'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = 'D' | |
elif score >= 0: # score가 0보다 큰거나 같은경우 | |
print("score > 0 =", score > 0) | |
# score >= 20 의 조건을 충족했다면 | |
# grade변수에 'E'라는 문자열을 넣고 더이상의 if문을 비교하지 않습니다. | |
grade = 'E' | |
print(grade) | |
# http://pythontutor.com/visualize.html#code=score%20%3D%20100%0Agrade%20%3D%20''%0Aif%200%20%3C%20score%20%3E%20100%3A%20%20%0A%20%20%20%20print%28%220%20%3C%20score%20%3E%20100%20%3D%20%22,%200%20%3C%20score%20%3E%20100%29%0A%20%20%20%20grade%20%3D%20'%EB%82%98%EA%B0%80'%0A%0Aelif%20score%20%3E%2080%3A%20%20%23%20score%EA%B0%80%2080%EB%B3%B4%EB%8B%A4%20%ED%81%B0%EA%B2%BD%EC%9A%B0%0A%20%20%20%20print%28%22score%20%3E%2080%20%3D%22,%20score%20%3E%2080%29%0A%20%20%20%20grade%20%3D%20'A'%0A%0Aelif%20score%20%3E%2060%3A%20%20%23%20score%EA%B0%80%2060%EB%B3%B4%EB%8B%A4%20%ED%81%B0%EA%B2%BD%EC%9A%B0%0A%20%20%20%20print%28%22score%20%3E%2060%20%3D%22,%20score%20%3E%2060%29%0A%20%20%20%20grade%20%3D%20'B'%0A%20%20%20%20%0Aelif%20score%20%3E%2040%3A%20%20%23%20score%EA%B0%80%2040%EB%B3%B4%EB%8B%A4%20%ED%81%B0%EA%B2%BD%EC%9A%B0%0A%20%20%20%20print%28%22score%20%3E%2040%20%3D%22,%20score%20%3E%2040%29%0A%20%20%20%20grade%20%3D%20'C'%0A%0Aelif%20score%20%3E%2020%3A%20%20%23%20score%EA%B0%80%2020%EB%B3%B4%EB%8B%A4%20%ED%81%B0%EA%B2%BD%EC%9A%B0%0A%20%20%20%20print%28%22score%20%3E%2020%20%3D%22,%20score%20%3E%2020%29%0A%20%20%20%20grade%20%3D%20'D'%0A%0Aelif%20score%20%3E%3D%200%3A%20%20%23%20score%EA%B0%80%200%EB%B3%B4%EB%8B%A4%20%ED%81%B0%EA%B1%B0%EB%82%98%20%EA%B0%99%EC%9D%80%EA%B2%BD%EC%9A%B0%0A%20%20%20%20print%28%22score%20%3E%200%20%3D%22,%20score%20%3E%200%29%0A%20%20%20%20grade%20%3D%20'E'%0A%0Aprint%28grade%29%0A&cumulative=false&heapPrimitives=nevernest&mode=edit&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false | |
# 해당 링크에서 Visualize Execution을 버튼을 눌러서 코드의 동작과정을 확인해보세요. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment