修复一个函数随时间返回的重复项?

2024-04-18 19:33:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有一个函数,它返回一个4位数的字符串。问题是当我运行这个函数500次或更多次时,它开始返回重复的结果。如何避免?你知道吗

我的职能:

import random
def CreatePass():
    Num = str(random.randint(1000, 9999)
    return Num

Tags: 函数字符串importreturndefrandomnum职能
3条回答

生成一个列表,在每次调用函数时将其洗牌并从中弹出:

import random

def CreatePass(_numbers=[]):
    if not _numbers:
        _numbers[:] = range(1000, 10000)
        random.shuffle(_numbers)              
    return str(_numbers.pop())

请注意,一旦用完了,这将重新生成_numbers列表,但是您已经用完了所有8999个可能的数字,并且无论如何都必须接受重复。你知道吗

你可以自己滚,希望不要把它累坏了:

from random import shuffle
def myrandom(start, end):
    possible = range(start, end)
    shuffle(possible)
    for i in possible:
        yield str(i)

randoms = myrand(1000, 9999)
print next(randoms)
print next(randoms)
# etc...

你会得到一个StopIteration当它用尽了。。。你知道吗

@Martijn的解决方案已经足够了,因为你只需要存储和洗牌9000个数字。如果您想要一个更大范围的数字,并且您知道(大约)需要多少个数字,那么有一个更好的方法:函数^{}将给您所需范围内的数字without重复。例如,要获得500个不同的六位数数字,您可以使用:

selected = random.sample(xrange(100000, 1000000), 500)

相关问题 更多 >