함수 또는 문자열 입력을합니다 프로그램을 작성, 제목의 경우, 영어 월 이름을 완전히 철자 : January
, February
, March
, 등 (널 / CR / LF가 그렇게 선택하는 경우 OK, 일부 비 알파 문자로 구분 종료) 및 중
두 번째 입력이 첫 번째보다 큰 경우 (월 순서로) Truthy 값을 반환하여 두 입력을 비교합니다. 값이 같으면 Falsey 값이됩니다.
또는 순서대로 임의 순서 (목록, 구분 문자열 등)를 정렬합니다.
(도전의 요점은 올바른 사전 형 정렬을 제공하는 방법 / 표현을 정의하는 것입니다. 일부 언어는 둘 중 하나에 대한 답변이 더 짧을 수 있습니다)
내부 시간 구문 분석 방법 (예 :)을 사용 strptime
하여 월 이름을 숫자 또는 미리 작성된 월 이름 매핑으로 변환 할 수 없습니다 . 문자열 자체의 속성, 정의한 포용적인 룩업 테이블 또는 영리한 것을 사용하십시오.
예
기능 예제, 첫 번째 규칙에 의해 금지되어 있지만 ...
import datetime
def is_later_month(a, b):
'''
Example of prohibited code because it relies on language
features about how to parse month names
'''
return datetime.strptime(a, '%B') < datetime.strptime(b, '%B')
우리가 그 정보를 코딩하기 때문에 아래 버전은 괜찮습니다.
months = {
'January': 1, 'February': 2, 'March': 3,
'April': 4, 'May': 5, 'June': 6,
'July': 7, 'August': 8, 'September': 9,
'October': 10, 'November': 11, 'December': 12,
}
def is_later_month(a, b):
"""
Returns True/False when comparing two months.
"""
return months[a] < months[b]
또는 정렬 기능을 수행 할 수 있습니다
months = {'as above...'}
def sort_months(l):
"""
Sorts list and returns it. Different input and output than the above,
but equally valid. Sorting versus comparing might be shorter in your
favorite language.
"""
return sorted(l, key=lambda x: months[x])
테스트 예
assert is_later_month('January', 'February')
assert is_later_month('January', 'December')
assert is_later_month('November', 'December')
assert not is_later_month('July', 'July')
assert not is_later_month('October', 'September')
months
에 모든 월 이름 목록이 내장 months[x] < months[y]
되어 있다면 대답 으로 금지하고 싶습니다 . 월 이름 목록에는 좀 더 특이한 기능 (가변 길이, 공통성)이있어 무작위로 생성 된 문자열보다 더 어렵고 어렵습니다.