Skip to content

Instantly share code, notes, and snippets.

@wernersbacher
Created December 21, 2022 10:27
Show Gist options
  • Save wernersbacher/1aaf41f766487a8ccd3bab846dab1591 to your computer and use it in GitHub Desktop.
Save wernersbacher/1aaf41f766487a8ccd3bab846dab1591 to your computer and use it in GitHub Desktop.
Generate a random integer from several intervals
def random_in_intervals(allowed_intervals: Iterable):
""" generate a radnom int from a selection of several intervals.
intervals have to be in the format a, b where b > a"""
sum_of_ranges = sum(b-a for a, b in allowed_intervals)
random_float = random.random()
relative_number = random_float*sum_of_ranges
# now we have to get the actual value from the interval
passed_len = 0
for start, end in allowed_intervals:
length = end-start
passed_len += length
if passed_len >= relative_number:
number_rest = passed_len - relative_number
absolute_number = start + number_rest
return round(absolute_number)
if __name__ == "__main__":
allowed_intervals = ((30, 60), (120, 150), (210, 240), (300, 330))
rand_list = [random_in_intervals(allowed_intervals) for n in range(20)]
print(rand_list)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment