In this script a random number is generated, before the number is passed the number is checked if it is a prime number if it is then the number is passed.
I can either do this with calling a function that checks for prime number validity or use a decorator.

A decorator is a function that takes in a function as an argument, the purpose is to add on additional function while maintaining the original function intact.

A wrapper processes the original function’s return value, and return back to the function with return wrapper, if the wrapper function is not returned then the value returned will be None.

from random import randrange
# Decorator is_prime
def is_prime(f):
# This wrapper adds on prime number checking on randomly generated number.
# returns a boolean and prime number, if boolean is false then no prime number
# i.e. None.
def wrapper(*args):
# the function has to return a value to use this wrapper.
num = f(*args)
# 1 and even numbers are not prime.
if num <= 1 or num % 2 == 0:
return False, num
# 2 is the only even number that is a prime number
elif num == 2:
return True, num
else:
# Test if any odd number has found a factor between 3 and 1 + sqrt(num).
for i in range(3, 1 + int(num**0.5), 2):
if num % i == 0:
# a divisor other than 1 and itself is found hence not prime.
return False, num
# anything else is a prime number
return True, num
return wrapper
@is_prime
def get_prime(start, stop):
return randrange(start, stop)
if __name__ == '__main__':
state = False
prime_nums = list()
# Keep finding a prime number between 2 and 100
while not state:
state, num = get_prime(2, 100)
print(f"{num} is found amongst the random numbers.")