Python :: Aufgabe #20 :: Lösung #4

4 Lösungen Lösungen öffentlich
#20

Zahlen in Römischer Schreibweise

Anfänger - Python von pocki - 29.12.2012 um 19:40 Uhr
Schreibe eine Programm welches eine Ganzzahl einliest und diese anschließend in römischer Schreibweise wieder ausgibt und umgekehrt bei einer eingegebenen Zahl in römischer Schreibweise diese als normale Zahl wieder ausgibt:

Konsolenausgabe:


Geben Sie eine Zahl ein: 1234
entspricht: MCCXXXIV

Geben Sie eine Zahl ein: DXXXVII
entspricht: 537


Die Erkennung der Schreibweise sollte automatisch funktionieren.
#4
vote_ok
von PythonLui (400 Punkte) - 09.04.2021 um 14:11 Uhr
Quellcode ausblenden Python-Code
def ganzzahl_roemisch(zahl_eingabe):
    """
    Erstellt Liste mit den römischen Zahlen
    :param zahl_eingabe: int
    :return: list[römische Zahlen]
    """
    # Überprüfung Sonderfälle
    roemzahl = []
    while zahl_eingabe > 0:
        if zahl_eingabe == 900:
            roemzahl.append("CM")
            zahl_eingabe = 0
        elif zahl_eingabe == 400:
            roemzahl.append("CD")
            zahl_eingabe = 0
        elif zahl_eingabe == 90:
            roemzahl.append("XC")
            zahl_eingabe = 0
        elif zahl_eingabe == 40:
            roemzahl.append("XL")
            zahl_eingabe = 0
        elif zahl_eingabe == 10:
            roemzahl.append("IX")
            zahl_eingabe = 0
        elif zahl_eingabe == 4:
            roemzahl.append("IV")
            zahl_eingabe = 0
        # Überprüfung und erstellen der römischen Zahlen
        if zahl_eingabe >= 1000:
            ganz_zahl = zahl_eingabe // 1000
            for i in range(ganz_zahl):
                roemzahl.append("M")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 1000)
        elif zahl_eingabe >= 500:
            ganz_zahl = zahl_eingabe // 500
            for i in range(ganz_zahl):
                roemzahl.append("D")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 500)
        elif zahl_eingabe >= 100:
            ganz_zahl = zahl_eingabe // 100
            for i in range(ganz_zahl):
                roemzahl.append("C")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 100)
        elif zahl_eingabe >= 50:
            ganz_zahl = zahl_eingabe // 50
            for i in range(ganz_zahl):
                roemzahl.append("L")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 50)
        elif zahl_eingabe >= 10:
            ganz_zahl = zahl_eingabe // 10
            for i in range(ganz_zahl):
                roemzahl.append("X")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 10)
        elif zahl_eingabe >= 5:
            ganz_zahl = zahl_eingabe // 5
            for i in range(ganz_zahl):
                roemzahl.append("V")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 5)
        elif zahl_eingabe >= 1:
            ganz_zahl = zahl_eingabe // 1
            for i in range(ganz_zahl):
                roemzahl.append("I")
            zahl_eingabe = zahl_eingabe - (ganz_zahl * 1)

    return roemzahl


def roemisch_ganzzahl(roemisch_eingabe):
    """
    Wandelt die römische Zahl in eine Ganzzahl
    :param roemisch_eingabe: int
    :return: int = Ganzzahl
    """
    roemisch = list(roemisch_eingabe)
    # Wechselt Buchstaben in der Liste gegen Zahlen aus
    for stelle, zeichen in enumerate(roemisch):
        if zeichen == "M":
            roemisch[stelle] = 1000
        elif zeichen == "D":
            roemisch[stelle] = 500
        elif zeichen == "C":
            roemisch[stelle] = 100
        elif zeichen == "L":
            roemisch[stelle] = 50
        elif zeichen == "X":
            roemisch[stelle] = 10
        elif zeichen == "V":
            roemisch[stelle] = 5
        elif zeichen == "I":
            roemisch[stelle] = 1
    zahl = 0
    # Errechnet die Ganzzahl anhand der Liste
    while True:
        if roemisch[-1] > roemisch[-2]:
            zahl = roemisch[-1] - roemisch[-2]
            for i in range(len(roemisch) - 2, 0, -1):
                zahl += roemisch[i - 1]
            break
        else:
            for i in range(len(roemisch), 0, -1):
                zahl += roemisch[i - 1]
        break
    return zahl


def main():
    print("\nDieses Program wandelt eine Ganzzahl in eine Römische-Zahl um und anders herum.\n")

    eingabe = input("Geben Sie eine Zahl ein: ")
    # Überprüfung ob ein römische oder Ganzzahl eingegeben wurde
    # Zusätzliche Überprüfung der richtigkeit der Eingabe
    if eingabe.isalpha():
        eingabe = eingabe.upper()
        if "I" in eingabe or \
                "V" in eingabe or \
                "X" in eingabe or \
                "L" in eingabe or \
                "C" in eingabe or \
                "D" in eingabe or \
                "M" in eingabe:
            ganzzahl = roemisch_ganzzahl(eingabe)
            print(f"Ganzzahl: {ganzzahl}")
        else:
            print("Bitte nur Buchstaben der römischen Zahlen eingeben (I, V, X, L, C, D, M)!!!")
        
    elif eingabe.isdigit():
        eingabe = int(eingabe)
        roemische_zahl = ganzzahl_roemisch(eingabe)
        print("Römische Zahl:", "".join(roemische_zahl))
    else:
        print("Bitte Eingabe Überprüfen!!!")


if __name__ == '__main__':
    main()

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2096161

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.