関数や文字列の入力を受け取り、プログラムを書く、タイトルケースには、英語の月名を完全に綴ら:January
、February
、March
、など(ヌル/ CR / LFは、あなたがそう選択した場合は[OK]を、いくつかの非英字で区切ら終了)のいずれか
2つの入力を比較し、2番目の入力が最初の入力よりも大きい場合(月順)に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]
、答えとして禁止したいと思います。月の名前のリストには、ランダムに生成された文字列よりもチャレンジを簡単/難しくする、より独特な機能(可変長、共通性)があります。