Python Programming

Effiziente Umwandlung von Integer in Römische Zahlen in Python

Spread the love

Dieser Artikel untersucht zwei Python-Methoden zur Umwandlung von Integern in römische Zahlen. Wir werden einen einfachen iterativen Ansatz und eine effizientere Methode unter Verwendung der ganzzahligen Division untersuchen.

Inhaltsverzeichnis

  1. Iterativer Ansatz zur Integer-zu-Römisch-Umwandlung
  2. Effiziente Umwandlung mittels ganzzahliger Division

Iterativer Ansatz zur Integer-zu-Römisch-Umwandlung

Diese Methode verwendet ein Dictionary, das römische Ziffern ihren ganzzahligen Werten zuordnet, und iteriert darüber, um die römische Zifferndarstellung zu erstellen. Subtraktive Notation (wie IV für 4) wird explizit behandelt.


def int_to_roman_iterative(num):
    """Wandelt eine ganze Zahl in ihre römische Zifferndarstellung unter Verwendung von Iteration um.

    Args:
        num: Die umzuwandelnde ganze Zahl (muss zwischen 1 und 3999 inklusive liegen).

    Returns:
        Die römische Zifferndarstellung der ganzen Zahl oder None, wenn die Eingabe ungültig ist.
    """
    if not 1 <= num = value:
            result += symbol
            num -= value
    return result

# Beispiel Verwendung
print(int_to_roman_iterative(3))   # Ausgabe: III
print(int_to_roman_iterative(4))   # Ausgabe: IV
print(int_to_roman_iterative(9))   # Ausgabe: IX
print(int_to_roman_iterative(58))  # Ausgabe: LVIII
print(int_to_roman_iterative(1994)) # Ausgabe: MCMXCIV
print(int_to_roman_iterative(4000)) # Ausgabe: None

Dieser Ansatz ist leicht verständlich, kann aber für größere Zahlen aufgrund der wiederholten Subtraktionen innerhalb der while-Schleife weniger effizient sein.

Effiziente Umwandlung mittels ganzzahliger Division

Diese Methode verwendet die ganzzahlige Division und den Modulo-Operator, um größere ganze Zahlen effizient zu verarbeiten. Sie iteriert nur einmal durch die Zuordnung römischer Ziffern.


def int_to_roman_division(num):
    """Wandelt eine ganze Zahl in ihre römische Zifferndarstellung unter Verwendung der Division um.

    Args:
        num: Die umzuwandelnde ganze Zahl (muss zwischen 1 und 3999 inklusive liegen).

    Returns:
        Die römische Zifferndarstellung der ganzen Zahl oder None, wenn die Eingabe ungültig ist.
    """
    if not 1 <= num <= 3999:
        return None

    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'}

    result = ""
    for value, symbol in roman_map.items():
        result += symbol * (num // value)
        num %= value
    return result

# Beispiel Verwendung
print(int_to_roman_division(3))   # Ausgabe: III
print(int_to_roman_division(4))   # Ausgabe: IV
print(int_to_roman_division(9))   # Ausgabe: IX
print(int_to_roman_division(58))  # Ausgabe: LVIII
print(int_to_roman_division(1994)) # Ausgabe: MCMXCIV
print(int_to_roman_division(4000)) # Ausgabe: None

Dieser divisionsbasierte Ansatz bietet eine verbesserte Leistung, insbesondere für größere Eingaben, indem redundante Operationen minimiert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert