Python random module: How can I generate a random number which includes certain digits?

I am trying to generate a random number in Python, but I need it to include certain digits. Let's say the range I want for it is between 100000 and 999999, so I want it to be in that range but also include numbers like 1, 4, and 5. Is there a way to do this?


Solution 1:

you can build the number digit by digit

>>> import random
>>> def fun(required=(),size=6):
        result = list(required)
        n = size-len(result)
        result.extend( random.randint(0,10) for _ in range(n)) # fill in the remaining digits
        random.shuffle(result) 
        assert any(result) #make sure that there is at least one non zero digit
        while not result[0]: #make sure that the first digit is non zero so the resulting number be of the required size
            random.shuffle(result)
        return int("".join(map(str,result)))

>>> fun([1,4,5])
471505
>>> fun([1,4,5])
457310
>>> fun([1,4,5])
912457
>>> fun([1,4,5])
542961
>>> fun([1,4,5])
145079
>>>