Verfasst: Dienstag 30. Dezember 2008, 04:59
Damit noch ein wenig Metamagie dabei ist: http://paste.pocoo.org/show/97258/
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf8 -*-
## nette Idee: 1 -> 5 -> 10 wiederholt sich in den Einern, Zehnern, Hundertern
roemZahlen = [{1:'I', 5:'V', 10:'X'}, {1:'X', 5:'L', 10:'C'}, {1:'C', 5:'D', 10:'M'}]
def einsFuenfZehn(zehnerPotenz, zahl):
global roZa
if zahl == 9:
roZa += roemZahlen[zehnerPotenz][1]+roemZahlen[zehnerPotenz][10]
elif zahl == 4:
roZa += roemZahlen[zehnerPotenz][1]+roemZahlen[zehnerPotenz][5]
elif zahl >= 5:
roZa += roemZahlen[zehnerPotenz][5]+(zahl-5)*roemZahlen[zehnerPotenz][1]
else:
roZa += zahl*roemZahlen[zehnerPotenz][1]
decZahl = input('Natürliche Zahl im Dezimalsystem eingeben: ')
roZa = ''
while decZahl > 1000:
decZahl -= 1000
roZa += roemZahlen[2][10]
(decHun, decHunRest) = divmod(decZahl, 100)
(decZeh, decEin) = divmod(decHunRest, 10)
einsFuenfZehn(2, decHun)
einsFuenfZehn(1, decZeh)
einsFuenfZehn(0, decEin)
print roZa
Code: Alles auswählen
roman_number = ''.join('M' for i in xrange(decimal_number/1000))
Naja, das hab ich einfach mal so runtergeschrieben, ohne auf die PEP8-Richtlinien einzugehen. Variablennamen und die if-elif-Folge sind deswegen nicht konform, einverstanden. (Das 'dec' find ich übrigens nicht so schlimm, weil dezZ... einfach doof aussieht.)ice2k3 hat geschrieben:Ein paar Hinweise:
- PEP8 beachten (Variablen - und Funktionsnamen klein_mit_unterstrich, Klassennamen CamelCase)
- "global" vermeiden, zuwas gibt es "return"
- Die gesamten Lookups ( [x] ) sind IMHO viel zu magisch, für diese Konstante (Zeile 6) solltest du dir eine sinnvollere und verständlichere Datenstruktur ausdenken.
- Die Klammern beim Tuple-Unpacking in Zeile 26/27 sind unnötig und auch unschön.
- "Einsfünfzehn" ist ein völlig nichtssagender Funktionsbezeichner.
- Statt "input" "raw_input" verwenden (bei Python < 3, und das hast du ja wegen dem "print"-Statement)
- Eine längere Folge von "elifs" (bzw. Switch-Case in anderen Sprachen) lässt sich geschickt durch ein Dictionary ersetzen.
Das war's erstmal
Edit:
- Den "raw_input" musst du dann natürlich zu "int" konvertieren
- Statt deiner "while"-Schleife geht folgendes:- Du solltest keine deutschen und englischen Variablennamen mischen, sondern dich auf eine Sprache festlegen (dec ist z.B. englisch)Code: Alles auswählen
roman_number = ''.join('M' for i in xrange(decimal_number/1000))
Code: Alles auswählen
roman_number = 'M' * (decimal_number // 1000)