Vielleicht noch einige generelle Anmerkungen:
- Es gibt spezielle Python-Code-Tags hier im Forum; damit wird der Code schön bunt eingefärbt
- Die Namensgebung ist unschön, genau wie der strukturelle Aufbau. Ein "Konto" tut ja nichts; eine Funktion bewirkt ja etwas. Alleine daran kann man schon vor dem Modellieren erahnen, dass Konto keine Funktion sein kann.
- Konto würde ich als Datenstruktur sehen. Lässt man Klassen außen vor, so könnte man sich z.B. eine Liste denken, in der Ein- und Auszahlungen als simple Integer-Werte eingetragen werden. Will man sich noch mehr Daten merken, etwa ein Datum, kann man die Einträge pro Buchung auch durch eine eigene Liste oder gar ein Dictionary ausdrücken.
Code: Alles auswählen
# in Cent
konto = [0, 1000, -500, 25000]
saldo = sum(konto)
# Oder komplexer [Betrag, Datum]
konto = [
[0, '2011-04-02'],
[1000, '2011-04-02'],
[-500, '2011-04-03'],
...
]
Allerdings gelangt man dann schon bald an die Grenze, an der man so etwas mit Klassen eleganter ausdrücken kann.
- In der konto()-Funktion würde ich auch keine Eingaben durchführen. Schreib dafür lieber separate Funktionen! Damit trennst Du eine Aktion wie "Einzahlen" vom User Interface. Evtl. wird ja auch mal automatisch gebucht, ohne Benutzereingabe oder es wird über eine GUI gebucht, wo man eben kein raw_input() benutzt.
- Deine String-Konkatenierung klappt so nicht:
Code: Alles auswählen
# Deine falsche Variante
print "Sie haben noch ,guthaben, Euro übrig!"
# besser:
print "Sie haben noch {0} Euro übrig!".format(guthaben)
- "wieviel" ist auch kein doller Name
Der Benutzer gibt doch einen "Betrag" ein (steht iirc doch auch auf Bankautomaten und nicht "wie viel wollen se denn?").
- Die Abfrage des Betrags sollte man auch logisch von der Auswahl der Aktion trennen! Zu diesem Thema gibt es zig Threads hier im Forum
Da Du im Moment keine Alternative anbietest, kann man zumindest erahnen, dass da noch mehr folgen soll. Also trenne das lieber auf und erledige die Abfrage in einer separaten Funktion:
Code: Alles auswählen
def handle_menu(konto):
while True:
choice = raw_input("Was möchten Sie erledigen?")
if choice == "abheben":
# Funktion, die einen Betrag erfragt und zurückliefert
betrag = ask_betrag()
# Hier eine Funktion aufrufen
abheben(konto, betrag)
elif choice == "einzahlen":
# usw.
else:
print "Bitte nur gültige Möglichkeiten eingeben!"
Letztlich ist das eine elendige if...elif...else-Kaskade. Besser kann man das z.B. durch eine geeignete Datenstruktur wie ein Dictionary oder eine Liste erledigen. Beispiele gibt es u.a. in
diesem Thread. Allerdings ist überhaupt eine Trennung zwischen Menüauswahl und den speziellen Aktionen schon ein Gewinn.
- Ich würde so ein Konto wohl auch eher in Cent berechnen. Bei Fließkommazahlen bekommst Du früher oder später Ungenauigkeiten rein. Alternativ kann man auch das decimal-Modul benutzen; aber für einen Anfänger am einfachsten dürften wohl Integerbeträge und daher Cents sein. (Bei der Ausgabe kann man das ja dann leicht in Euros formatieren)