문제 풀이는 매우 간단한 내용이었다. 코드도 1분 안에 작성할 정도니깐. 그런데 다른 풀이를 보니 어지러웠다.
def solution(id_pw, db):
if db_pw := dict(db).get(id_pw[0]):
return "login" if db_pw == id_pw[1] else "wrong pw"
return "fail"
??? 지금까지 python, 딥러닝을 공부하면서 보지 못했던 기호가 나왔다. :- 먼저 이 기호에 대해 공부해본 후 다시 풀이를 진행해보자
:- 바다코끼리 연산자 (the walrus operator)는 간단하게 말하면 표현식에 이름을 부여하고 재사용할 수 있게 합니다. 지금까지 파이썬 코드에서는 표현식을 인라인(inline)으로 캡처하는 문법이 없었습니다. 다음 예시를 보면
a = [1, 2, 3, 4]
n = len(a)
if n > 5:
print(f"List is too long ({n} elements, expected <= 5)")
이 코드를 n을 표현 하기 위해 if 문 위에 n 코드 라인 한 줄을 더 작성하였습니다.
이 코드를 바다코끼리 연산자를 사용하면 다음과 같아집니다.
a = [1, 2, 3, 4]
if (n := len(a)) > 5:
print(f"List is too long ({n} elements, expected <= 5)")
이렇게 인라인으로 작성할 수 있게 됩니다.
문제의 내 답변을 보면 id_pw[0]를 사용한 것을 볼 수 있다. 이는 dict[key]를 작성한 것으로 그에 맞는 value가 출력하게 되는것이다. 그렇다면 key가 dict에 속해 있지 않다면 어떻게 될까?
바로 프로그램 오류가 발생하게 된다. 만약 내가 이 단어가 key인지 모르겠지만 dict에 입력하고 싶다면 그때 dict.get()를 작성하면 된다.
a={'name :'Hong', 'phone' : `010-5359-6280`}
print(a['name'] # Hong
print(a['address'] # Error
print(a.get('address'] #None
def solution(id_pw, db):
if db_pw := dict(db).get(id_pw[0]):
return "login" if db_pw == id_pw[1] else "wrong pw"
return "fail"
다시 풀이에 들어오면 리스트로 되어 있는 db를 dictionary 형태로 변경후 이에 id_pw의 아이디를 입력시 나오는 db의 비번을 db_pw로 설정한다. 만약 id_pw의 아이디가 db에 없을시 if문을 작동하지 않고 return "fail" 하게 된다. if문을 조건 만족시 바로 아래 return문을 작동시키게 된다.
즉 다시 말해 :- 바다코끼리 연산자는 정의 후 사용인 두줄 코드를 정의,사용 한줄코드로 압축시키는 걸로 이해하면 되고 dict.get()는 dict의 key에 있을지 없을지 걱정없이 입력할때 사용한다.
