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
1801081

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.