Nur noch bis heute: Arabische Zahlen in Römische Zahlen
-
- 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
Super Leistung.
Hier ist eine Alternative (die ist weder besser noch schlechter als deine Lösung):
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.
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))
@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.
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.