출처 : 반크_세계유산 경복궁
문제]
조건에 맞는 패스워드를 입력하는 프로그램을 작성하시오.
조건)
▶ 패스워드는 8자이상 20자 이하의 문자열로 작성하도록 한다.
▶ 패스워드를 작성할 때 대문자, 소문자, 숫자, 특수문자가 꼭 들어가도록 한다.
▶ 특수문자는 ~, !, #, $, &, _ 만 사용할 수 있다.
▶ 문자열 체크는 함수를 사용하시오.
▶ 패스워드에 조건에 맞는 문자가 없을 때는 해당 문자가 없다고 메세지를 출력하고 다시 입력하도록 한다.
▶ 조건에 맞는 패스워드면 사용가능한 패스워드라고 출력하고 프로그램을 종료하시오.
▶ 그외 출력 예를 참조하여 프로그램을 완성하시오.
출력 예)
PassWord를 입력하시오 : Ab1!
PassWord의 길이가 8~20자를 벗어납니다.
다시 입력하세요.
PassWord를 입력하시오 : ABCDEFGH
소문자, 숫자, 특수문자가 없습니다.
다시 입력하세요.
PassWord를 입력하시오 : AbCdEfGh
숫자, 특수문자가 없습니다.
다시 입력하세요.
PassWord를 입력하시오 : AbCdEfGh12
특수문자가 없습니다.
다시 입력하세요.
PassWord를 입력하시오 : AbCdEfGh12@
사용할 수 없는 특수문자를 입력하였습니다.
다시 입력하세요.
PassWord를 입력하시오 : abcdefgh
대문자, 숫자, 특수문자가 없습니다.
다시 입력하세요.
PassWord를 입력하시오 : a1#bcdef
대문자가 없습니다.
다시 입력하세요.
PassWord를 입력하시오 : Ab!12345
사용 가능한 PassWord입니다.
참고풀이]
#특수문자 체크함수
def Special(password):
speAll="`~!@#$%^&*()_="
spestr="~!#$&_"
chk1=chk2=False
for d in password:
#특수문자가 있는 지 체크한다.
for ca in speAll:
if d==ca:
chk1=True
#특수문자가 있다면
#조건의 특수문자가 있는 지 체크한다.
chk2=False
for c in spestr:
if d==c:
chk2=True
return chk1, chk2;
#소문자 체크함수
def Lower(password):
lowstr="abcdefghijklmnopqrstuvwxyz"
#소문자가 있는 지 체크한다.
chk=False
for d in password:
for c in lowstr:
if d==c:
chk=True
break
if chk: break
return chk;
#대문자 체크함수
def Upper(password):
upstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#대문자가 있는 지 체크한다.
chk=False
for d in password:
for c in upstr:
if d==c:
chk=True
break
if chk: break
return chk;
#숫자 체크함수
def Number(password):
numstr="0123456789"
#숫자가 있는 지 체크한다.
chk=False
for d in password:
for c in numstr:
if d==c:
chk=True
break
if chk: break
return chk;
#통합체크 함수
def Check(password):
Totstr=""
Tchk=False
S1str="대문자"
S2str="소문자"
S3str="숫자"
S4str="특수문자"
Count=0 #False의 개수를 센는 변수
#체크 결과를 받는다.
S1=Upper(password)
S2=Lower(password)
S3=Number(password)
S4, S5=Special(password)
#False의 개수를 센다.
if not S1: Count+=1
if not S2: Count+=1
if not S3: Count+=1
if not S4: Count+=1
#조건이 전부 참일경우(대문자, 소문자, 숫자, 특수문자)
if Count==0:
if S5:
Tchk=True
Totstr="사용 가능한 PassWord입니다."
else:
Tchk=False
Totstr="사용 할 수 없는 특수문자를 입력하였습니다."
else:
if Count>1:
#대문자가 없을경우
if not S1:
Totstr += S1str + ", "
#소문자가 없을 경우
if not S2:
Totstr += S2str + ", "
#숫자가 없을 경우
if not S3:
Totstr += S3str + ", "
#특수문자가 없을 경우
if not S4:
Totstr += S4str
else:
#대문자만 없을경우
if not S1:
Totstr += S1str
#소문자만 없을 경우
if not S2:
Totstr += S2str
#숫자만 없을 경우
if not S3:
Totstr += S3str
#특수문자만 없을 경우
if not S4:
Totstr += S4str
Totstr += "가 없습니다."
return Tchk, Totstr
#Main 부분
while True:
#패스워드를 입력한다.
password=input("PassWord를 입력하시오 : ")
if 8<= len(password) <=20:
chk, CheckStr=Check(password)
print(CheckStr)
if chk: break
else:
print("PassWord의 길이가 8~20자를 벗어납니다.")
print("다시 입력하세요.\n")
#password를 재발행하기 위하여 password를 초기한다.
password=""
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 여름
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 102제] 어파처! p278 도전문제 (0) | 2022.10.28 |
---|---|
Python 101제] 어파처! p229 도전문제 (0) | 2022.10.21 |
Python 99제] 어파처! p209 도전문제2. (0) | 2022.10.07 |
Python 98제] 어파처! p209 도전문제 1. (0) | 2022.10.07 |
Python 97제] 어파처! p207 도전문제. (0) | 2022.10.07 |
댓글