Schreiben Sie eine Funktion oder ein Programm , das String - Eingänge nimmt, voll Dinkel, Englisch Monatsnamen in Titel Fall: January
, February
, March
usw. (null / CR / LF beendet OK, mit einigen nicht-alpha Zeichen begrenzt , wenn Sie so wählen) und entweder
vergleicht zwei Eingaben und gibt einen Wahrheitswert zurück, wenn die zweite Eingabe größer ist (in Monatsreihenfolge) als die erste. Gleiche Werte führen zu einem falschen Wert
oder sortiert eine beliebige Reihenfolge (Liste, durch Trennzeichen getrennte Zeichenfolge usw.) in chronologischer Reihenfolge
(Der Kern der Herausforderung besteht darin, eine Methode / einen Ausdruck zu definieren, die / der die richtige lexikografische Sortierung ergibt. Einige Sprachen haben möglicherweise eine kürzere Antwort auf die eine oder die andere)
Sie können keine internen Zeitanalyse-Methoden verwenden (z. B. strptime
), um den Monatsnamen in eine Zahl oder eine vordefinierte Zuordnung von Monatsnamen zu übersetzen. Verwenden Sie die Eigenschaften der Zeichenfolgen selbst, eine von Ihnen definierte sparsame Nachschlagetabelle oder eine clevere Funktion.
Beispiel
Funktionsbeispiele, obwohl das erste durch die Regeln verboten ist ...
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')
Die folgenden Versionen sind jedoch in Ordnung, da wir diese Informationen codieren
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]
Oder Sie könnten eine Sortierfunktion ausführen
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])
Beispieltests
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
Liste aller Monatsnamen hätte, würde ich dies months[x] < months[y]
als Antwort verbieten wollen . Die Liste der Monatsnamen enthält einige Besonderheiten (unterschiedliche Länge, Gemeinsamkeiten), die die Herausforderung bei zufällig generierten Zeichenfolgen erleichtern / erschweren.