Python - 5 digit random number generator with no repeating digits
Mia Lopez
I am supposed to print a random 5-digit number with no repeating digits, then ask the user for a three digit number. If the user's number contains three digits from the random number, print "correct".
I am using this code for the random number
num = random.randint (0,99999)
print (num)The problem is it will not always print a five digit number.
Also, I don't know how to match the user number with the random number.
Thank you.
74 Answers
Take a random sample of the digits 0 to 9:
''.join(random.sample('0123456789', 5)) 6 You can generate all the 5 digits ints with unique digits like so:
tgt=set()
for i in range(1234,99999+1): s='{:05d}'.format(i) if len(set(s))==5: tgt.add(s) Then use random.choose(tgt) to select one at random.
(but tdelaney's answer is better)
Use zfill and set like so: Edited to account for numbers with repeating digits
import random
def threeInFive(user_num): num = str(random.randint(0, 99999)).zfill(5) num = ''.join(set([n for n in num])) if len(num) < 5: print "There were repeating digits...trying again" threeInFive(user_num) elif str(user_num) in num: print "The user number is in there!" return True else: print "The user number : %s is not in : %s" % (user_num, num) return False
threeInFive(500) 2 If you generate your numbers like this:
larger_number = ''.join(random.sample(string.digits, 5))And got the numbers from the user like this:
def get_user_num(length=5): while True: num = raw_input('Enter a {}-digit number with no repeating digits: '.format(length)).zfill(length) if len(set(num)) < length: print('Please try again.') continue else: return numYou could determine if the user's numbers were in the number list like so:
set(user_number) < set(larger_number)And then it would be a really simple matter to combine this all together into a program. Note that the numbers are never actually treated as numbers - they're just strings.