Kurzusok
/
Python
Python
/
Feladatok
/
Pénzváltás
Pénzváltás

Pénzváltás

Közepes

Bevezetés

A mesebeli Coinholt faluban a pékséged pultja mögött állsz, és épp egy friss adag péksüteményt rendezel el. Az ajtó nyikorogva kinyílik, és belép Denara, egy ügyes kereskedő, akinek jó szeme van a minőségi árukhoz. Egy gyors étkezés után átcsúsztat a pulton egy csillogó érmét, amely 100 egységet ér.

Elmosolyodsz, elveszed az érmét, és az étkezés végösszegére pillantasz: 88 egység. Ez azt jelenti, hogy 12 egység visszajárót kell adnod.

Denara várakozásteljesen nyújtja feléd a kezét. „Csak a lehető legkevesebb érmét add ide” – mondja mosolyogva. „A pénztárcám már tele van, és nem akarom kockáztatni, hogy elveszítem őket az úton.”

Tudod, hogy több lehetőséged is van. „Visszajáróként Lumis (10 egységet ér), Viras (5 egységet ér) és Zenth (2 egységet ér) áll rendelkezésünkre.”

Gyorsan fejben kiszámolod a lehetőségeket:

  • egy Lumis (1 × 10 egység) + egy Zenth (1 × 2 egység) = összesen 2 érme
  • két Viras (2 × 5 egység) + egy Zenth (1 × 2 egység) = összesen 3 érme
  • hat Zenth (6 × 2 egység) = összesen 6 érme

„A legjobb választás két érme: egy Lumis és egy Zenth” – mondod, és átadod neki a visszajárót.

Denara elmosolyodik, láthatóan elismeréssel. „Mint mindig, most is jól számoltál.”

Utasítások

Határozd meg, hány érmével lehet a legkevesebbet visszaadni egy vásárlónak úgy, hogy az érmék értékeinek összege éppen a visszajáró összeggel legyen egyenlő.

Példák

  • Egy 15-ös összegnél, ha a rendelkezésre álló érmék értékei [1, 5, 10, 25, 100], egy 5-ös és egy 10-es értékű érmét kell visszaadni, azaz [5, 10].
  • Egy 40-es összegnél, ha a rendelkezésre álló érmék értékei [1, 5, 10, 25, 100], egy 5-ös, egy 10-es és egy 25-ös értékű érmét kell visszaadni, azaz [5, 10, 25].

Kivételüzenetek

Néha szükség van arra, hogy kivételt dobj. Ilyenkor mindig adj meg egy beszédes hibaüzenetet, amely jelzi, mi a hiba forrása. Ez olvashatóbbá teszi a kódot, és jelentősen megkönnyíti a debuggingot. Ha tudod, hogy a hiba forrása egy adott típusú lesz, dönthetsz úgy, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg beszédes üzenetet.

Ennél a feladatnál a raise utasítás használatával kell „dobnod” egy ValueError-t, ha a megadott érmékkel nem lehet előállítani a váltást. A tesztek csak akkor futnak át, ha a raise utasítással dobod az exception-t, és üzenetet is fűzöl hozzá.

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

# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Pénzváltás 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.