HOWTO · Python
Konvertieren Sie Integer in Python in römische Zahlen
In diesem Tutorial lernen Sie, eine ganze Zahl in Python in römische Zahlen umzuwandeln.
Auf dieser Seite
Römische Zahlen verwenden sieben Symbole: I steht für 1, V für 5, X für 10, L für 50, C für 100, D für 500 und M für 1.000. Steht ein kleineres Symbol vor einem größeren, wird es abgezogen: IV steht für 4 und IX für 9. Nach demselben Muster entstehen XL (40), XC (90), CD (400) und CM (900). Ein gieriger Konverter verwendet diese Kombinationen, damit keine ungültigen Wiederholungen wie XXXX für 40 entstehen.
Ganze Zahlen in Python in römische Zahlen umwandeln
Die folgende Funktion speichert Symbol-Wert-Paare in absteigender Reihenfolge. Bei jedem Schritt hängt sie ein Symbol an, solange die verbleibende Zahl mindestens dem zugehörigen Wert entspricht, und zieht diesen Wert anschließend ab. Sie durchläuft die gesamte Zuordnung, sodass ein Wert bei Bedarf mehrfach verwendet werden kann. Der übliche Eingabebereich für römische Zahlen ist 1–3.999. Die Funktion prüft die Obergrenze nicht; bei Zahlen über 3.999 wiederholt sie M und kann dadurch eine nicht standardisierte Zahlendarstellung zurückgeben.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
roman_map = [
(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"),
(100, "C"), (90, "XC"), (50, "L"), (40, "XL"),
(10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I"),
]
def into_roman(num=42):
result = ""
for value, symbol in roman_map:
while num >= value:
result += symbol
num -= value
return result
print(into_roman())
XLII
Dieses Beispiel wandelt 42 in XLII um: Zuerst verwendet die Zuordnung 40 als XL, danach zweimal I für den Rest 2. Übergeben Sie into_roman(num) eine andere positive ganze Zahl, um einen weiteren Wert im üblichen Bereich umzuwandeln. Die while-Schleife der Funktion hängt ein Symbol wiederholt an, wenn ein Wert mehrfach vorkommt; anschließend berücksichtigt die äußere for-Schleife kleinere Werte. Bei 0 oder einer negativen ganzen Zahl gibt die Funktion eine leere Zeichenfolge zurück, da sie Werte nur verarbeitet, solange num größer als null ist. Für null gibt es in römischen Zahlen kein Standardsymbol. Prüfen Sie daher in Ihrer Anwendung den Wertebereich, wenn solche Eingaben abgelehnt werden sollen.
Ganze Zahlen in Python mithilfe der Division in römische Zahlen umwandeln
Ein zweiter Ansatz verwendet ganzzahlige Division und den Rest. Er durchläuft dieselben 13 Werte in absteigender Reihenfolge. Für jeden Wert gibt num // value an, wie oft das zugehörige Symbol hineinpasst; der Rest aus num % value wird im nächsten Schritt weiterverarbeitet. Diese Variante erzeugt dieselbe Zahlendarstellung und macht dabei Quotient und Rest ausdrücklich sichtbar. Wie die erste Funktion ist sie für den üblichen Bereich von 1–3.999 vorgesehen und setzt die Obergrenze nicht durch. Bei Zahlen über 3.999 wiederholt sie M und kann dadurch eine nicht standardisierte Zahlendarstellung zurückgeben.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
roman_map = {
1000: "M", 900: "CM", 500: "D", 400: "CD",
100: "C", 90: "XC", 50: "L", 40: "XL",
10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I",
}
order = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
def into_roman_by_division(num=42):
result = ""
for value in order:
quotient, num = divmod(num, value)
result += roman_map[value] * quotient
return result
print(into_roman_by_division())
XLII
Bei 42 hat der Eintrag für 40 den Quotienten 1 und lässt den Rest 2 übrig; der Eintrag für 1 steuert anschließend zwei I-Symbole bei, sodass XLII entsteht. Die Schleife durchläuft weiterhin jeden Wert, auch wenn sein Quotient 0 ist, und divmod aktualisiert den Rest für den nächsten Wert. Wie die erste Funktion ist auch diese Implementierung für positive ganze Zahlen vorgesehen: Bei 0 gibt sie eine leere Zeichenfolge zurück, und bei einer negativen ganzen Zahl entspricht Pythons Abrundung bei der Division keiner Subtraktion für römische Zahlen. Prüfen Sie bei externen Eingaben vor dem Aufruf einer der beiden Funktionen, ob der Wert im unterstützten Bereich liegt.