Python :: Aufgabe #20

4 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von Exci (250 Punkte) - 19.05.2015 um 00:36 Uhr
Quellcode ausblenden Python-Code
def zahlinrom(zahl):
    rom = ''

    if zahl // 10000 >= 1:
        anzahl = zahl // 10000
        zahl = zahl % 10000
        for i in range(1,anzahl+1):
            rom += 'ↂ'

    if zahl // 5000 >= 1:
        anzahl = zahl // 5000
        zahl = zahl % 5000
        for i in range(1,anzahl+1):
            rom+= 'ↁ'

    if zahl // 1000 >= 1:
        anzahl = zahl // 1000
        zahl = zahl % 1000
        for i in range(1,anzahl+1):
            rom+= 'M'

    if zahl // 500 >= 1:
        anzahl = zahl // 500
        zahl = zahl % 500
        for i in range(1,anzahl+1):
            rom+= 'D'

    if zahl // 100 >= 1:
        anzahl = zahl // 100
        zahl = zahl % 100
        for i in range(1,anzahl+1):
            rom+= 'C'

    if zahl // 50 >= 1:
        anzahl = zahl // 50
        zahl = zahl % 50
        for i in range(1,anzahl+1):
            rom+= 'L'

    if zahl // 10 >= 1:
        anzahl = zahl // 10
        zahl = zahl % 10
        for i in range(1,anzahl+1):
            rom+= 'X'

    if zahl // 5 >= 1:
        anzahl = zahl // 5
        zahl = zahl % 5
        for i in range(1,anzahl+1):
            rom+= 'V'


    if zahl // 1 >= 1:
        anzahl = zahl // 1
        zahl = zahl % 1
        for i in range(1,anzahl+1):
            rom+= 'I'
        
        
    
    return rom




def rominzahl(rom):
    rom = str(rom)
    zahl = 0
    for i in rom:
        if i == 'ↂ':
            zahl += 10000
        elif i == 'ↁ':
            zahl+= 5000
        elif i == 'M':
            zahl+= 1000
        elif i =='D':
            zahl+= 500
        elif i =='C':
            zahl+= 100
        elif i =='L':
            zahl+= 50
        elif i =='X':
            zahl+= 10
        elif i =='V':
            zahl+= 5
        elif i == 'I':
            zahl += 1

    return zahl
vote_ok
von ah3n0bar6us (660 Punkte) - 17.07.2016 um 19:51 Uhr
Quellcode ausblenden Python-Code
#!/usr/bin/env python3
def history():
    while True:
        values = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000}
        string = input("Geben Sie eine Zahl ein: ")
        stringLen = len(string)
        counter = 0

        for i in range(0,stringLen):
            if string[i] in values:
                counter += 1

        if counter == stringLen:
            decimal = 0
            previous_value = 0
            for i in string:
                if i in values:
                    if values[i] > previous_value:
                        decimal -= previous_value
                    else:
                        decimal += previous_value
                previous_value = values[i]
            decimal += previous_value
            print("Ergebnis: " + str(decimal))
        else:
            roman = ""
            previous_value = ""
            string = int(string)
            while string > 0:
                if string >= 1000:
                    string -= 1000
                    roman += "M"
                if string < 1000 and string >= 500:
                    string -= 500
                    roman += "D"
                if string < 500 and string >= 100:
                    string -= 100
                    roman += "C"
                if string < 100 and string >= 50:
                    string -= 50
                    roman += "L"
                if string < 50 and string >= 10:
                    string -= 10
                    roman += "X"
                if string < 10 and string >= 5:
                    string -= 5
                    roman += "V"
                if string < 5 and string >= 1:
                    string -= 1
                    roman += "I"
            print("Ergebnis: " + str(roman))

def main():
    history()

if __name__ == "__main__":
    main()


Sollte so stimmen?

LG, Ah3

vote_ok
von Nachbar (2820 Punkte) - 28.08.2016 um 13:23 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

zahlen = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
zahlzeichen = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", \
"IV", "I"]
roemisch = ""
arabisch = 0
i = 0

zahl = raw_input("Umzurechnende Zahl (arabisch oder roemisch): ")

# arabisch in roemisch
try:
    int(zahl) / zahlen[-1]
    for i in zahlen:
        while int(zahl) >= i:
            roemisch = roemisch + zahlzeichen[zahlen.index(i)]
            zahl = int(zahl) - i
    print "\nDie roemische Zahl zu deiner Eingabe lautet: " + roemisch
# roemisch in arabisch
except:
    zahl = zahl.upper()
    zahl = zahl + "A"
    while i < len(zahl) - 1:
        if zahl[i] + zahl[i+1] in zahlzeichen:
            zahlzeichen_index = zahlzeichen.index(zahl[i] + zahl[i+1])
            arabisch = arabisch + zahlen[zahlzeichen_index]
            i = i + 1
        elif zahl[i] in zahlzeichen:
            zahlzeichen_index = zahlzeichen.index(zahl[i])
            arabisch = arabisch + zahlen[zahlzeichen_index]
        i = i + 1
    print "\nDie arabische Zahl zu deiner Eingabe lautet: " + str(arabisch)
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()
2095058

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.