Как сгенерировать список случайных букв, присвоенных случайным числам

#python #random #integer #character

#python #Случайный #целое #символ

Вопрос:

Мне нужно создать список случайных символов, которые генерируются из случайных чисел. В одном списке должны быть буквы, сгенерированные из случайных чисел, в то время как в другом списке будут буквы, которые уже есть в первом списке. Я видел метод импорта строк, который использует ascii, но я не до конца понимаю это. До сих пор я использовал метод случайного импорта и был в состоянии сгенерировать случайные числа, но я чувствую, что мой код слишком длинный и что должен быть более простой способ. Каждый раз, когда генерируется случайное число, программа должна преобразовать его в букву и добавить в список (называемый уникальным списком), только если число еще не присутствует в списке. Прекратите добавлять числа, как только список будет содержать 15 символов.

вот пример кода, который у меня есть на данный момент:

 uniqueList = []
excludedList = []
count = 0


while (len(uniqueList)<15):

    randomNumber = random.randint(*random.choice([(65,90), (97,122)]))
    print(randomNumber)

    if(randomNumber == 65):
        letter = 'A'
    if(randomNumber == 66):
        letter = 'B'
    if(randomNumber == 67):
        letter = 'C'
    if(randomNumber == 68):
        letter = 'D'
    if(randomNumber == 69):
        letter = 'E'
    if(randomNumber == 70):
  

вы можете сказать, что код длинный, поэтому я знаю, что должен быть более короткий способ

Комментарии:

1. letter = chr(randomNumber) ?

Ответ №1:

Если вам нужно 15 уникальных букв в списке, вы могли бы сделать следующее:

 import random
import string

letters = [i for i in string.ascii_lowercase]
random_list = random.sample(letters, 15)

print random_list
  

Это вернет что-то вроде:

 ['m', 's', 'r', 'f', 'x', 'l', 'e', 't', 'd', 'n', 'w', 'u', 'q', 'h', 'i']
  

Ответ №2:

Если вам просто нужен random letter , вы можете упростить логику, используя random.choice() как:

 import string
import random
my_char = string.letters
random.choice(my_char)
# returns 'z'
  

где string.letters будет возвращена строка из всех букв, т.е. 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'


Ниже приведен модифицированный код, основанный на вашей логике кода (с использованием random.choice() со случайным числом), как:

 import string
import random
my_char = string.letters
# Value returned by string.letters:
# 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

randomNumber = random.randint(*random.choice([(65,90), (97,122)]))
if randomNumber >=65 and randomNumber <=90:
   print my_char[randomNumber-65]
elif randomNumber >=97 and randomNumber <=122:
   print my_char[randomNumber-97 26]
  

Ответ №3:

Поскольку c # знает значения в юникоде, вы можете использовать

 letter=(char)randomNumber;  
  

хотя случайное число между 97 и 122, как это было сделано при использовании, приведет к случайному использованию строчной буквы. Если вы хотите использовать заглавную букву случайным образом, как вы указали, загляните в таблицу Unicode для значений верхнего регистра unicode.
http://unicode-table.com/en /