یک مسئلهٔ واقعی رو به دو تابع کوچک تقسیم کن. ورودی متن نمرههاست، جداشده با ویرگول انگلیسی، مثل "18, bad, 0, 22, 12.5". قطعهٔ خالی هم نامعتبر هست؛ متن خالی یک قطعهٔ نامعتبر داره. هر قطعه رو با float تبدیل کن؛ تنها بازهٔ ۰ تا ۲۰ معتبر هست. nan و inf هم نمره نیستن.
parse_grade(token) باید عدد معتبر یا None بدهد؛ فقط ValueError تبدیل رو مدیریت کن. سپس analyze_grades(text, pass_mark=10) از اون استفاده کند و دیکشنری گزارش برگرداند:
- valid: تعداد نمرههای معتبر؛
- invalid: تعداد قطعههای نامعتبر؛
- average: میانگین معتبرها تا دو رقم اعشار، یا None اگه معتبر نداریم؛
- passed: تعداد نمرههای بزرگتر یا مساوی pass_mark؛
- highest: بیشترین نمرهٔ معتبر، یا None اگه معتبر نداریم.
pass_mark در این تمرین عددی در بازهٔ ۰ تا ۲۰ هست. در نمونهٔ بالا سه نمرهٔ ۱۸، ۰ و ۱۲٫۵ معتبرند؛ دو قطعه نامعتبرند؛ میانگین ۱۰٫۱۷، قبولی ۲ و بیشترین نمره ۱۸ هست.
پیش از کد، برای «همه نامعتبر»، «فقط صفر» و «قبولی دقیقاً روی مرز» پاسخ بساز. None رو با is None بررسی کن؛ if not grade بهاشتباه صفر رو کنار میذاره. برای میانگین round(number, 2) به کار ببر. analyze_grades("9, 12", pass_mark=12) آرگومان نامدار رو هم تمرین میده.
فعالیت شما
با تقسیم مسئله، بررسی ورودی و تابعهای کوچک، گزارش نمره بساز.