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

#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:
Die Erkennung der Schreibweise sollte automatisch funktionieren.
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

von PythonLui (400 Punkte)
- 09.04.2021 um 14:11 Uhr

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
Seite 1 von 0
1