Bowling

Bowling

Közepes

Utasítások

Pontozz egy bowlingjátszmát.

A bowling olyan játék, amelyben a játékosok egy nehéz golyót gurítanak el, hogy ledöntsék a háromszög alakban felállított bábukat. Írj kódot, amely nyomon követi egy bowlingjátszma pontszámát.

A bowling pontozása

A játék 10 frame-ből áll. Egy frame egy vagy két golyódobásból áll, a frame kezdetén pedig 10 bábu áll. Egy frame pontozásakor három eset lehetséges.

  • Nyitott frame az, amikor a frame-re 10-nél kevesebb pont kerül. Ebben az esetben a frame pontszáma a ledöntött bábuk száma.

  • Spare az, amikor a második dobással mind a tíz bábu ledől. A spare összértéke 10 plusz a következő dobásban ledöntött bábuk száma.

  • Strike az, amikor az első dobással mind a tíz bábu ledől. A strike összértéke 10 plusz a következő két dobásban ledöntött bábuk száma. Ha egy strike-ot azonnal egy második strike követ, akkor az első strike értékét addig nem lehet meghatározni, amíg a golyót még egyszer el nem dobják.

Íme egy példa három frame-re:

1. frame 2. frame 3. frame
X (strike) 5/ (spare) 9 0 (nyitott frame)

Az 1. frame értéke (10 + 5 + 5) = 20

A 2. frame értéke (5 + 5 + 9) = 19

A 3. frame értéke (9 + 0) = 9

Ez azt jelenti, hogy az aktuális összpontszám 48.

A játékban a tizedik frame különleges eset. Ha valaki spare-t vagy strike-ot dob, akkor rendre egy vagy két pótdobást kap. A pótdobások arra szolgálnak, hogy kiszámítsák a 10. frame összértékét. Ha a pótdobáson strike-ot vagy spare-t ér el, az nem ad a játékosnak további pótdobásokat. A 10. frame összértéke a ledöntött bábuk teljes száma.

Egy X1/ tizedik frame (strike és egy spare) esetén az összérték 20.

Egy XXX tizedik frame (három strike) esetén az összérték 30.

Követelmények

Írj kódot, amely nyomon követi egy bowlingjátszma pontszámát. Két műveletet kell támogatnia:

  • A roll(pins : int) minden alkalommal meghívódik, amikor a játékos elgurít egy golyót. Az argumentum a ledöntött bábuk száma.
  • A score() : int csak a játék legvégén hívódik meg. Visszaadja az adott játék összpontszámát.

Kivételüzenetek

Néha szükség van arra, hogy kivételt dobj. Amikor ezt teszed, mindig adj meg egy beszédes hibaüzenetet, hogy jelezd, mi a hiba forrása. Ez olvashatóbbá teszi a kódodat, és jelentősen segít a hibakeresésben. Azokban az esetekben, amikor tudod, hogy a hiba forrása egy bizonyos típus lesz, választhatsz, hogy a beépített hibatípusok egyikét dobod, de ilyenkor is adj meg egy beszédes üzenetet.

Ennél a feladatnál a raise utasítást kell használnod, hogy „hibát dobj”, amikor nem követed a pontozási vagy játékszabályokat. A tesztek csak akkor lesznek sikeresek, ha raise-elsz egy exception-t, és üzenetet is adsz hozzá.

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

# example when a bonus is attempted with an open frame
raise IndexError("cannot throw bonus with an open tenth frame")

# example when fill balls are invalid
raise ValueError("invalid fill balls")
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) Bowling 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.