Seite 1 von 1

Zahl als Worte schreiben

Verfasst: Donnerstag 8. April 2010, 10:54
von sma
Weil ich eine Frage falsch verstanden hatte, hier eine Lösung für etwas, das eigentlich niemand wissen wollte, aber was Spaß machte, zu bauen:

Code: Alles auswählen

w1 = "null ein zwei drei vier fünf sechs sieben acht neun zehn elf zwölf \
dreizehn vierzehn fünfzehn sechzehn siebzehn achtzehn neunzehn".split()
w2 = "zwanzig dreißig vierzig fünfzig sechzig siebzig achtzig neunzig".split()

def zahl_in_worten(n, s=True, z=False):
    if n < 0: raise ValueError
    if n == 0 and z: return ""
    if n == 1 and s: return "eins"
    if n < 20: return w1[n]
    if n < 100:
        w = w2[(n - 20) // 10]
        if n % 10:
            w = w1[n % 10] + "und" + w
        return w
    if n < 1000:
        return w1[n // 100] + "hundert" + zahl_in_worten(n % 100, z=True)
    if n < 1000000:
        return zahl_in_worten(n // 1000, s=False) + "tausend" + zahl_in_worten(n % 1000, z=True)
    raise ValueError

print(zahl_in_worten(0))
print(zahl_in_worten(100))
print(zahl_in_worten(1984))
print(zahl_in_worten(2010))
print(zahl_in_worten(999999))
Stefan

Verfasst: Donnerstag 8. April 2010, 11:18
von numerix

Code: Alles auswählen

>>> print(zahl_in_worten(101000)) 
einhunderteinstausend
Sollte es nicht "einhunderteintausend" heißen?

Verfasst: Donnerstag 8. April 2010, 11:29
von jbs

Code: Alles auswählen

def zahl_in_worten(n, s=True, z=False):
    if n < 0: return "minus " + zahl_in_worten(abs(n))
    ....
Wieso nicht so?

Verfasst: Freitag 9. April 2010, 09:40
von sma
Weil ich auf positive Zahlen fixiert war. Natürlich kann man das ergänzen. Ob "eins" oder "ein", da versagt mein Sprachgefühl. Ist es nur "eins", wenn danach nichts mehr kommt? Dann müsste man meinen Versuch mit der Variable "s" umschreiben.

Stefan

Verfasst: Freitag 9. April 2010, 09:49
von Rebecca
sma hat geschrieben:Ist es nur "eins", wenn danach nichts mehr kommt?
Ja.