Kurzusok
/
Python
Python
/
Feladatok
/
Bankszámla
Bankszámla

Bankszámla

Közepes

Bevezetés

Miután évekig töltötted ki az űrlapokat és vártál, végre megszerezted a banki engedélyedet. Ez azt jelenti, hogy hivatalosan is jogosult vagy arra, hogy saját bankot nyiss, hurrá!

Az elsődleges feladatod, hogy az informatikai rendszereket működésbe hozd. Egy kemény munkanap után már tudsz számlákat nyitni és zárni, valamint kezelni tudod a pénzfelvételeket és a befizetéseket.

Mivel nem volt kedved teszteket írni, meghívsz néhány barátot, hogy segítsenek tesztelni a rendszert. Öt perc után azonban az egyik barátod azt állítja, hogy elveszítette a pénzét! Bár biztos vagy benne, hogy a kódod hibamentes, elkezded átnézni a naplókat, hogy kivizsgáld a dolgot.

Ah, igen, ahogy sejtetted, a barátod a hibás! Megosztotta a tesztelési hitelesítő adatait egy másik barátjával, és együtt összeesküdtek, hogy ugyanazon a számlán párhuzamosan fizessenek be és vegyenek fel pénzt. Ki tenne ilyet?

Miközben te azzal érvelsz, hogy fizikailag lehetetlen, hogy valaki párhuzamosan férjen hozzá a számlájához, a barátod önelégülten közli, hogy a banki szabályok megkövetelik, hogy támogasd ezt. Így hát nincs párhuzamos banki támogatás, nincs élesítési jelzés. Sóhajtva feljegyzed magadnak, hogy holnap foglalkoznod kell ezzel. Ez legalább egy nappal kitolja az indulás dátumát, de hát...

Utasítások

A feladatod, hogy bankszámlákat valósíts meg, amelyek támogatják a nyitást, a zárást, a pénzfelvételt és a befizetést.

Mivel a bankszámlákat sokféle módon el lehet érni (interneten, mobiltelefonon, automatikus terheléssel), a banki szoftverednek lehetővé kell tennie, hogy a számlákat több szálból vagy folyamatból (a megnevezés a programozási nyelvedtől függ) párhuzamosan, biztonságosan el lehessen érni. Előfordulhat például, hogy sok befizetés és pénzfelvétel zajlik párhuzamosan; gondoskodnod kell róla, hogy ne alakuljon ki versenyhelyzet aközött, amikor kiolvasod a számla egyenlegét, és amikor beállítod az új egyenleget.

A számlát le is kell tudni zárni; a lezárt számlával szembeni műveleteknek sikertelennek kell lenniük.

Note

A Python nem támogat „valódi” konkurenciát a Global Interpreter Lock miatt. Bár jelenleg is folyik a munka a Python free-threading támogatásának megteremtésén, ez még mindig kísérleti jellegű. A jelenlegi szabványos könyvtári megoldásokat, mint a multiprocessing és a threading, nehéz megvalósítani a kurzus jelenlegi toolingjával.

Ezért ebben a feladatban félretettük a konkurenciára vonatkozó követelményt. A számlaműveletek egyetlen szálon, egymás után futnak, és nem futnak konkurencia- vagy „versenyhelyzet” tesztek.

Ha kísérletezni szeretnél a free-threadinggel vagy a konkurenciatesztekkel, azt kérjük, hogy helyben tedd. A feladatok helyi letöltésében és megoldásában az Exercism CLI nyújt segítséget.


Kivételüzenetek

Néha szükség van arra, hogy kivételt dobj. Ilyenkor mindig adj meg egy beszédes hibaüzenetet, amely megmutatja, mi a hiba forrása. Ettől olvashatóbb lesz a kódod, és a hibakeresést is nagyban megkönnyíti. Ha tudod, hogy a hiba forrása egy adott típusú, választhatsz a beépített hibatípusok közül, de ilyenkor is szerepeljen beszédes üzenet.

Ez a feladat megköveteli, hogy a raise utasítással „dobj” egy ValueError kivételt, ha egy számla nyitva van, vagy épp nincs nyitva, illetve ha a pénzfelvétel vagy a befizetés összege hibás. A tesztek csak akkor mennek át, ha raise segítségével dobod a exception-t, és üzenetet is fűzöl hozzá.

Ha üzenettel szeretnél ValueError-t dobni, írd meg az üzenetet a exception típus argumentumaként:

# account is not open
raise ValueError('account not open')

# account is already open
raise ValueError('account already open')

# incorrect withdrawal/deposit amount
raise ValueError('amount must be greater than 0')

# withdrawal is too big
raise ValueError('amount must be less than balance')
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Bankszámla feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.