erstes Python Programm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
masterjule
User
Beiträge: 9
Registriert: Freitag 13. November 2009, 00:07

Danke für eure geduldige Hilfe.

Code: Alles auswählen

# Der Geldzähler

values = { 1 : 0.01,
           2 : 0.02,
           3 : 0.05,
           4 : 0.1,
           5 : 0.2,
           6 : 0.5,
           7 : 1,
           8 : 2,
           9 : 5,
           10 : 10,
           11 : 20,
           12 : 50,
           13 : 100,
           14 : 200,
           15 : 500} 
result = 0
bug = False

print('\n', '               ', 'Der Geldzähler')

while True:
    
    print("""
            Bitte wählen Sie eine Option.
            
            Münzen:
            1 ->   1 Cent
            2 ->   2 Cent
            3 ->   5 Cent
            4 ->  10 Cent
            5 ->  20 Cent
            6 ->  50 Cent
            7 ->   1 Euro
            8 ->   2 Euro
            
            Scheine:
            9 ->   5 Euro
           10 ->  10 Euro
           11 ->  20 Euro
           12 ->  50 Euro
           13 -> 100 Euro
           14 -> 200 EUro
           15 -> 500 Euro
            
            0 -> Ergebnis berechnen
          """)
    option = int(input('Bitte Optionsnummer Eingeben: '))
    
    if option == 0:
        break

    value = values[option]
    if value > 2:
        mode_description = 'Scheine'
    else:
        mode_description = 'Münzen'
    
    print('Bitte zählen Sie jetzt ihre ', mode_description, ' und geben Sie dann die Anzahl ein.')
    number = int(input('Eingabe: '))
    
    try:
        result += values[option] * number
    except KeyError:
        bug = True
        break


if bug:
    print('Fehler bei der Optionsauswahl.\n\
Programm bitte Neustarten!')
else:
    print('Sie haben {0}€'.format(result))

Edit:
cofi hat geschrieben:

Code: Alles auswählen

if option == "0":
    break

value = values[option]
if value > 2:
    mode_description = "Scheine"
else:
    mode_description = "Münzen"
Warum ist da bei

Code: Alles auswählen

if value > 2
die 2?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

kennst du ein 5 Euro Stück?

Edit:
Warum eigentlich ein Dictionary und keine Liste und warum nutzt du nicht weiter `value` anstatt `values[option]`?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

jbs hat geschrieben:kennst du ein 5 Euro Stück?
Ehrlich gesagt ist es doch eigentlich egal, ob es sich bei den Werten um Scheine oder Münzen handelt. Am Ende kommt so oder so eine Summe raus.
masterjule
User
Beiträge: 9
Registriert: Freitag 13. November 2009, 00:07

jbs hat geschrieben:kennst du ein 5 Euro Stück?

Edit:
Warum eigentlich ein Dictionary und keine Liste und warum nutzt du nicht weiter `value` anstatt `values[option]`?
Wie kommst du auf ein 5 Euro Stück?
Und das mit dem 'value' und 'values[option]' ist mir noch garnicht aufgefallen.. werde es ändern.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

jbs hat geschrieben:kennst du ein 5 Euro Stück?
Ja.
masterjule
User
Beiträge: 9
Registriert: Freitag 13. November 2009, 00:07

so, da mal die aktuelle version

Code: Alles auswählen

# Der Geldzähler

values = { 1 : 0.01,
           2 : 0.02,
           3 : 0.05,
           4 : 0.1,
           5 : 0.2,
           6 : 0.5,
           7 : 1,
           8 : 2,
           9 : 5,
           10 : 10,
           11 : 20,
           12 : 50,
           13 : 100,
           14 : 200,
           15 : 500} 
result = 0
bug = False

print('\n', '               ', 'Der Geldzähler')

while True:
    
    print("""
            Bitte wählen Sie eine Option.
            
            Münzen:
            1 ->   1 Cent
            2 ->   2 Cent
            3 ->   5 Cent
            4 ->  10 Cent
            5 ->  20 Cent
            6 ->  50 Cent
            7 ->   1 Euro
            8 ->   2 Euro
            
            Scheine:
            9 ->   5 Euro
           10 ->  10 Euro
           11 ->  20 Euro
           12 ->  50 Euro
           13 -> 100 Euro
           14 -> 200 EUro
           15 -> 500 Euro
            
            0 -> Ergebnis berechnen
          """)
    option = int(input('Bitte Optionsnummer Eingeben: '))
    
    if option == 0:
        break

    value = values[option]
    if value > 2:
        mode_description = 'Scheine'
    else:
        mode_description = 'Münzen'
    
    print('Bitte zählen Sie jetzt ihre ', mode_description, ' und geben Sie dann die Anzahl ein.')
    number = int(input('Eingabe: '))
    
    try:
        result += value * number
    except KeyError:
        bug = True
        break


if bug:
    print('Fehler bei der Optionsauswahl.\n\
Programm bitte Neustarten!')
else:
    print('Sie haben {0}€'.format(result))
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

- So lange Quellcodes würde ich in ein paste-bin wie paste.pocoo.org auslagern

- Jetzt das ganze auf jeden Fall von Modulebene wegbringen. Sprich:

Code: Alles auswählen

def main():
    # hier den Einstieg in die Funktionalität


if __name__ == "__main__":
    main()
einbauen

- Die input-Eingaben in eine Funktion auslagern

- Unnötige Leerzeilen löschen
masterjule
User
Beiträge: 9
Registriert: Freitag 13. November 2009, 00:07

okay, wäre nett. wenn du mir weiter helfen könntest, bin halt noch anfänger.

- was ist paste-bin?

- Was genau hast es mit dieser Main Funktion auf sich?

- Was für Vorteile hat man, wenn man die input-Eingaben in eine Funktion auslagert?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

masterjule hat geschrieben:okay, wäre nett. wenn du mir weiter helfen könntest, bin halt noch anfänger.

- was ist paste-bin?
Guck Dir die Seite doch mal an ;-)
- Was genau hast es mit dieser Main Funktion auf sich?
Die kannst Du auch anders nennen. Guck Dir mal im Tutorial das Kapitel über Module an. Prinzipiell geht es darum, dass man den Code besser kapselt und strukturiert.
- Was für Vorteile hat man, wenn man die input-Eingaben in eine Funktion auslagert?
s.o. Du kannst Dir sparen mehrfach das selbe zu tippen und die Eingabe ggf. sokomfortabel gestalten, dass Fehler usw. abgefangen werden. Also schau Dir mal das Kapitel Fuznktionen an im Tutorial :-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ein wenig will ich auch mal erzählen:

- Die folgenden Ausdrücke sind identisch

Code: Alles auswählen

"          "
" "*10
- Die Ausgabe deiner Münzen solltest du nicht alle per Hand hinschreiben, sondern automatisch aus dem oberen Dictionary generieren lassen. Momentan hast du zwei Stellen, welche bei einer neuen Münze geändert werden. Mit der Anpassung ist es genau eine.

- Gib mal in Zeile 49 oder 61 eine Nicht-Zahl ein ;-)

- Zeilen 55 bis 58 kannst du auch wieder mit einem Dictionary, einer Liste oder einem Tupel zusammenfassen.

- "bug" finde ich auch keinen sehr gelungenen Namen für einen Indikator eines Benutzerfehlers

- Was meinst du, wie oft in Zeile 64 ein KeyError geworfen wird? Du willst wohl eher Zeile 54 testen.

Bis dann,
Sebastian
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich würde dem Anwender ja die Eingabe einfacher machen:

Code: Alles auswählen

print("Bitte Beträge als 'N x 50 cent' oder 'N x 10 euro' eingeben.")
money = 0
while True:
    amount = input("Betrag: ")
    if not amount:
        break
    try:
        n, av = amount.split("x")
        n = int(n)
        a, v = av.split()
        a = int(a)
        v = v.lower()[0]
        if v == "e":
            a *= 100
        money += n * a
    except:
        continue
print("Sie haben %.2f€." % (money / 100))
Antworten