随机网址生成器,但确保结果唯一

时间:2019-03-18 19:38:17

标签: python

我发现自己正在网上搜寻类似于URL的字符串生成器,该生成器类似于twitch的片段随机URL架构。有关我的意思的示例,请参见here。我碰巧发现了readable-url,但可惜的是npm。所以...为了使这一功能对Python用户可用,我正在为我们做一个!实际上,我已经做到了,它在我的github now中。

我的难题是我想确保所有字符串对于每个生成的响应都是唯一的。完整代码如下。

from random import choice, sample

vowels = {'a', 'e', 'i', 'o', 'u'}

with open("words/adjectives.txt") as adjs_file:
  adjectives = adjs_file.read().split()
with open("words/nouns.txt") as words_file:
  nouns = words_file.read().split()

class SentenceURL:

    def __init__(self, word_count = 3, capitalize = True, seperator = ''):
        self.word_count = word_count
        self.capitalize = capitalize
        self.seperator = seperator

    def generate():
        """Generates readable URLs like Twitch's clips"""

        if self.word_count < 2:
            raise ValueError('Minimum value expected: 2')
        elif self.word_count > 10:
            raise ValueError('Maximum value expected: 10')

        noun = choice(nouns)
        word_list = []

        if self.word_count > 3:
            if noun in vowels:
                word_list = ['an']
            else:
                word_list = [choice(('a', 'the'))]

        word_list.extend(sample(adjectives, k = self.word_count-1))

        if self.word_count > 4:
            word_list.insert(2, 'and')

        word_list.append(noun)

        if self.capitalize:
            word_list = map(str.title, word_list)

        return self.seperator.join(word_list)

所以我最初的想法是只保留一组运行中的先前使用过的字符串,看看是否有新字符串存在,然后再生成另一个,这很容易实现,但是效率很低。我还有什么其他选择?谢谢!

0 个答案:

没有答案