Zahlen zu römische Zahlen wandeln...
... eine ganz nette Idee: 1 - 5 -10 wiederholt sich in verschiedenen Zehnerpotenzen
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
In a world without walls and fences:
who needs Windows and Gates?
who needs Windows and Gates?
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)
- 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:
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))
Hauptziel war es, die nette Idee mit der sich wiederholenden Logik bei den Zehnerpotenzen zu zeigen, deswegen auch die Datenstruktur in Zeile 6.
Und wem die Idee gefällt, der kann das ja gerne schöner und PEP-konformer schreiben, ist ja schließlich nur ein Entwurf. Und dafür ist dieses Forum ja auch da, oder?
In a world without walls and fences:
who needs Windows and Gates?
who needs Windows and Gates?
@ice2k3: Könnte man das nicht noch einfacher schreiben?
Code: Alles auswählen
roman_number = 'M' * (decimal_number // 1000)