View

문제 설명

머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.

  • 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
  • 로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를, 아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.

제한사항
  • 회원들의 아이디는 문자열입니다.
  • 회원들의 아이디는 알파벳 소문자와 숫자로만 이루어져 있습니다.
  • 회원들의 패스워드는 숫자로 구성된 문자열입니다.
  • 회원들의 비밀번호는 같을 수 있지만 아이디는 같을 수 없습니다.
  • id_pw의 길이는 2입니다.
  • id_pw와 db의 원소는 [아이디, 패스워드] 형태입니다.
  • 1 ≤ 아이디의 길이 ≤ 15
  • 1 ≤ 비밀번호의 길이 ≤ 6
  • 1 ≤ db의 길이 ≤ 10
  • db의 원소의 길이는 2입니다.

입출력 예id_pwdbresult
["meosseugi", "1234"] [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]] "login"
["programmer01", "15789"] [["programmer02", "111111"], ["programmer00", "134"], ["programmer01", "1145"]] "wrong pw"
["rabbit04", "98761"] [["jaja11", "98761"], ["krong0313", "29440"], ["rabbit00", "111333"]] "fail"

입출력 예 설명

입출력 예 #1

  • db에 같은 정보의 계정이 있으므로 "login"을 return합니다.

입출력 예 #2

  • db에 아이디는 같지만 패스워드가 다른 계정이 있으므로 "wrong pw"를 return합니다.

입출력 예 #3

  • db에 아이디가 맞는 계정이 없으므로 "fail"을 return합니다.

나의 풀이

def solution(id_pw, db):
    id, pw = id_pw[0], id_pw[1]
    for i in db:
        if i[0] ==id:
            if i[1] ==pw:
                return "login"
            else:
                return "wrong pw"
    return "fail"

다른 풀이

dict(2차원리스트) 

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"

dict()

 내장 함수에 키워드 인자(rardss='123', yyoom='1234')나 터플(tuple) 리스트를 넘길 수도 있다.

db = [['rardss', '123'], ['yyoom', '1234'], ['meosseugi', '1234']]


print(dict(db))
// {'rardss': '123', 'yyoom': '1234', 'meosseugi': '1234'}

바다코끼리 연산자

한국어로는 바다코끼리 연산자로 불리는 Walrus Operator는 PEP 572에 Assignment Expressions이란 이름으로 정의되었다.

정식 명칭은 대입 표현식(Assignment Expression)이지만, 명명 표현식(Named Expression) 또는 바다코끼리 연산자(Walrus Operator)라고도 불린다.

:=가 바다코끼리의 눈과 엄니를 닮아 바다코끼리 연산자라고 불리게 되었다.

바다코끼리 연산자의 목적은 표현식(Expression)에 이름을 부여하고 재사용할 수 있게 하는 것이다.

지금까지 파이썬에서는 코드에서 표현식을 인라인(inline)으로 캡처하는 문법이 없었다.

예컨대, 파이썬 3.7 이하에서는 아래와 같이 코드를 작성해야 했다.

a = [1, 2, 3, 4]
n = len(a)
if n > 5:
    print(f"List is too long ({n} elements, expected <= 5)")

len을 여러 번 호출하는 상황을 방지하기 위해, len의 출력값을 저장하는 변수 n을 사용하는데 라인 한 줄이 더 필요했다.

파이썬 3.8에서는  바다코끼리 연산자를 사용하면 아래와 같이 n을 조건문 안에서 선언하고 값을 대입할 수 있다.

a = [1, 2, 3, 4]
if (n := len(a)) > 5:
    print(f"List is too long ({n} elements, expected <= 5)")

 

 

Reference

https://int-i.github.io/python/2020-05-29/python-walrus-operator/

https://www.daleseo.com/python-ditonary/

Share Link
reply
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31