0

I'm trying to get a random number that is not used (already printed). here's my code:

import random
used_numbers = []

def generate_random_number():
    num = random.randint(1, 90)
    if num not in used_numbers:
        used_numbers.append(num)
        return num
    elif num in used_numbers and num == generate_random_number():
        generate_random_number()

for i in range(90):
    print(generate_random_number())

For some reason after like 20 numbers it returning "None"..

Even if I tried switching to set, I'm still getting alot of "None"s.

What I'm Expecting to get:

A random number from 1 to 90 that is not used, for example:

1
90
82
53
34
65
21
86

ex.

Before I was getting something like this:

34
34
34
12
53
34
12
12
17
18
10
23
12

ex.

  • What is the point of `and num == generate_random_number()`? In any case, the `None` comes from the second branch of the if statement lacking a return. – John Coleman Nov 05 '22 at 10:46
  • 3
    Also -- if all you want is a permutation of 1-90, form the list `nums = list(range(1,91))` and then use `random.shuffle(nums)`. – John Coleman Nov 05 '22 at 10:52

1 Answers1

0

You can use sets to guarantee the uniqueness of numbers and a while loop to iterate until you have a previously unseen number.

So, your function becomes:

import random
used_numbers = set()

def generate_random_number():
    num = random.randint(1, 90)
    while num in used_numbers:
        num = random.randint(1, 90)
    used_numbers.add(num)
    return num

for i in range(90):
    print(generate_random_number())
Giuseppe La Gualano
  • 1,491
  • 1
  • 4
  • 24