How can you make it simpler? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: How can you make it simpler? (/thread-29206.html) |
How can you make it simpler? - bitcoin10mil - Aug-22-2020 Hi. I'm a newbie. I'm trying to make a Python program that can give me a random 4 digit number without digit repetition but it is too long and very confusing. Can you make it simpler? def fourdigit(x): import random num2 = random.randrange(0, 10) num3 = random.randrange(0, 10) num4 = random.randrange(0, 10) if num2 == x: while num2 == x: num2 = random.randrange(0, 10) if num3 == x: while num3 == x: num3 = random.randrange(0, 10) if num3 == num2: while num3 == num2: num3 = random.randrange(0, 10) if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num3 == num2: while num3 == num2: num3 = random.randrange(0, 10) if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num3 == x: while num3 == x: num3 = random.randrange(0, 10) if num3 == num2: while num3 == num2: num3 = random.randrange(0, 10) if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num3 == num2: while num3 == num2: num3 = random.randrange(0, 10) if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == x: while num4 == x: num4 = random.randrange(0, 10) if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num2: while num4 == num2: num4 = random.randrange(0, 10) if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) else: if num4 == num3: while num4 == num3: num4 = random.randrange(0, 10) print(x, num2, num3, num4) else: print(x, num2, num3, num4) RE: How can you make it simpler? - DreamingInsanity - Aug-22-2020 I'm not sure what the parameter "x" does - could you expand on that? If you just want a 4 digit number with not repeating digits, you could try this: def fourdigit(): n = random.randint(1000, 9999) #randomly picks a 4 digit number digits = set(str(n)) #it creates a list of all of the characters in the numer if(len(digits) < len(str(n))): #set() ignore duplicates, so if there is a any duplicates the length of the list will be less than the original number return fourdigit() #therefore call it recursively until there is a value with no repeating digits return n #return the valueWhen I ran that over and over again I didn't see any values with any duplicate numbers. RE: How can you make it simpler? - bitcoin10mil - Aug-22-2020 (Aug-22-2020, 07:39 PM)DreamingInsanity Wrote: I'm not sure what the parameter "x" does - could you expand on that? x is the first digit num2= 2nd digit num3= 3rd digit num4= 4th digit RE: How can you make it simpler? - DreamingInsanity - Aug-22-2020 (Aug-22-2020, 08:00 PM)bitcoin10mil Wrote: x is the first digitWith a little change, it works with this: def fourdigit(first): n = random.randint(100, 999) n = str(first) + str(n) digits = set(n) if(len(digits) < len(n)): return fourdigit(first) return int(n)rather than generating a 4 digit number it just generates a 3 digit number and adds the first digit to the front. RE: How can you make it simpler? - bowlofred - Aug-22-2020 You could use permutations() to generate all possible permutations of 4 digits, then random_choice() to pick one. from itertools import permutations import random import string all_choices = list(permutations(string.digits, 4)) choice = random.choice(all_choices) print("".join(choice))If this were a huge amount, turning the possibilities into a list() just for random to pick isn't that efficient, but for a 4 digit number, it's not a problem. RE: How can you make it simpler? - snippsat - Aug-22-2020 Use (Aug-22-2020, 07:21 PM)bitcoin10mil Wrote: Python program that can give me a random 4 digit number without digit repetitionUse random.sample(). >>> import random >>> >>> random.sample(range(10), 4) [6, 8, 9, 7] >>> random.sample(range(10), 4) [7, 6, 2, 3] >>> random.sample(range(10), 10) [0, 4, 9, 2, 6, 8, 1, 7, 3, 5] >>> random.sample(range(10), 10) [8, 4, 6, 9, 5, 0, 1, 2, 7, 3] |