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.
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)
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)