def get_next_challenge(current_challenge: Challenge, current_running_challenge: RunningChallenges): all_challenges = Challenge.objects.all() current_challenge_proba = current_challenge.solve_proba() print("Current challenge proba: {}".format(current_challenge_proba)) if current_running_challenge.get_solve_duration_min() > 5: print("Players are too dumb") next_challenges = filter(lambda c: c.solve_proba() >= current_challenge_proba, all_challenges) else: print("Players are too smart") next_challenges = filter(lambda c: c.solve_proba() <= current_challenge_proba, all_challenges) next_challenges = [n for n in next_challenges if n.id != current_challenge.id] if not next_challenges: next_challenges=list(Challenge.objects.all()) next_challenges = [n for n in next_challenges if n.id != current_challenge.id] next_challenge = random.choice(next_challenges) print("Next challenge is {}".format(next_challenge)) return next_challenge