๐Ÿ’ป Exercise: Exercise: Step efficiency

๐Ÿ“ Instructions

Write step_efficiency(traces) returning the mean 'steps' over the successful traces only (lower is better). Return 0.0 if there are no successful traces. Standard library only.

๐Ÿงช Initial Code / Tests

๐Ÿ“„ evaluate.py
from unittest import TestCase
from exercise import step_efficiency


class Evaluate(TestCase):
    def test_averages_successful_only(self):
        traces = [{'success': True, 'steps': 2}, {'success': True, 'steps': 4},
                  {'success': False, 'steps': 99}]
        self.assertEqual(step_efficiency(traces), 3.0)

    def test_no_success_is_zero(self):
        self.assertEqual(step_efficiency([{'success': False, 'steps': 5}]), 0.0)

    def test_single_success(self):
        self.assertEqual(step_efficiency([{'success': True, 'steps': 7}]), 7.0)

โœ… Solutions

๐Ÿ“„ exercise.py
def step_efficiency(traces):
    wins = [t for t in traces if t.get('success')]
    if not wins:
        return 0.0
    return sum(t.get('steps', 0) for t in wins) / len(wins)