How to not repeat a random number?

72 views Asked by At

I`m trying to create a game "STOP" where it sort or draw a random number that it return a letter. The alphabetic has 25 letters, each number is a letter.

I want that each letter is printed it not repeat anymore, and the random choose a different letter.

Here is my code

import random

def let (ordem):
    if ordem == 0:
        return 'A'
    elif ordem == 1:
        return 'B'
    elif ordem == 2:
        return 'C'
    elif ordem == 3:
        return 'D'
    elif ordem == 4:
        return 'E'
    elif ordem == 5:
        return 'F'
    elif ordem == 6:
        return 'G'
    elif ordem == 7:
        return 'H'
    elif ordem == 8:
        return 'I'
    elif ordem == 9:
        return 'J'
    elif ordem == 10:
        return 'K'
    elif ordem == 11:
        return 'L'
    elif ordem == 12:
        return 'M'
    elif ordem == 13:
        return 'N'
    elif ordem == 14:
        return 'O'
    elif ordem == 15:
        return 'P'
    elif ordem == 16:
        return 'Q'
    elif ordem == 17:
        return 'R'
    elif ordem == 18:
        return 'S'
    elif ordem == 19:
        return 'T'
    elif ordem == 20:
        return 'U'
    elif ordem == 21:
        return 'V'
    elif ordem == 22:
        return 'W'
    elif ordem == 23:
        return 'X'
    elif ordem == 24:
        return 'Y'
    elif ordem == 25:
        return 'Z'
 
for l in range(1):
    ordem = random.randrange(25)
    abc = let(ordem)
    print(f'A letra sorteada foi *{abc}*')
2

There are 2 answers

0
Amadan On

You have two basic approaches for that:

  • remember the letters you pulled, or
  • keep in mind the letters you haven't pulled yet

The second approach is easier to do, especially by pre-shuffling the list:

import string
import random

letters = list(string.ascii_uppercase)  # list of letters in alphabet order
random.shuffle(letters)                 # list of letters in random order
letters.pop()                           # the first random letter
letters.pop()                           # the next random letter 

with each pop, the letters list shrinks, so you cannot get the same letter twice.

0
CRswr On

May I interest You in generators? Here is the example for your issue, try to run code on your environment and analize.

import random


def generate_letters():
    alphabet = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    random.shuffle(alphabet)

    for letter in alphabet:
        remaining_letters = len(alphabet) - 1
        yield letter, remaining_letters


if __name__ == "__main__":
    for letter, remaining in generate_letters():
        print(f'Letter: {letter}, Remaining: {remaining} letters')