Python 실습 | 이메일 유효성 검사

2024. 12. 16. 17:24·Python

 

문제 1.  이메일 유효성 검사

1. 출제의도

  • 문자형 자료형의 메소드를 사용할 수 있다.
  • 조건문,반복문, 함수형을 완벽하게 이해하여 기능을 구현할 수 있다.

2. 배경

당신은 고객 데이터를 수집하고 정리하는 과정에 있습니다. 확인해보니 회원가입 시 이메일 유효성 검사가 기능으로 구현되어있지 않음을 확인했습니다. 이를 보완하기 위하여 이메일 유효성 검사 기능을 만들려고 합니다.

 

3. 요구사항

  • 이메일은 ID와 골뱅이, 도메인 3가지 요소로 구성 되어있습니다.
    • 이메일은 하나의 @ 기호를 포함해야하며, @ 기준으로 ID와 도메인으로 나눠집니다.
    • ID는 어떠한 문자든 숫자든 허용됩니다. 최소한 1자리가 존재 해야합니다.
    • 도메인 역시 어떠한 문자나 숫자를 허용합니다. 단, 접미사는 `.com `,` .co.kr `만 허용합니다.(문제풀이 편의성)
    • 이메일 주소 리스트 `email_list` 를 입력받아 각 이메일의 유효성을 검사하는 함수 `check_email` 함수를 완성합니다.
  • 유효한 이메일인 경우 “유효한 이메일입니다” 라고 출력합니다.
  • 유효하지 않은 이메일인 경우 “유효하지 않은 이메일입니다.” 라고 출력하며 그 이유를 함께 출력합니다.
    • ex) “ID가 누락”, “@ 가 누락”, “적절하지 않은 도메인”

4. Skeleton Code

email_list = [
    "example@example.com",  # 유효한 이메일
    "yangbujang@email.co.kr",  # 유효한 이메일
    "iamhungry.com",  # 틀린 이메일 -> @ 누락
    "@da.com",  # 틀린 이메일 -> ID 누락
    "daislove@isnit",  # 틀린 이메일 -> 도메인 잘못됨
]

def check_email(email_list):
		'''
		여기에 들어갈 코드를 작성하세요
		'''
check_email(email_list)

 

5. 출력 예시

'''
유효한 이메일입니다: 'example@example.com'
유효한 이메일입니다: 'yangbujang@email.co.kr'
유효하지 않은 이메일입니다: 'iamhungry.com' 이유: '@가 누락'
유효하지 않은 이메일입니다: '@da.com' 이유: 'ID가 누락'
유효하지 않은 이메일입니다: 'daislove@isnit'  이유: '적절하지 않은 도메인'
'''

💡 문제 풀이 

`처음풀이`

email_list = [
    "example@example.com",  # 유효한 이메일
    "yangbujang@email.co.kr",  # 유효한 이메일
    "iamhungry.com",  # 틀린 이메일 -> @ 누락
    "@da.com",  # 틀린 이메일 -> ID 누락
    "daislove@isnit",  # 틀린 이메일 -> 도메인 잘못됨
]

def check_email(email_list): # check_email이라는 함수 생성
    for email in email_list:
      if '@' not in email:  # 이메일이 유효x '@가 누락'
        print(f"유효하지 않은 이메일입니다: '{email}' 이유: @가 누락")
        
      else:
        id, domain = email.split('@')

        if len(id) < 0:  # 이메일이 유효x 'ID가 누락'
          print(f"유효하지 않은 이메일입니다: '{email}' 이유: ID가 누락")
        elif domain.endswith('.com') or domain.endswith('.co.kr') != True:  # 이메일이 유효x '적절하지 않은 도메인'
          print(f"유효하지 않은 이메일입니다: '{email}' 이유: 적절하지 않은 도메인")
        else:  # 이메일이 유효함
          print(f"유효한 이메일입니다: '{email}'")

check_email(email_list)

 

 

 

`더 나은 풀이`

email_list = [
    "example@example.com",  # 유효한 이메일
    "yangbujang@email.co.kr",  # 유효한 이메일
    "iamhungry.com",  # 틀린 이메일 -> @ 누락
    "@da.com",  # 틀린 이메일 -> ID 누락
    "daislove@isnit",  # 틀린 이메일 -> 도메인 잘못됨
]

def check_email(email_list):
    for email in email_list:
        if '@' not in email:  # @가 없는 경우
            print(f"유효하지 않은 이메일입니다: '{email}' 이유: '@가 누락'")
            continue

        id, domain = email.split('@',1)  # @ 기준으로 분리

        if not id:  # ID가 없는 경우
            print(f"유효하지 않은 이메일입니다: '{email}' 이유: 'ID가 누락'")
            continue

        if not (domain.endswith('.com') or domain.endswith('.co.kr')):  # 도메인이 잘못된 경우
            print(f"유효하지 않은 이메일입니다: '{email}' 이유: '적절하지 않은 도메인'")
        else:  # 유효한 이메일
            print(f"유효한 이메일입니다: '{email}'")

check_email(email_list)
  • `if not` 활용
    :
    if len(id) <0: 이 아닌 if not id:를 써서 id가 없는 경우를 표현할 수 있음
  • `in` 활용 (특정 문자 포함 여부 체크)
    : elif domain.endswith('.com') or domain.endswith('.co.kr') != True: 와 같이 !=True 구문 대신 if not (domain.endswith('.com') or domain.endswith('.co.kr')) 으로 깔끔하게 표현할 수 있음
  • `continue` 활용
    : 처음 if문에서 조건을 만족하면 아래 구문을 무시. elif로 계속 들여쓰기 하는 것보다 간단. 

 

`오답노트`

  • '@가 없는 경우'를 제일 우선 순위로 체크해야 했는데 아래쪽에 조건을 걸어서 세번째에 있던 "iamhungry.com"가 계속 처리 안 되고 오류났음
  • 문법 복습 필요.. 'email_list 안에 있는 요소들에 대해서 확인을 할 것이고 그 요소는 @를 기준으로 id와 domain으로 나뉜다'는 걸 표현하기 위해 아래 구문을 쓰는데까지 진짜 오래 걸렸다..
    for email in email_list:
      id, domain = email.split('@')
  • if문에 or 걸어도 됨
  • == True로 써야 하는데 =True로 써서 오류남
  • 파이썬 `startswith()`, `endswith()` 함수 : 문자열 시작 문자, 끝 문자를 검색하는 함수
# 기본 형태
# 문자열A가 문자열X로 시작하는지 여부를 True / False 형식으로 반환하는 경우
문자열A.startswith(문자열X)

# 문자열B가 문자열Y로 끝나는지 여부를 True/False 형식으로 반환하는 경우
문자열B.endswith(문자열Y)
 

[Python] startswith(), endswith() : 문자열 시작 문자, 끝 문자로 검색하는 함수

* 본 포스팅은 Python 3.8.6, Jupyterlab >= 3.0 의 환경에서 만들어졌습니다. 1. startswith()...

blog.naver.com

  • 파이썬 `split함수` : 문자열을 특정 구분자를 기준으로 나누는 함수 
# split함수 기본 형태
나눌문자.split('나누는 기준이 될 문자',몇 번 나눌지 숫자)

# 올바른 경우
"name@example.com".split('@', 1)  # 결과: ["name", "example.com"]
"name@example.com".split('@')    # 결과: ["name", "example.com"]

# 잘못된 경우
"name@subdomain@example.com".split('@', 1)  # 결과: ["name", "subdomain@example.com"]
"name@subdomain@example.com".split('@')    # 결과: ["name", "subdomain", "example.com"]

 

 

'Python' 카테고리의 다른 글
  • Python 공부 | 알면 유용한 파이썬 문법
  • Python 공부 | 함수
  • Python 실습 | 짝수 판별, 제품 재고 관리
  • Python 공부 | 조건문(if, elif, else) 반복문(for, while)
초담
초담
4년차 마케터입니다
  • 초담
    그로스마케터의 기록
    초담
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (117)
      • Data Analytics Project (3)
      • SQL (55)
      • Python (43)
      • GA4 (0)
      • Tableau (8)
      • 아티클 스터디 (7)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
초담
Python 실습 | 이메일 유효성 검사
상단으로

티스토리툴바