2024-04-18 19:33:49 发布
网友
我这里有一个函数,它返回一个4位数的字符串。问题是当我运行这个函数500次或更多次时,它开始返回重复的结果。如何避免?你知道吗
我的职能:
import random def CreatePass(): Num = str(random.randint(1000, 9999) return Num
生成一个列表,在每次调用函数时将其洗牌并从中弹出:
import random def CreatePass(_numbers=[]): if not _numbers: _numbers[:] = range(1000, 10000) random.shuffle(_numbers) return str(_numbers.pop())
请注意,一旦用完了,这将重新生成_numbers列表,但是您已经用完了所有8999个可能的数字,并且无论如何都必须接受重复。你知道吗
_numbers
你可以自己滚,希望不要把它累坏了:
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当它用尽了。。。你知道吗
StopIteration
@Martijn的解决方案已经足够了,因为你只需要存储和洗牌9000个数字。如果您想要一个更大范围的数字,并且您知道(大约)需要多少个数字,那么有一个更好的方法:函数^{}将给您所需范围内的数字without重复。例如,要获得500个不同的六位数数字,您可以使用:
without
selected = random.sample(xrange(100000, 1000000), 500)
生成一个列表,在每次调用函数时将其洗牌并从中弹出:
请注意,一旦用完了,这将重新生成
_numbers
列表,但是您已经用完了所有8999个可能的数字,并且无论如何都必须接受重复。你知道吗你可以自己滚,希望不要把它累坏了:
你会得到一个
StopIteration
当它用尽了。。。你知道吗@Martijn的解决方案已经足够了,因为你只需要存储和洗牌9000个数字。如果您想要一个更大范围的数字,并且您知道(大约)需要多少个数字,那么有一个更好的方法:函数^{} 将给您所需范围内的数字
without
重复。例如,要获得500个不同的六位数数字,您可以使用:相关问题 更多 >
编程相关推荐