Python :: Aufgabe #276 :: Lösung #4
4 Lösungen
#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.
Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
#4
von owl_curry (20 Punkte)
- 25.07.2020 um 22:24 Uhr
""" 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
Seite 1 von 0
1
