Skip to content

Instantly share code, notes, and snippets.

@hongdonghyun
Created December 17, 2019 11:34
Show Gist options
  • Save hongdonghyun/efc0395b972c2ef69c6de3b32f5ada79 to your computer and use it in GitHub Desktop.
Save hongdonghyun/efc0395b972c2ef69c6de3b32f5ada79 to your computer and use it in GitHub Desktop.
# 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