import random import time import sys DEBUG=False def roll_until_n_success(n, p_success=0.5): successes = 0 tries = 0 faces = [0, 1] weights = [p_success, (1 - p_success)] while successes < n: if (random.choices(faces, weights, k=1)[0] == 0): successes += 1 tries += 1 return tries def simulate(num_trials, n, p_success=0.5): sum_trials = 0 sys.stdout.write(f"Trials\t\t\tAverage Rolls\n") for i in range(num_trials): sum_trials += roll_until_n_success(n, p_success) if DEBUG: print(f"[DEBUG] sum_trials: {sum_trials}") ave_trials = sum_trials / (i+1) ave_trials_percent = ave_trials # Clear line and move cursor to the beginning sys.stdout.write('\033[2K\033[0G') sys.stdout.write(f"({i+1}/{num_trials})\t{ave_trials_percent}%") sys.stdout.flush() sys.stdout.write("\n") def main(): program_name = sys.argv[0] if len(sys.argv) != 2: print(f"Usage: {program_name} ") return 1 num_trials = int(sys.argv[1]) random.seed() simulate(num_trials, 7, 0.5) if __name__ == "__main__": main()