例如, 该函数可能类似于 def RandABCD(n, .25, .34, .25, .25):
其中n是要生成的字符串的长度,后面的数字是期望的A、B、C、D的概率。
我想这很简单,但是我在创建工作程序时遇到了问题。任何帮助将不胜感激。
最佳答案
下面是选择单个加权值的代码。你应该可以从这里拿走它。它使用 bisect和 random完成工作。
from bisect import bisect
from random import random
def WeightedABCD(*weights):
chars = 'ABCD'
breakpoints = [sum(weights[:x+1]) for x in range(4)]
return chars[bisect(breakpoints, random())]
这样调用它:WeightedABCD(.25, .34, .25, .25)
。
编辑:这是一个即使权重加起来不等于 1.0 也能工作的版本:
from bisect import bisect_left
from random import uniform
def WeightedABCD(*weights):
chars = 'ABCD'
breakpoints = [sum(weights[:x+1]) for x in range(4)]
return chars[bisect_left(breakpoints, uniform(0.0,breakpoints[-1]))]
关于python - 我需要一个 Python 函数,当给定所需的字符概率时,它将输出 4 个不同字符的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744127/