有一个随机字母发生器有一个范围?

时间:2016-08-19 15:28:15

标签: python

我想知道Python中是否有一个随机字母生成器将范围作为参数? 例如,如果我想要A和D之间的范围?我知道你可以用它作为发电机:

import random
import string

random.choice(string.ascii_letters)

但它不允许你提供范围。

9 个答案:

答案 0 :(得分:10)

您可以切片string.ascii_letters

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

答案 1 :(得分:4)

Ascii用数字表示,因此您可以随机选择您喜欢的范围内的数字,然后将其转换为char。

答案 2 :(得分:3)

函数choice采用一般序列。

  

从非空序列seq中返回一个随机元素。

特别是

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

会做你想做的事。

您可以通过编程方式轻松生成范围:

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

答案 3 :(得分:3)

字符串切片将是我的解决方案

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

这将随机选择字母表的前4个字母之一。显然4可以是任何价值。

答案 4 :(得分:2)

>>> random.choice('ABCD')
'C'

或者如果它的范围较大,那么你不想全部输入它们:

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

答案 5 :(得分: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'))

答案 6 :(得分:1)

使用您原来的随机字母方式,您可以简单地创建一个函数。

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')

答案 7 :(得分:1)

看到这个并认为我刚写的算法可能会有所帮助。这会生成N长度的随机大写ascii字符串:

from random import randint

def generate_random_nlength_string(n):
    prandstr = [chr(randint(65,90)) for _ in range(n)]
    return ''.join(prandstr)

答案 8 :(得分:0)

您可以构建自己的字母范围迭代器并随机选择:

import random


def letter_range(start, stop, step=1):
    """Yield a range of lowercase letters.

    Examples
    --------
    >>> list(letter_range("a", "f"))
    ['a', 'b', 'c', 'd', 'e']

    >>> list(letter_range("a", "f", step=2))
    ['a', 'c', 'e']

    """
    start = ord(start.lower())
    stop = ord(stop.lower())
    for ord_ in range(start, stop, step):
        yield chr(ord_)


letters = list(letter_range("a", "g"))
random.choice(letters)
# "e"