one step
[파이썬] 문자열 유효성 검사 (비밀번호, 윤년) 본문
반응형
비밀번호와 생일
비밀번호와 생일이 올바른 형식을 갖췄는지 확인하는 함수를 작성합니다.
작성해야 할 함수는 다음과 같습니다.
validate_password(): 문자열 password를 매개변수로 받습니다
문자열이 8자 이상이고, 숫자, 영어 대문자, 영어 소문자를 모두 포함하고 있으면 True, 하나라도 만족하지 않으면 False를 return 합니다.
validate_birthday(): 3개의 정수로 이루어진 튜플 birthday를 매개변수로 받습니다.
각각 연, 월, 일에 해당합니다.연도는 1900 이상 2018 이하의 숫자이며, 월/일은 존재하는 조합이어야 합니다. 이 조건을 만족하면 True, 아니면 False를 return 합니다.
아래의 is_leap_year() 함수를 이용합니다.
is_leap_year(): 연도에 해당하는 정수 year를 매개변수로 받습니다. 주어진 연도가 윤년이면 True, 아니면 False를 return 합니다.
윤년의 기준은 다음과 같습니다.
연도가 4의 배수이면 윤년
그러나, 100의 배수이면 윤년이 아님
그러나, 400의 배수이면 윤년
1년은 365일이지만, 윤년의 경우는 1일이 더 많은 366일이며, 이 늘어난 1일에 해당하는 2월 29일이 존재합니다.
즉, 1932년은 윤년이지만, 1900년은 윤년이 아니고, 2000년은 윤년입니다.
이 프로젝트의 함수를 완성하기 위해 아래의 파이썬 기본 변수들을 사용하세요.
string.digits: 0부터 9까지의 숫자로 이루어진 문자열입니다.
string.ascii_uppercase: A부터 Z까지의 알파벳 대문자로 이루어진 문자열입니다.
string.ascii_lowercase: a부터 z까지의 알파벳 소문자로 이루어진 문자열입니다.
주어진 코드를 수정하여 함수를 완성해 보세요.
# 초기 코드
import string
def validate_password(password):
# 문자열이 8자 이상인지 확인합니다.
is_long = False
pass
# 문자열에 숫자가 포함되어 있는지 확인합니다.
includes_digit = False
for digit in None:
pass
# 문자열에 알파벳 대문자가 포함되어 있는지 확인합니다.
includes_upper = False
for char in None:
pass
# 문자열에 알파벳 소문자가 포함되어 있는지 확인합니다.
includes_lower = False
for char in None:
pass
return None
def validate_birthday(birthday):
year, month, day = birthday
# 연도가 조건에 맞는지 확인하고, 아니면 False를 return 합니다.
if None:
return False
# 달이 31일까지 있는 경우, 날짜가 유효한지 체크합니다.
if month in [1, 3, 5, 7, 8, 10, 12]:
pass
# 달이 30일까지 있는 경우, 날짜가 유효한지 체크합니다.
elif month in [None]:
pass
# 2월인 경우, 날짜가 유효한지 체크합니다.
else:
pass
def is_leap_year(year):
# 조건 1
if None:
return None
# 조건 2
elif None:
return None
# 조건 3
elif None:
return None
# 모두 아닌 경우
else:
return None
# 여러분의 코드를 직접 테스트해 보세요.
is_password_valid = validate_password("qwerty!")
print(is_password_valid)
is_birthday_valid = validate_birthday((1988, 2, 30))
print(is_birthday_valid)
is_2000_leap = is_leap_year(2000)
print(is_2000_leap)
import string
def validate_password(password):
# 문자열이 8자 이상인지 확인합니다.
is_long = False
if len(password) < 8:
is_long = False
else:
is_long = True
# 문자열에 숫자가 포함되어 있는지 확인합니다.
includes_digit = False
arr_digit = []
for digit in password:
if digit in string.digits:
arr_digit.append(digit)
if len(arr_digit) < 1:
includes_digit = False
else:
includes_digit = True
# 문자열에 알파벳 대문자가 포함되어 있는지 확인합니다.
includes_upper = False
arr_upper = []
for char in password:
if char in string.ascii_uppercase:
arr_upper.append(char)
if len(arr_upper) < 1:
includes_upper = False
else:
includes_upper = True
# 문자열에 알파벳 소문자가 포함되어 있는지 확인합니다.
includes_lower = False
arr_lower = []
for char in password:
if char not in string.ascii_lowercase:
arr_lower.append(char)
if len(arr_lower) < 1:
includes_lower = False
else:
includes_lower = True
if includes_upper != True or includes_lower != True or is_long != True or includes_digit != True:
return False
else:
return True
def validate_birthday(birthday):
year, month, day = birthday
# 연도가 조건에 맞는지 확인하고, 아니면 False를 return 합니다.
if year < 1900 and year > 2018:
return False
else:
return True
# 달이 31일까지 있는 경우, 날짜가 유효한지 체크합니다.
if month in [1, 3, 5, 7, 8, 10, 12]:
if day > 31 and day < 1:
return False
else:
return True
# 달이 30일까지 있는 경우, 날짜가 유효한지 체크합니다.
elif month in [4, 6, 9, 11]:
if day > 30 and day < 1:
return False
else:
return True
# 2월인 경우, 날짜가 유효한지 체크합니다.
else:
if not is_leap_year(year) and day > 28 and day < 1:
return false
else:
return True
def is_leap_year(year):
if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
return True
else:
return False
# 여러분의 코드를 직접 테스트해 보세요.
is_password_valid = validate_password("qwerty!")
print(is_password_valid)
is_birthday_valid = validate_birthday((1988, 2, 30))
print(is_birthday_valid)
is_2000_leap = is_leap_year(2000)
print(is_2000_leap)
효율화는 일단 미루고...
문제 전제 중 일부가 수정되어야 한다.
윤년의 조건이
- 4의 배수이면서 100의 배수가 아니고
- 400의 배수일 것
반응형
'이것저것 코드 > 파이썬' 카테고리의 다른 글
[파이썬] 꺾은선 그래프 그리기 (토끼그림) (0) | 2022.09.08 |
---|---|
[파이썬] 문자열 검증하기 (islower, startswith, datetime) (0) | 2022.09.08 |
[파이썬] 게시물에 반응하기 - 페이스북 좋아요/화나요 댓글 반응 (0) | 2022.09.04 |
[파이썬] 댓글 좋아요 누른 사람 세기 (중복체크 포함) (1) | 2022.09.02 |
[파이썬] 이메일 주소 유효성 검사 (0) | 2022.09.01 |