2016-08-19 4 views
7

Мне было интересно, есть ли генератор случайных букв в Python, который принимает диапазон в качестве параметра? Например, если мне нужен диапазон между A и D? Я знаю, что вы можете использовать это в качестве генератора:Есть ли генератор случайных букв с диапазоном?

import random 
import string 

random.choice(string.ascii_letters) 

Но это не позволяет вам поставлять его в ряд.

+3

'random.choice ('ABCD')' ??? –

+0

Вы можете получить случайное число от 65 до 90, а затем преобразовать его в символ ASCII. – GrizzlyManBear

ответ

9

Вы можете нарезать string.ascii_letters:

random.choice(string.ascii_letters[0:4]) 
4

Ascii представлен цифрами, поэтому вы можете произвольно выбрать число в диапазоне, который вы предпочитаете, а затем передать его на char.

3

Функция choice имеет общую последовательность.

Возвращает случайный элемент из непустой последовательности seq.

В частности

random.choice(['A', 'B', 'C', 'D']) 

будет делать то, что вы хотите.

Вы можете легко создавать диапазон программно:

random.choice([chr(c) for c in xrange(ord('A'), ord('D')+1)]) 
3

Строка нарезка будет мое решение этой

random.choice(string.ascii_letters[:4]) 

Это случайным образом выбрать одна из первых четырех букв алфавита. Очевидно, 4 может быть любой ценностью.

1

Вы можете тривиальным определить такую ​​вещь:

def letters_in_range(start_letter, end_letter): 
    start_index = string.ascii_letters.find(start_letter) 
    end_index = string.ascii_letters.find(end_letter) 
    assert start_index != -1 
    assert end_index != -1 
    assert start_letter < end_letter 
    return string.ascii_letters[start_index:end_index] 

С выше:

random.choice(letters_in_range('A', 'D')) 
2
>>> random.choice('ABCD') 
'C' 

Или, если это больший диапазон, так что вы не хотите, чтобы напечатать их все :

>>> chr(random.randint(ord('I'), ord('Q'))) 
'O' 
1

Использование оригинальной ва y получения случайной буквы вы можете просто сделать функцию как таковую.

def getLetter(start, stop): 
    letter = random.choice(string.ascii_letters) 
    while letter < start and letter > stop: 
     letter = random.choice(string.ascii_letters) 
    return letter 

Назвать это как getLetter('a', 'd')

1

пила это и думал, что алгоритм я просто написал может быть полезным. Это генерирует случайную строчную строку ascii длины N:

from random import randint 

def generate_random_nlength_string(n): 
    prandstr = [chr(randint(65,90)) for _ in range(n)] 
    return ''.join(prandstr) 
Смежные вопросы