В дальнейшем я предполагаю, что вы хотите, чтобы вероятность 97% была равномерно распределена по 640*480 - 1
целочисленным координатам, отличным от (100, 100).
Мое предложение похоже на предложение Пита, но с точными вероятностями (установленными Fraction
), заданными так, что на втором этапе обозначенная координата (100, 100) не является частным случаем. Во-первых, давайте выясним, какие точные вероятности необходимы:
>>> from fractions import Fraction
>>> p = Fraction(97, 100) / (640 * 480 - 1)
>>> p
Fraction(1, 316700)
>>> remainder = 1 - (640 * 480 * p)
>>> remainder
Fraction(95, 3167)
У нас есть 97/100
вероятности, распределенной по неуказанным координатам, поэтому каждая должна произойти с вероятностью 1 / 316700
. Давайте также поместим эту большую вероятность в обозначенную координату. В этом случае оставшаяся вероятность в (100, 100) рассчитывается как remainder
. Алгоритм становится таким:
if random.random() <= remainder:
coordinates = 100, 100
else:
coordinates = random.randint(0, 639), random.randint(0, 479)
Если вы действительно хотели, чтобы результаты были непрерывными, за исключением всплеска вероятности в (100, 100), то ответ Пита — правильный путь.
person
pjs
schedule
23.05.2014