☑️문제4) 이메일 유효성 검사
[문제]
- 회원가입 시 이메일 유효성을 검사하는 기능을 함수로 구현
email_list = [
"example@example.com", # 유효한 이메일
"yangbujang@email.co.kr", # 유효한 이메일
"iamhungry.com", # 틀린 이메일 -> @ 누락
"@da.com", # 틀린 이메일 -> ID 누락
"daislove@isnit", # 틀린 이메일 -> 도메인 잘못됨
]
''' #출력값
유효한 이메일입니다: 'example@example.com'
유효한 이메일입니다: 'yangbujang@email.co.kr'
유효하지 않은 이메일입니다: 'iamhungry.com' 이유: '@가 누락'
유효하지 않은 이메일입니다: '@da.com' 이유: 'ID가 누락'
유효하지 않은 이메일입니다: 'daislove@isnit' 이유: '적절하지 않은 도메인'
'''
[문제 해결]
- 매개변수로 리스트를 받아 배열을 순회하면서 유효하지 않을때 유효할때 조건문 생성.
- 조건1) 유효 X : @누락
- 조건2) 유효 X : ID 누락
- 조건3) 유효 X : 도메인 누락
- email.endswith(('.com', 'co.kr')) == False:
- elif i.find('.com')==-1 and i.find('.co.kr')==-1:
- 조건4) 그 밖에 유효O
- 리스트 배열에 원하는 값이 없을때 → `.FIND == -1` FIND 메소드가 -1 값이 없을때를 조회
▼ 시퀀스(배열)형 에서 특정 `값` 의 인덱스 찾기 : `.FIND()` `.INDEX()`
더보기
더보기
- find 메소드 : 값의 인덱스를 찾아주는데, 해당 값이 없을 경우 -1반환, 있을 경우 첫번째 인덱스 반환
- index 메소드 : 값의 인덱스를 찾아주는데, 해당 값이 없을 경우 valueerror 에러
- https://wikidocs.net/13
▼ 시퀀스(배열)형에서 특정 값 기준으로 나누기 & 출력하기 :`.SPLIT()`
더보기
더보기
- split('a’,n) : a 를 기준으로 n번 쪼갠다는 뜻. 이후 a 가 또 나와도 쪼개 지지 않음.
- ex. a= cookiki @fdia@fndioag
- a.split('@',1) : @ 를 1번 쪼갠다는 뜻.
- [out] : (’cookiki’,’fdia@fndioag’)
- 스플릿 한 값 저장 : 튜플 형식으로 저장 됨. 여러개 변수에 저장 가능
- ex. (’cookiki’,’fdia@fndioag’)
- id_part,domain_part = email.split('@')
- 단, @가 2개 이상 포함되어있어 3개이상으로 쪼개질 경우, 할당한 변수 부족 → 에러 → 스플릿 메소드 사용시 두번째 인자 활용
▼ .startwith(특정 문자) & .endswith(특정문자) 메서드
더보기
더보기
- a.startswith(특정문자) : 시퀀스a 가 특정 문자로 시작하는지 확인하는 함수
- a.endswith(특정문자) : 시퀀스a 가 특정 문자로 끝나는지 확인하는 함수
- return 값은 True(한다) or False(안한다)
- 확인해야하는 특정 문자 (인자) 가 2개 이상일때 튜플로 인자 전달 startswith((a,b))
- ex. str = '아무개'
- print( str.endswith('개') )
- # True 출력
email_list = [
"example@example.com", # 유효한 이메일
"yangbujang@email.co.kr", # 유효한 이메일
"iamhungry.com", # 틀린 이메일 -> @ 누락
"@da.com", # 틀린 이메일 -> ID 누락
"daislove@isnit", # 틀린 이메일 -> 도메인 잘못됨
]
#1. 방법
def check_email(email_list):
for i in email_list:
if len(i.split('@')[0])==0: #id 누락된 경우
print(f"유효하지 않은 이메일입니다: '{i}' 이유: \'ID가 누락\'")
elif i.find('@')==-1: #@ 누락
print(f'유효하지 않은 이메일입니다: "{i}" 이유: \'@가 누락\'')
elif i.find('.com')==-1 and i.find('.co.kr')==-1: #도메인 오류
print(f"유효하지 않은 이메일입니다: '{i}' 이유: '적절하지 않은 도메인'")
else:
print(f"유효한 이메일입니다: '{i}'")
check_email(email_list)
#2. 방법
def check_emai(email_list):
for email in email_list:
if '@' not in email:
print(f'유효하지 않은 이메일입니다. {email}, 이유: @가 누락')
elif not email.split('@')[0]: # if True/False
print(f'유효하지 않은 이메일입니다 {email} 이유: id 누락')
elif email.endswith(('.com','.co.kr'))==False:
print(f'유효하지 않은 이메일입니다 {email} 이유: 적절하지 않은 도메인')
else:
print(f'유효한 이메일입니다: {email}')
☑️문제5) 고객 데이터 관리 시스템
[문제]
- 각 고객의 이름, 이메일, 포인트 점수를 관리하고, 포인트 점수를 추가하거나 감소 시킬 수 있는 기능이 필요합니다. 각 고객의 이름, 이메일, 포인트 점수를 관리하고, 포인트 점수를 추가하거나 감소 시키는 메소드를 구현하세요.
- Customer 클래스는 고객의① 고객의 이름, ② 이메일, ③ 포인트 점수를 속성으로 가집니다.
- join_customer , add_points, reduce_points 메소드를 구현합니다.
- join_customer: 고객의 이름, 이메일, 포인트를 설정합니다. 첫 포인트는 100점을 상수로 받습니다.
- add_points(amount): 주어진 양만큼 포인트 점수를 추가합니다.
- reduce_points(amount): 주어진 양만큼 포인트 점수를 감소시킵니다. 단, 포인트 점수가 감소될 때, 포인트 점수가 음수가 되지 않도록 합니다.
'''
정상적으로 추가되었습니다. 현재 포인트는 150
정상적으로 차감되었습니다. 현재 포인트는 130
포인트를 모두 사용하였습니다. 현재 포인트는 0
'''
[문제 해결]
- Customer 클래스 생성 후 join_customer 초기 메소드 정의
- add_points / reduce_points 메소드 정의
class Customer: #클래스 생성
def join_customer (self,name,email,points): # 할당받을 초기 메서드 정의
self.name = name
self.email = email
self.points = points
def add_points(self,amount): # 포인트 값 누적합 메서드 정의
self.points += amount #self.points 는 초기값 받아서 연산
print(f'정상적으로 추가되었습니다. 현재 포인트는 {self.points}')
def reduce_points(self,amount):
if self.points >= amount: # 잔액이 입력값보다 클때 (=양수)
self.points -= amount
print(f'정상적으로 차감되었습니다. 현재 포인트는 {self.points}')
else: #잔액이 입력값보다 작을 때(음수)
self.points=0
print(f'포인트를 모두 사용하였습니다. 현재 포인트는 {self.points}')
customer1 = Customer() #객체 생성
customer1.join_customer("Alice", "alice@example.com", 100) # 초기값 할당
customer1.add_points(50) #return 은 안했으니 print 하면 0이 출력 됨.
customer1.reduce_points(20)
customer1.reduce_points(150)
#__init__ 초기 메소드 정의
customer1 = Customer("Alice", "alice@example.com", 100) 로 함수 호출 한다면,
class Customer: #클래스 생성
def __init__ (self): # 할당받을 초기 메서드 정의
self.name = ''
self.email = ''
self.points = 0
def join_customer (self,name,email,points): # 할당받을 초기 메서드 정의
self.name = name
self.email = email
self.points = points
'PYTHON' 카테고리의 다른 글
코테 준비 | 프로그래머스 정수 내림차순으로 배치하기/정수 제곱근 판별 (Sorted/Join/Range) (0) | 2024.12.17 |
---|---|
실습3 | 이상치 검사하기 ( IQR 기반/ numpy 라이브러리) (0) | 2024.12.16 |
실습1 | 제어문 (FOR & IF) 과 시퀀스(LIST & DICTIONARY &STRING) 문제풀이 (1) | 2024.12.16 |
코테 준비 | 프로그래머스 x만큼 간격이 있는 n개의 숫자 / 없는 숫자 더하기 (0) | 2024.12.16 |
코테 준비 | 프로그래머스 조건문 & 반복문 문제 풀이 (0) | 2024.12.11 |