모듈 만들기
3개의 모듈을 만들어 보자. 여기서는 정규식을 이용해서 이메일과 비밀번호를 체크하는 간단한 프로그램을 만들어 볼것이다.
user_pwd.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import re
#정규식을 사용하기
def password_val_chk(pwd):
pass #아무 일도 하지 않는 구문,
if len(pwd) < 6 or len(pwd) > 12:
print(pwd, '의 길이가 이상합니다.')
return False
#for c in pwd:
#if not c.isnumeric() and not c.isalpha():
#print(pwd, '숫자와 영문자로만 구성되지 않음..')
#return False
if re.findall('[a-zA-Z0-9]+',pwd)[0] != pwd:
print(pwd, '숫자와 영문자로만 구성되지 않음..')
return False
#findall()함수의 반환값의 첫 번째 항목값이 pwd와 같은지 확인, 소문자,대문자,숫자를 연속해서 찾는 패턴임
#이 함수에서 반환한 리스트의 첫 항목이 pwd값과 일치하는지 확인한다. 얘는 반환이 lsit다
'''
upper = False
lower = False
for i in pwd:
if upper and lower: break
if i.isalpha():
if not upper:
upper = i.isupper()
if not lower:
lower = i.islower()
if not upper or not lower:
print(pwd, '영문 대문자와 소문자가 함꼐 존재하지 않음...')
return False
'''
if len(re.findall('[a-z]',pwd)) == 0 or len(re.findall('[A-Z]',pwd)) == 0:
print(pwd, '영문 대문자와 소문자가 함꼐 존재하지 않음...')
return False
print(pwd, '는 알맞는 비번입니다.')
return True
if __name__ == '__main__': #이 파일을 직접 실행할때!! (테스트용), 해당 함수를 외부에서 바로 호출할 때나
#다른 파이썬 파일이에서 호출하지 않고 해당파일을 직접 실행하는 경우에 블록문 실행
password_val_chk('23jke')
password_val_chk('432kdm123')
password_val_chk('200j@9k_90')
password_val_chk('3klQLe392')
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
주석부분은 정규식을 사용하지 않았을 때 일일이 대소문자를 구분하고 있다. 하지만 정규식을 사용해보자.
정규식은 import re 로 모듈을 임포트하고 findall() 함수로 패턴은 소문자(a-z), 대문자(A-Z), 숫자(0-9)를 연속해서(+) 찾는 패턴이다. 이 findall()에 대한 사용법과 내용은 래퍼런스를 참고하면 좋을 것 같다.
아래의 if len(~~~) 도 같다. 영문 대문자와 소문자가 함께 존재하지 않는것을 찾고 있다.
이번에는 이메일에 대한 코드를 살펴보자.
user_email.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import re
def email_val_chk(email):
if re.findall(r'[\w.-]+@[\w.-]+.\w+',email)[0] != email:
print('이메일 형식이 맞지 않습ㄴㅣ다')
return False
#raw포맷으로 문자를 인식하겠다는 뜻, 정규식에 역 슬래시가 있는 패턴을 사용하기위해 r을 붙임
#[\W.-]+ 는 영문 대소문자와 언더바, 점, 빼기 기호를 연속으로 찾는다.
print(email,' <---형식에 맞음')
return True
if __name__ == '__main__':
email_val_chk('#@c#o@gmail*on')
email_val_chk('vhxpffltm@naver.com')
|
이 코드도 정규식을 사용하였다. 어떤 내용인지만 살펴보자. 첫 번째 인자에 'r' 문자는 앞으로 나올 문자열에 파이썬 문자열 특수 기호를 인식하지 않고 raw 포맷으로 인식하겠다는 뜻이다. 정규식에 역 슬래쉬(\) 기호가 들어가 있는 패턴을 사용하려면 이 'r'을 붙이도록 하자.
@ 앞까지 보면 [\w.-]+는 영문 대소문자와 언더 바(_), 점 기호, 빼기 기호(-)를 연속으로 찾고 있다. 즉, @까지 해당 기호들을 찾고 @를 찾은 다음 이전과 같은 패턴을 연속으로 찾고 점 기호(.) 를 찾는 이메일의 조건을 찾고 있는 것이다.
사용자 클래스 만들기
사용자로부터 입력 받은 이메일과 비번은 같은 사용자로 묶여 있다. 이 필드를 가지고 있는 클래스를 만들어본다. 그리고 위의 이메일과 비번 체크파일을 가지고 올바른지 확인해 본다.
user_manage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import user_email as ue
import user_pwd as upr
class User:
def __init__(self,email,pwd): #초기화 함수 재정의
self.email = email
self.check_val() #입력한 이메일 주소 및 비번 검증
def check_val(self):
ue.email_val_chk(self.email)
upr.password_val_chk(self.pwd)
#인자값으로 인스턴스 변수가 들어간다.
if __name__ == '__main__':
#객체 생성,
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
아까 만든 두 모듈을 탑재한다. 그리고 User 라는 클래스를 선언하였다.
초기화 함수를 재정의하여 두 개의 인자 값을 추가로 받아 User 인스턴스 변수로 만들었다. 그리고 클래스 내부함수를 호출한다.
클래스의 내부함수를 선언하여 이전에 구현한 두 도뮬의 함수를 호출한다. 이 파일을 직접 실행하여 User 클래스의 인스턴스를 만들어서 2개의 인자를 가지는 이메일과 비번을 user01변수에 넣어 확인해보자.
이것이 유효한 이메일과 비번인지 확인할 수 있다.
이것으로 정규식에 대해 간단하게 살펴보고 직접 사용자 클래스를 만들어 어떻게 이루어지고 동작했는지 확인하였다. 이것으로 클래스에 대해 이해가 잘 되었다고 생각한다.
두 인스턴스 변수에 대한 결과는 아래와 같다.
'python' 카테고리의 다른 글
[Python]리스트 기본, split, 슬라이싱, 부분집합(Powerset) 구하기 (0) | 2019.09.10 |
---|---|
[python] 람다식(lambda) map (0) | 2019.08.26 |
[python] 파이썬 모듈_Module (0) | 2019.08.26 |
[python] 파이썬 클래스 (0) | 2019.08.13 |
[python] 파이썬 함수, Type(리스트, 튜플, dictionary) (0) | 2019.08.13 |