البولينج

البولينج

متوسط

التعليمات

احسب نقاط لعبة بولينج.

البولينج لعبة يدحرج فيها اللاعبون كرة ثقيلة لإسقاط قوارير مصفوفة على شكل مثلث. اكتب الكود اللازم لتتبّع نقاط لعبة بولينج.

احتساب النقاط في البولينج

تتكوّن اللعبة من 10 أشواط. يتكوّن الشوط من رمية كرة واحدة أو رميتين، مع وجود 10 قوارير منتصبة عند بداية الشوط. وهناك ثلاث حالات لاحتساب الشوط.

  • الشوط المفتوح هو الذي تُسجَّل فيه نتيجة أقل من 10. وفي هذه الحالة تكون نتيجة الشوط هي عدد القوارير المُسقَطة.

  • السبير هو إسقاط القوارير العشر كلها في الرمية الثانية. والقيمة الإجمالية للسبير هي 10 زائد عدد القوارير المُسقَطة في الرمية التالية.

  • السترايك هو إسقاط القوارير العشر كلها في الرمية الأولى. والقيمة الإجمالية للسترايك هي 10 زائد عدد القوارير المُسقَطة في الرميتين التاليتين. وإذا تبع السترايكَ سترايكٌ آخر مباشرةً، فلا يمكن تحديد قيمة السترايك الأول حتى تُرمى الكرة مرة أخرى.

إليك مثالًا بثلاثة أشواط:

الشوط الأول الشوط الثاني الشوط الثالث
X (سترايك) 5/ (سبير) 9 0 (شوط مفتوح)

الشوط الأول يساوي (10 + 5 + 5) = 20

الشوط الثاني يساوي (5 + 5 + 9) = 19

الشوط الثالث يساوي (9 + 0) = 9

وهذا يعني أن المجموع الجاري الحالي هو 48.

الشوط العاشر في اللعبة حالة خاصة. إذا حقّق اللاعب سبيرًا أو سترايكًا، فإنه يحصل على رمية تكميلية واحدة أو رميتين تكميليتين على الترتيب. والرميات التكميلية موجودة لحساب مجموع الشوط العاشر. واحتساب سترايك أو سبير في الرمية التكميلية لا يمنح اللاعب رميات تكميلية إضافية. والقيمة الإجمالية للشوط العاشر هي مجموع عدد القوارير المُسقَطة.

في شوط عاشر من X1/ (سترايك وسبير)، تكون القيمة الإجمالية 20.

وفي شوط عاشر من XXX (ثلاث مرات سترايك)، تكون القيمة الإجمالية 30.

المتطلبات

اكتب الكود اللازم لتتبّع نقاط لعبة بولينج. ويجب أن يدعم عمليتين:

  • تُستدعى roll(pins : int) في كل مرة يدحرج فيها اللاعب كرة. والوسيط هو عدد القوارير المُسقَطة.
  • تُستدعى score() : int في نهاية اللعبة فقط. وتُرجع مجموع نقاط تلك اللعبة.

رسائل الاستثناء

أحيانًا يكون من الضروري رفع استثناء. وعندما تفعل ذلك، ينبغي أن تتضمن دائمًا رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. يجعل هذا الكود أكثر وضوحًا ويساعد كثيرًا في تصحيح الأخطاء. في الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معين، يمكنك اختيار رفع أحد أنواع الأخطاء المدمجة، لكن يجب أن تتضمن رسالة ذات معنى.

يتطلب هذا التمرين تحديدًا أن تستخدم عبارة raise لـ«إطلاق» خطأ عندما لا يتم اتباع قواعد التسجيل أو اللعب. لن تنجح الاختبارات إلا إذا استخدمت raise لرفع exception وأدرجت رسالة معه.

لرفع ValueError مع رسالة، اكتب الرسالة كوسيط لنوع 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")
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء البولينج؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.