def update_player_score(quiz: Quiz, player: str, round_num: int) -> None: """Updates the leaderboard with the score for a given player and round_number.""" s = input(f"Enter {player}'s score for round {round_num}: ") try: score = int(s) quiz.add_score(player, score) except ValueError: print(f"Error adding score '{s}' for {player}. Please try again") update_player_score(quiz, player, round_num)
class QuizTest(unittest.TestCase): def setUp(self) -> None: players = [f"Player{i}" for i in range(1, 5)] self.quiz = Quiz(players, num_rounds=2, round_length=5) def test_init(self): with self.assertRaises(AssertionError): Quiz(["Player1"]) players = ["Player1", "Player2"] quiz = Quiz(players) self.assertEqual(quiz.players, players) self.assertEqual(quiz.current_round, 1) def test_add_score(self): with self.assertRaises(KeyError): self.quiz.add_score("UnknownPlayer", 1) with self.assertRaises(ValueError): self.quiz.add_score("Player1", -1) with self.assertRaises(ValueError): self.quiz.add_score("Player2", 6) self.quiz.add_score("Player1", 5) self.quiz.add_score("Player2", 3) self.quiz.add_score("Player3", 4) self.quiz.add_score("Player4", 2) self.assertEqual(self.quiz.current_round, 2) self.quiz.add_score("Player1", 4) self.quiz.add_score("Player2", 2) self.quiz.add_score("Player3", 3) self.quiz.add_score("Player4", 1) self.assertIsNone(self.quiz.current_round) with self.assertRaises(RuntimeError): self.quiz.add_score("Player1", 4) def test_full_leaderboard(self): self.quiz.add_score("Player1", 5) self.quiz.add_score("Player2", 3) self.quiz.add_score("Player3", 4) self.quiz.add_score("Player4", 2) self.quiz.add_score("Player1", 4) self.quiz.add_score("Player2", 2) self.quiz.add_score("Player3", 3) self.quiz.add_score("Player4", 1) expected_values = [ [5, 4, 9], [4, 3, 7], [3, 2, 5], [2, 1, 3], ] leaderboard = self.quiz.full_leaderboard() self.assertEqual(leaderboard.values.tolist(), expected_values) def tearDown(self) -> None: del self.quiz