# 로그인 성공?
'''
문제 :
입력한 아이디와 패스워드가 담긴 배열 id_pw
회원들의 정보가 담긴 2차원 배열 db
로그인 성공, 실패에 따른 메시지를 return
아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return
로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 "fail"
아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 "wrong pw"를 return
제한사항 :
아이디는 문자열, 알파벳 소문자와 숫자로만
패스워드는 숫자로 구성된 문자열
회원들의 비밀번호는 같을 수 있지만 아이디는 같을 수 없습니다.
id_pw의 길이는 2
id_pw와 db의 원소는 [아이디, 패스워드] 형태
1 ≤ 아이디의 길이 ≤ 15
1 ≤ 비밀번호의 길이 ≤ 6
1 ≤ db의 길이 ≤ 10
db의 원소의 길이는 2
'''
def solution(id_pw, db):
# db에서 해당 아이디랑 비밀번호가 있는지 확인을 하고
for account in db:
# if/else 이용해서 조건에 맞으면 값을 리턴
if id_pw[0] == account[0]:
if id_pw[1] == account[1]:
return "login"
else:
return "wrong pw"
return "fail"
print(solution(["meosseugi", "1234"],[["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]])) # login
print(solution(["programmer01", "15789"],[["programmer02", "111111"], ["programmer00", "134"], ["programmer01", "1145"]])) # wrong pw
print(solution(["rabbit04", "98761"],[["jaja11", "98761"], ["krong0313", "29440"], ["rabbit00", "111333"]])) # fail
여기서 재미있었던 것은 return "fail"의 위치다.
처음에는, 아래와 같이 입력했었다.
def solution(id_pw, db):
# db에서 해당 아이디랑 비밀번호가 있는지 확인을 하고
for account in db:
# if/elif/else 이용해서 조건에 맞으면 값을 리턴
if id_pw[0] == account[0]:
if id_pw[1] == account[1]:
return "login"
else:
return "wrong pw"
return "fail"
if문안으로 return이 들어간 것을 알 수 있다.
이러면 무조건 fail이 나올 수 밖에 없는데, 그 이유는 id_pw는 account의 id값을 대조하면서 하나씩 for문을 돌아가면서 맨첫번째 [0]값이 id_pw[0]값이 아닐 경우 무조건 fail이 나올 수 밖에 없기때문이다.
if문과 함께 넣으면 사실 return앞에 else가 있는 것이나 마찬가지기 때문에, 첫번째 id값이 안맞으면 무조건 fail로 빠지게 되는 것이다.
때문에 if문이 제대로 검사할 수 있도록 아예 밖으로 빼주어야한다.