Guten Tag liebe Freunde,
ich habe folgende Aufgabenstellung mit einem Kumpel bearbeitet und wir Laien kommen echt nicht weiter:
Die Zahlen 1, 2, 3, ... können als ein Wort geschrieben werden, also eins, zwei, drei, ... und werden als "Einwortzahlen" bezeichnet (dieses Wort ist frei erfunden).
Nicht-Einwortzahlen sind Zahlen, die nur Wortbestandteile haben, die eine Einwortzahl sind oder das Wort "und" enthalten, z.B. 13 = dreizehn = "drei" + "zehn" oder 21 = einundzwanzig = "ein" + "und" + "zwanzig".
Erstellen Sie folgende Funktionen:
"def codieren" übernimmt als Parameter eine (1) Einwortzahl (=String) und liefert als Ergbnis die Zahl als Integerwert zurück.
"def decodieren" übernimmt als Parameter eine (1) Integerzahl und liefert als Ergbnis die Zahl als Einwortzahl (=String) zurück.
"def PlusMinus" übernimmer als Parameter einen (1) String und liefter als Ergbnis einen String mit einem Einwortzahl zurück. Folgendes gilt es zu berücksichtigen:
Der Eingabestring besteht aus mindestens einem Einwortzahl.
Wenn der Eingabestring aus mehr als einem Einwortzahl besteht, sind diese durch die Wörter "plus" oder "minus" getrennt. Diese repräsentieren Addition und Subtraktion.
Der Ausgabestring besteht aus exakt einer Einwortzahl, welche den Eingabestring oder das Ergbnis der Berechnung des Eingabestrings widerspiegelt.
Es müssen nur Berechnungen berücksichtig werden, welche ausschließlich aus Einwortzahlen in der Eingabe und Ausgabe bestehen.
Umlaute müssen in Ein- und Ausgabe vermieden werden, also immer fuenf, etc. schreiben und erwarten.
Verwenden Sie die beiden Eingangs definierten Funktionen in dieser Funktion, damit der Code übersichtlich bleibt.
defcodieren und defdecodieren waren kein Hindernis, allerdings scheitern wir nach mehreren Stunden Rumprobieren an PlusMinus
Hat da jemand einen Tipp?
LG 1220
Zahlen als Worte schreiben
Ich weiß, dass es bisschen umständlich ist, habt bitte Erbarmen :K
def codieren(Ezahl):
if Ezahl == "null":
Ezahl=0
elif Ezahl =="ein":
Ezahl=1
elif Ezahl =="zwei":
Ezahl=2
elif Ezahl =="drei":
Ezahl=3
elif Ezahl =="vier":
Ezahl=4
elif Ezahl =="fuenf":
Ezahl=5
elif Ezahl =="sechs":
Ezahl=6
elif Ezahl =="sieben":
Ezahl=7
elif Ezahl =="acht":
Ezahl=8
elif Ezahl =="neun":
Ezahl=9
elif Ezahl =="plus":
Ezahl ="+"
elif Ezahl =="minus":
Ezahl ="-"
elif Ezahl =="zehn":
Ezahl=10
elif Ezahl =="zwanzig":
Ezahl=20
elif Ezahl =="dreissig":
Ezahl=30
elif Ezahl =="vierzig":
Ezahl=40
elif Ezahl =="fuenfzig":
Ezahl=50
elif Ezahl =="sechzig":
Ezahl=60
elif Ezahl =="siebzig":
Ezahl=70
elif Ezahl =="achzig":
Ezahl=80
elif Ezahl =="neunzig":
Ezahl=90
elif Ezahl =="hundert":
Ezahl=100
return (Ezahl)
print codieren("hundert")
def decodieren(Izahl):
Izahl=int(Izahl)
if Izahl == 0:
Izahl="null"
elif Izahl == 1:
Izahl="eins"
elif Izahl == 2:
Izahl="zwei"
elif Izahl == 3:
Izahl="drei"
elif Izahl == 4:
Izahl="vier"
elif Izahl == 5:
Izahl="fuenf"
elif Izahl == 6:
Izahl="sechs"
elif Izahl == 7:
Izahl="sieben"
elif Izahl == 8:
Izahl="acht"
elif Izahl == 9:
Izahl="neun"
elif Izahl == "+":
Izahl ="plus"
elif Izahl == "-":
Izahl = "minus"
elif Izahl == 10:
Izahl="zehn"
elif Izahl == 20:
Izahl="zwanzig"
elif Izahl == 30:
Izahl="dreissig"
elif Izahl == 40:
Izahl="vierzig"
elif Izahl == 50:
Izahl="fuenfzig"
elif Izahl == 60:
Izahl="sechzig"
elif Izahl == 70:
Izahl="siebzig"
elif Izahl == 80:
Izahl="achzig"
elif Izahl == 90:
Izahl="neunzig"
elif Izahl == 100:
Izahl="hundert"
return Izahl
print decodieren("9")
Code: Alles auswählen
if Ezahl == "null":
Ezahl=0
elif Ezahl =="ein":
Ezahl=1
elif Ezahl =="zwei":
Ezahl=2
elif Ezahl =="drei":
Ezahl=3
elif Ezahl =="vier":
Ezahl=4
elif Ezahl =="fuenf":
Ezahl=5
elif Ezahl =="sechs":
Ezahl=6
elif Ezahl =="sieben":
Ezahl=7
elif Ezahl =="acht":
Ezahl=8
elif Ezahl =="neun":
Ezahl=9
elif Ezahl =="plus":
Ezahl ="+"
elif Ezahl =="minus":
Ezahl ="-"
elif Ezahl =="zehn":
Ezahl=10
elif Ezahl =="zwanzig":
Ezahl=20
elif Ezahl =="dreissig":
Ezahl=30
elif Ezahl =="vierzig":
Ezahl=40
elif Ezahl =="fuenfzig":
Ezahl=50
elif Ezahl =="sechzig":
Ezahl=60
elif Ezahl =="siebzig":
Ezahl=70
elif Ezahl =="achzig":
Ezahl=80
elif Ezahl =="neunzig":
Ezahl=90
elif Ezahl =="hundert":
Ezahl=100
return (Ezahl)
print codieren("hundert")
def decodieren(Izahl):
Izahl=int(Izahl)
if Izahl == 0:
Izahl="null"
elif Izahl == 1:
Izahl="eins"
elif Izahl == 2:
Izahl="zwei"
elif Izahl == 3:
Izahl="drei"
elif Izahl == 4:
Izahl="vier"
elif Izahl == 5:
Izahl="fuenf"
elif Izahl == 6:
Izahl="sechs"
elif Izahl == 7:
Izahl="sieben"
elif Izahl == 8:
Izahl="acht"
elif Izahl == 9:
Izahl="neun"
elif Izahl == "+":
Izahl ="plus"
elif Izahl == "-":
Izahl = "minus"
elif Izahl == 10:
Izahl="zehn"
elif Izahl == 20:
Izahl="zwanzig"
elif Izahl == 30:
Izahl="dreissig"
elif Izahl == 40:
Izahl="vierzig"
elif Izahl == 50:
Izahl="fuenfzig"
elif Izahl == 60:
Izahl="sechzig"
elif Izahl == 70:
Izahl="siebzig"
elif Izahl == 80:
Izahl="achzig"
elif Izahl == 90:
Izahl="neunzig"
elif Izahl == 100:
Izahl="hundert"
return Izahl
print decodieren("9")
LG 1220
Ich hätte es mit Listen probiert.
Wie folgt:
Wie folgt:
Code: Alles auswählen
def codieren(zahl):
listezahl = [1,2,3,4]
listebuch = ["eins","zwei", "drei", "vier"]
#überprüft ob die eingegebene Zahl in der Liste ist
if zahl in listezahl:
#ermittelt die Position der Zahl
pos = listzahl.index(zahl)
#ruft dann die gleiche Position aus der anderen Liste auf
print(listebuch[pos])
#optional es reicht codieren(input(">")) aus
try:
codieren(int(input(">")))
except:
print("Gebe bitte eine Zahl ein!")
Zuletzt geändert von addi am Dienstag 8. Mai 2018, 18:55, insgesamt 1-mal geändert.
Da gibt es schon eine fertige Lösung für Zahl zu Wort, bitte schaut mal hier:
https://github.com/savoirfairelinux/num2words
Ich meine, dass die Umsetzung für die Sprache Deutsch nicht ganz optimal war, d. h. da muss es variable Möglichkeiten gegeben haben und je nach Verwendungszweck (Ausschreiben der Zahlen oder Ausschreiben der Zahlen z. B. für eine Überweisung oder eine Rechnung) noch mal überarbeitet werden musste. Müsstet ihr mal schauen, ob euch das hilft.
Das war ihr da mit Plus und Minus beschreibt, würde ich wahrscheinlich mittels Liste auflösen, in die die Anweisung (drei plus vier) eingefügt wird. Dann würde ich wahrscheinlich die Liste durchlaufen und die Operationen schrittweise umsetzen (möglicherweise mit dem Setzen einer flag).
https://github.com/savoirfairelinux/num2words
Ich meine, dass die Umsetzung für die Sprache Deutsch nicht ganz optimal war, d. h. da muss es variable Möglichkeiten gegeben haben und je nach Verwendungszweck (Ausschreiben der Zahlen oder Ausschreiben der Zahlen z. B. für eine Überweisung oder eine Rechnung) noch mal überarbeitet werden musste. Müsstet ihr mal schauen, ob euch das hilft.
Das war ihr da mit Plus und Minus beschreibt, würde ich wahrscheinlich mittels Liste auflösen, in die die Anweisung (drei plus vier) eingefügt wird. Dann würde ich wahrscheinlich die Liste durchlaufen und die Operationen schrittweise umsetzen (möglicherweise mit dem Setzen einer flag).
Code: Alles auswählen
WOERTER = 'null eins zwei drei vier fuenf sechs sieben acht neun'.split()
def codieren(wort):
return WOERTER.index(wort)
def decodieren(zahl):
return WOERTER[zahl]
def PlusMinus(woerter):
ergebnis = 0
operation = 'plus'
for wort in woerter.split():
if wort in ('plus', 'minus'):
operation = wort
else:
zahl = codieren(wort)
if operation == 'plus':
ergebnis += zahl
if operation == 'minus':
ergebnis -= zahl
return decodieren(ergebnis)
'sechs'[/code]
@snafu: danke, dass Du Hausaufgaben für andere Leute machst .
@1220: die dritte Aufgabe baut auf Aufgabe 1 und 2 auf und erweitert diese. In Aufgabe 1 und 2 brauchst Du also nichts mit plus oder minus zu machen. `PlusMinus` besteht dann aus den Schritten, (1) Eingabestring in Wörter aufspalten, (2) Zahlwörter in Zahlen umwandeln oder +/- Operation ausführen, (3) Ergebniszahl wieder in Wort umwandeln.
@1220: die dritte Aufgabe baut auf Aufgabe 1 und 2 auf und erweitert diese. In Aufgabe 1 und 2 brauchst Du also nichts mit plus oder minus zu machen. `PlusMinus` besteht dann aus den Schritten, (1) Eingabestring in Wörter aufspalten, (2) Zahlwörter in Zahlen umwandeln oder +/- Operation ausführen, (3) Ergebniszahl wieder in Wort umwandeln.