[PYTHON] geldautomaat

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • flugelisoke
  • Registratie: Januari 2005
  • Laatst online: 19:35
Ik ben gewoon voor de fun eens een basic geldautomaat aan het maken in Python. Ik ben nog bezig om alles onder de knie te krijgen maar dit gaat me al redelijk af.

Nu is mijn vraag hoe ik ervoor zorg dat wanneer je kiest om terug te gaan naar het hoofdmenu nadat je gestort hebt, dat het daadwerkelijke saldo ook meebeweegt naar de rekening.

En hoe zou deze code beter, makkelijker en mooier gemaakt kunnen worden?

Ik zat zelf te denken aan het maken van functies voor elke opdracht, maar ik raak daar nog een beetje zoek in.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
saldo = 5000


pin = int(input("Voer uw pincode in: "))

tries = 3
if pin == 1234:
    invoer = int(input("Maak een keuze uit het volgende menu:\n1: Saldo bekijken \n2: Geld opnemen \n3: Geld storten\n  "))
    if invoer == 1:
        print(saldo)
     
            
    elif invoer == 2:
        opnemen = float(input("Voer handmatig het op te nemen bedrag in: "))
        if opnemen < saldo:
            print("U neemt",opnemen,"euro op, het resterende saldo is: ",saldo - opnemen,"euro.")
        else:
            print("Onvoldoende saldo")

    elif invoer == 3:
        storten = float(input("Voer handmatig het te storten bedrag in: "))
        saldo += storten
        print("U heeft", storten,"euro gestort, uw saldo is: ",saldo,"euro")


            
else:
    while tries != 1:
        tries -= 1
        print("Pincode onjuist,",tries,"pogingen over")
        pin = int(input("Voer uw pincode in: "))
        if tries == 1:
            print("Pas geblokkeerd.\nNeem contact op met uw bank")


Momenteel is deze geldautomaat niet interactief genoeg, de basis functies zijn er, maar zodra het geld is gestort of is opgenomen stopt het programma.

[ Voor 0% gewijzigd door RobIII op 23-10-2019 11:00 . Reden: [code] => [code=python] geeft syntax highlighting \o/ ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 00:35
Maak een stromen diagram, meat pseudo code. Vanuit daar kan je kijken welke elementen je al wel hebt gemaakt en welke nog niet.

Code technisch: Ik ken zelf python niet goed genoeg, maar opknippen in functies kan zeker geen kwaad. Dit zorgt ervoor dat je leesbaarheid ten goede komt. Momenteel wordt alles achter elkaar in 1 regel gestuurd, wellicht dat je dit om wilt zetten naar regels onder elkaar.

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
saldo = 5000

def BedragOpnemen():
    opnemen = float(input("Voer handmatig het op te nemen bedrag in: "))
    if opnemen < saldo:
        print("U neemt",opnemen,"euro op, het resterende saldo is: ",saldo - opnemen,"euro.")
    else:
         print("Onvoldoende saldo")

pin = int(input("Voer uw pincode in: "))

tries = 3
if pin == 1234:
    invoer = int(input("Maak een keuze uit het volgende menu:\n1: Saldo bekijken \n2: Geld opnemen \n3: Geld storten\n  "))
    if invoer == 1:
        print(saldo)
     
            
    elif invoer == 2:
        BedragOpnemen()

    elif invoer == 3:
        storten = float(input("Voer handmatig het te storten bedrag in: "))
        saldo += storten
        print("U heeft", storten,"euro gestort, uw saldo is: ",saldo,"euro")


            
else:
    while tries != 1:
        tries -= 1
        print("Pincode onjuist,",tries,"pogingen over")
        pin = int(input("Voer uw pincode in: "))
        if tries == 1:
            print("Pas geblokkeerd.\nNeem contact op met uw bank")

Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zo even wat dingetjes die meteen opvallen:
  • Een pin is een string, geen int. Dat er toevallig alleen maar cijfers in voorkomen maakt 't nog geen int ;) (Immers: hoe vaak tel je pincodes bij elkaar op of deel je iets door een pincode ofzo?). Als je een pincode hebt die 0123 is gaat de 0 verloren bij conversie naar int.
  • Een float is geen goed monetair datatype; zie onze Getallen en talstelsels FAQ. Probeer maar:
    >>> 0.1+0.2
    0.30000000000000004
    De meeste talen bieden daar vaak wel een type als decimal o.i.d. voor.
  • Je wil niet dat klanten negatieve bedragen kunnen opnemen (of storten) ;) (A good programmer always looks both ways, even when crossing a one-way street :> )
  • Bij opnemen werk je 't saldo niet bij; dat lijkt me dan ook de reden waarom 't niet "meegenomen wordt" naar 't hoofdscherm. Bij storten doe je dat wel.
Als antwoord op je vraag: in een functie stop je een functioneel gerelateerd stukje code om je code zo overzichtelijker te maken. Zo zou je dus een functie "WerkSaldoBij(rekening, bedrag)" kunnen hebben die of een positief bedrag (storten) of een negatief bedrag (opnemen) bij je saldo telt; in latere iteraties zou je daar dan bijvoorbeeld de database bijwerken. Daar hoef je als 'caller' van de functie niets van te weten; aan de 'buitenkant' hoef je alleen maar een rekeningnummer en bedrag te weten, de functie doet de rest met de database, eventuele controles, transacties etc. Of dat een héél goed ontwerp is, is een tweede; het is dan ook als voorbeeld bedoeld ;)
Een wat simpeler voorbeeld is:
Python:
1
opnemen = float(input("Voer handmatig het op te nemen bedrag in: "))

Dit zou je natuurlijk in een functie kunnen gieten:
Python:
1
2
def GetBedrag(text)
    return float(input(text))

Zo kun je overal waar je de gebruiker een bedrag wil laten invoeren GetBedrag("...") aanroepen; wanneer je besluit van de floats af te stappen hoef je dat ook maar op 1 plaats te fixen i.p.v. overal waar je om een bedrag vraagt.
Python:
1
opnemen = GetBedrag("Voer handmatig het op te nemen bedrag in: ")


Tot slot: het zal je vast wel opgelegd worden vanuit school en er zijn verschillende meningen over, maar ik denk dat 't gros 't er wel mee eens is dat Nederlands ontzettend lelijk is om te programmeren. Als 't effe kan/mag, probeer dan alles in 't Engels te houden (behalve natuurlijk de teksten die je aan gebruikers toont; alle 'strings' dus zo'n beetje). Ga je daar een stap verder in, hou dan ook rekening met verschillende locales (1,234.56 (UK/US) vs. 1.234,56 (NL) notatie voor getallen, mm/dd/jjjj vs dd/mm/jjjj voor datums etc.). Nog een leuke: denk ook eens na over verschillende valuta (als je met pinautomaten bezig bent).
Je bent toch wel bekend met ons credo hier in PRG, niet? ;)
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

[ Voor 71% gewijzigd door RobIII op 23-10-2019 10:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
RobIII schreef op woensdag 23 oktober 2019 @ 10:12:

[...]

Je bent toch wel bekend met ons credo hier in PRG, niet? ;)

[...]
Nu wil ik wel even opkomen voor @P-Storm: Om iemand te leren vissen moet je het ook een keer voor doen. In het gegeven voorbeeld is maar 1 deel van de code in een functie gestopt, niet direct de gehele code aangepast. Er zijn nog voldoende andere delen waar TS zelf voor mag 'hengelen'.

Acties:
  • 0 Henk 'm!

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 00:35
RobIII schreef op woensdag 23 oktober 2019 @ 10:12:

[...]

Je bent toch wel bekend met ons credo hier in PRG, niet? ;)

[...]
Ik heb een stukje code naar een functie verplaats naar een functie, verder heb ik weinig aangepast. Verder is het inderdaad aan TS :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Stoelpoot schreef op woensdag 23 oktober 2019 @ 10:22:
Er zijn nog voldoende andere delen waar TS zelf voor mag 'hengelen'.
P-Storm schreef op woensdag 23 oktober 2019 @ 10:26:
Ik heb een stukje code naar een functie verplaats naar een functie, verder heb ik weinig aangepast. Verder is het inderdaad aan TS :)
Is ook zo :) Maar het werd/wordt wel een keer helemaal voorgekauwd. Ik ben geen Python adept, dus ik weet niet of 't volgende een goede bron is, maar ik prefereer in eerste instantie gewoon te verwijzen naar iets als dit of dit en als TS er dan na wat proberen niet uit komt aan te geven wat hij/zij verkeerd doet.

[ Voor 25% gewijzigd door RobIII op 23-10-2019 10:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 19:19
Probeer eens het saldo naar een .txt te schrijven en het dus op te slaan zodat hij ook het saldo kan opvragen.

Acties:
  • 0 Henk 'm!

  • Dutchshorty
  • Registratie: Februari 2015
  • Laatst online: 05-09 10:50
Deze regel klopt niet:

if opnemen < saldo:

Nu kan je nooit je volledige saldo opnemen
Pagina: 1