试图将加权RNG函数从php转换为python 3,但我很困惑



请不要对我的提问不以为然,但我真的很困惑。

<?php
function getRandomWeightedElement(array $weightedValues) {
$rand = mt_rand(1, (int) array_sum($weightedValues));
foreach ($weightedValues as $key => $value) {
$rand -= $value;
if ($rand <= 0) {
return $key;
}
}
}
?>

我正试图将这个我使用了很长时间的函数翻译成Python 3,但不明白为什么我的Python版本有时会从test1返回多个键。

#getRandomWeightedElement
#Takes in a keyed dictionary and returns a random element
import random
def getRandomWeightedElement(**data):
rand = random.randint(1, sum(data.values()))
for key, value in data.items():
rand -= value
if rand <= 0:
print(key)
test1 = {'One':25,'Two':25,'Three':25,'Four':25}
getRandomWeightedElement(**test1)

所以基本上我在问,为什么我在Python3中的函数与Php中的函数工作不一样,为什么它从test1返回多个键?

如果我遗漏了一些显而易见的东西,我很抱歉,我刚刚开始使用Python,还不知道一切是如何运行的。如有任何帮助,我将不胜感激。如果我问错了问题,也请告诉我。

在原始PHP代码中,一旦rand变为非正数,函数就会返回键,但在Python代码中,只需打印键而不返回。

您也应该在新代码中返回密钥,并打印函数的返回值:

import random
def getRandomWeightedElement(**data):
rand = random.randint(1, sum(data.values()))
for key, value in data.items():
rand -= value
if rand <= 0:
return key
test1 = {'One': 25, 'Two': 25, 'Three': 25, 'Four': 25}
print(getRandomWeightedElement(**test1))

最新更新