Create an rng object with np.random.default_rng(), you can seed it for reproducible results. You can draw samples from probability distributions, including from the binomial and normal distributions.
Making random numbers is a hot business in computer science. Graphics and cryptography, in particular, rely on randomness or at least randomness that’s good enough to fool users/hackers/gamers. Mostly ...