Bowling

Bowling

Mittel

Anleitung

Zähle die Punkte eines Bowling-Spiels.

Bowling ist ein Spiel, bei dem die Spieler eine schwere Kugel rollen, um Pins umzuwerfen, die in einem Dreieck aufgestellt sind. Schreibe Code, der die Punktzahl eines Bowling-Spiels mitverfolgt.

Punktezählung beim Bowling

Das Spiel besteht aus 10 Frames. Ein Frame besteht aus einem oder zwei Würfen, wobei zu Beginn des Frames 10 Pins stehen. Für die Berechnung eines Frames gibt es drei Fälle.

  • Bei einem offenen Frame wird für den Frame eine Punktzahl von weniger als 10 notiert. Die Punktzahl für den Frame ist dann die Anzahl der umgeworfenen Pins.

  • Bei einem Spare werden alle zehn Pins mit dem zweiten Wurf umgeworfen. Der Gesamtwert eines Spares ist 10 plus die Anzahl der Pins, die mit dem nächsten Wurf umgeworfen werden.

  • Bei einem Strike werden alle zehn Pins mit dem ersten Wurf umgeworfen. Der Gesamtwert eines Strikes ist 10 plus die Anzahl der Pins, die in den nächsten beiden Würfen umgeworfen werden. Folgt auf einen Strike direkt ein zweiter Strike, kann der Wert des ersten Strikes erst bestimmt werden, wenn die Kugel noch einmal geworfen wird.

Hier ist ein Beispiel mit drei Frames:

Frame 1 Frame 2 Frame 3
X (Strike) 5/ (Spare) 9 0 (offener Frame)

Frame 1 ergibt (10 + 5 + 5) = 20

Frame 2 ergibt (5 + 5 + 9) = 19

Frame 3 ergibt (9 + 0) = 9

Damit beträgt die aktuelle laufende Gesamtsumme 48.

Der zehnte Frame im Spiel ist ein Sonderfall. Wirft jemand einen Strike oder ein Spare, bekommt diese Person einen bzw. zwei Zusatzbälle. Die Zusatzbälle dienen dazu, die Gesamtsumme des 10. Frames zu berechnen. Ein Strike oder ein Spare auf einem Zusatzball verschafft dem Spieler keine weiteren Zusatzbälle. Der Gesamtwert des 10. Frames ist die Gesamtzahl der umgeworfenen Pins.

Bei einem zehnten Frame von X1/ (Strike und Spare) beträgt der Gesamtwert 20.

Bei einem zehnten Frame von XXX (drei Strikes) beträgt der Gesamtwert 30.

Anforderungen

Schreibe Code, der die Punktzahl eines Bowling-Spiels mitverfolgt. Der Code sollte zwei Operationen unterstützen:

  • roll(pins : int) wird jedes Mal aufgerufen, wenn der Spieler eine Kugel wirft. Das Argument ist die Anzahl der umgeworfenen Pins.
  • score() : int wird nur ganz am Ende des Spiels aufgerufen. Die Funktion gibt die Gesamtpunktzahl für dieses Spiel zurück.

Ausnahmemeldungen

Manchmal ist es notwendig, eine Ausnahme auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die verrät, woher der Fehler kommt. Das macht deinen Code lesbarer und hilft beim Debuggen erheblich weiter. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.

Diese Übung erfordert, dass du die raise-Anweisung verwendest, um einen Fehler zu „werfen“, wenn die Wertungs- oder Spielregeln nicht eingehalten werden. Die Tests bestehen nur, wenn du die exception mit raise auslöst und eine Meldung dazu angibst.

Um einen ValueError mit einer Meldung auszulösen, schreibst du die Meldung als Argument an den Typ exception:

# 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")
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Bowling zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.