Python Forum
How can you make it simpler?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How can you make it simpler?
#1
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)
Reply
#2
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 value
When I ran that over and over again I didn't see any values with any duplicate numbers.
Reply
#3
(Aug-22-2020, 07:39 PM)DreamingInsanity Wrote: 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 value
When I ran that over and over again I didn't see any values with any duplicate numbers.

x is the first digit

num2= 2nd digit
num3= 3rd digit
num4= 4th digit
Reply
#4
(Aug-22-2020, 08:00 PM)bitcoin10mil Wrote: x is the first digit

num2= 2nd digit
num3= 3rd digit
num4= 4th digit
With 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.
Reply
#5
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.
Reply
#6
Use
(Aug-22-2020, 07:21 PM)bitcoin10mil Wrote: Python program that can give me a random 4 digit number without digit repetition
Use 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]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  i am looking for a simpler tokenizer Skaperen 7 3,450 Jul-29-2019, 05:31 PM
Last Post: Skaperen
  How to make this simpler. leoahum 7 3,626 Mar-11-2019, 01:57 PM
Last Post: leoahum

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020