Nur noch bis heute: Arabische Zahlen in Römische Zahlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

@sebastian0202: Da wird immer None ausgegeben.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Hab die Funktion get_roemisch erst im Onlineeditor erstellt und natürlich die return Anweisung vergessen :lol:
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Super Leistung.
Hier ist eine Alternative (die ist weder besser noch schlechter als deine Lösung):

Code: Alles auswählen

#python3
def int_to_rom(zahl):
    rom = ''
    while zahl > 0:
        if   zahl >= 1000: zahl -= 1000; rom += 'M'
        elif zahl >= 900:  zahl -= 900;  rom += 'CM'
        elif zahl >= 500:  zahl -= 500;  rom += 'D'
        elif zahl >= 400:  zahl -= 400;  rom += 'CD'
        elif zahl >= 100:  zahl -= 100;  rom += 'C'
        elif zahl >= 90:   zahl -= 90;   rom += 'XC'
        elif zahl >= 50:   zahl -= 50;   rom += 'L'
        elif zahl >= 40:   zahl -= 40;   rom += 'XL'
        elif zahl >= 10:   zahl -= 10;   rom += 'X'
        elif zahl >= 9:    zahl -= 9;    rom += 'IX'
        elif zahl >= 5:    zahl -= 5;    rom += 'V'
        elif zahl >= 4:    zahl -= 4;    rom += 'IV'
        elif zahl >= 1:    zahl -= 1;    rom += 'I'
    return rom

zahl = int(input('Geben Sie eine Zahl ein: '))
print(int_to_rom(zahl))
Zuletzt geändert von heiner88 am Dienstag 8. November 2016, 12:25, insgesamt 1-mal geändert.
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Oder noch eine andere Alternative:

Code: Alles auswählen

#python3
def int_to_rom(zahl):
    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')]
    rom = ""
    for int, char in map:
        cnt   = zahl // int
        zahl -= int  * cnt
        rom  += char * cnt
    return rom

zahl = int(input('Geben Sie eine Zahl ein: '))
print(int_to_rom(zahl))
BlackJack

@heiner88: Also ich finde die Variante mit den vielen ``if`` schon schlechter weil dort Daten umständlich als Code ausgedrückt sind und das alles nach kopieren, einfügen, und leicht anpassen aussieht, was immer ein Warnzeichen sein sollte. Zudem ist die ”hübsche” Formatierung ”unpythonisch”.

Bei der letzten Variante wird die `map`-Funktion und der `int`-Typ verdeckt, bei `count` fehlt das `ou`, und `char` ist unpassend weil da auch Werte dran gebunden werden die aus mehr als einem „character“ bestehen. `rom` sollte wohl auch ein längerer Name sein.
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Da hast du recht, ein wenig nachlässig programmiert.
Die Pythonanfänger werden es trotzdem verstehen oder auch nicht.
Antworten