Python :: Aufgabe #276 :: Lösung #4

4 Lösungen Lösungen öffentlich
#276

Zahlen in Wörtern ausdrücken

Anfänger - Python von Gisbert5020 - 30.04.2020 um 15:17 Uhr
Schreiben Sie ein Programm, das Zahlen von 0 bis 99 in Wörtern fasst.
Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
#4
vote_ok
von owl_curry (20 Punkte) - 25.07.2020 um 22:24 Uhr
Quellcode ausblenden Python-Code
""" AUFGABENSTELLUNG:
Schreiben Sie ein Programm, das Zahlen von 0 bis 99 in Woerter
fasst / uebersetzt.
Beispiel:
57 => siebenundfünfzig

Welche Zahl uebersetzt wird, ist via Usereingabe zu ermitteln

Zusatzaufgabe:
Erweitern Sie das Programm von 0 bis 1000

Eigener Zusatz:
Eingabekontrolle und Vorzeichen beachten
"""

# Dictionaries
einstellig = {"1":"ein","2":"zwei","3":"drei",
              "4":"vier","5":"fünf","6":"sechs",
              "7":"sieben","8":"acht","9":"neun"}

zig = {"2":"zwanzig","3":"dreizig","4":"vierzig",
       "5":"fünfzig","6":"sechzig","7":"siebzig",
       "8":"achtzig","9":"neunzig"}

hundert = {"1":"einhundert","2":"zweihundert","3":"dreihundert",
           "4":"vierhundert","5":"fünfhundert","6":"sechshundert",
           "7":"siebenhundert", "8":"achthundert","9":"neunhundert"}

special = {"1":"eins","11":"elf","12":"zwölf",
           "16":"sechzehn","17":"siebzehn","0":"null",
           "1000":"tausend"}

#Funktionen
def isitSpecial(zahl):
    #Teste Zahl
    if zahl in special:
        #Gib entsprechenden Wert zurueck
        return special[zahl]
    else:
        #Keine Special Zahl
        return "no"

def umwandlung(zahl):
    laenge = len(zahl)
    
    if laenge == 3:
        #Hole erstes Segment der Zahl
        abschnitt = hundert[zahl[0]]+"und"
        #Pruefe zweiten Abschnitt der Zahl auf Specialzahlen
        test = isitSpecial(zahl[1]+zahl[2])
        if test!="no": #Wenn Special
            #Kombiniere Abschnitt mit Specialsegment
            return abschnitt+test
        else: #Nichts Special
            #Teste ob reine hunderter Zahl, wenn nein
            if zahl[1] != "0" and zahl[2] != "0":
                #Kombiniere Abschnitt mit zweiten Segment
                return abschnitt+zweistellig(zahl[1],zahl[2])
            else: #wenn ja
                return hundert[zahl[0]]
    elif laenge == 2:
        #Weiterleitung an Funktion zweistellig
        return zweistellig(zahl[0],zahl[1])
    elif laenge == 1:
        #direkt in der Dict suchen
        return einstellig[zahl[0]]
    else:
        return "Es können bisher nur Zahlen von 0-1000 verarbeitet werden."


def zweistellig(stelle1,stelle2):
    if stelle1 != "1":
        if stelle1 in zig and stelle2 == "0":
            return zig[stelle1]
        elif stelle1 == "0" and stelle2 != "0":
            return einstellig[stelle2]
        else:
            return einstellig[stelle2] + "und" + zig[stelle1]
    else:
        return einstellig[stelle2]+"zehn"

def main():
    #Failsafe
    while True:
        #Frage nach Eingabe
        usereingabe=input("Gib eine Zahl von 0-1000 ein: ")
        try:
            #Versuche in Int umzuwandeln
            usereingabe = int(usereingabe)
            #Wandle zurueck in String um
            usereingabe = str(usereingabe)
            #Wenn Erfolgreich breche aus dem While aus
            break
        except:
            #Wenn nicht erfolgreich, gebe Fehlermeldung
            print("Die Eingabe konnte nicht verarbeitet werden.\nNur Zahlen bitte!")
    
    #Vorzeichenabdeckung
    vorzeichen = ""
    if usereingabe[0] == "-":
        vorzeichen = "minus "
        usereingabe = usereingabe.replace("-","")

    test = isitSpecial(usereingabe)
    if test == "no":
        ausgabe = umwandlung(usereingabe)
    else:
        ausgabe = test
    #Ausgabe der Uebersetzung
    print(vorzeichen + ausgabe.capitalize())


# Mainpart auslösen
if __name__ == "__main__":
    main()

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben