带有概率的python列表/字典

时间:2019-01-20 05:51:55

标签: python python-3.x list dictionary

早上好:) 我目前正在做词汇培训师。 我有一本字典,所有词汇及其翻译都存储在其中。现在我有一个查询,告诉我应该翻译什么词汇。

如果我现在正确输入翻译词,那么该词被查询的可能性就会降低。我怎样才能做到这一点?我想知道,是否有可能通过在回答翻译权时制作一个列表,使其比第一个列表少,并将词汇移入该列表中。

这是我的代码:

or

3 个答案:

答案 0 :(得分:0)

您可以执行以下操作。每次用户获得正确的翻译时,都将该单词添加到单独的列表中。下次随机选择一个单词并将其放在新列表中时,请以一定的概率(例如50%)使用该单词;否则,请选择另一个单词。您需要将此逻辑放在自己的循环中,以防随机选择另一个“正确”的词。

react-native addpod [pod]

答案 1 :(得分:0)

好主意。

words = {
    ("Haus", "house", 1),
    ("Garten", "garden", 0.5),
    ("Freund", "friend", 1),
    ("Freundin", "friend", 1)
}

def get_word():
    total_probability = sum(map(words, lambda x: x[2]))
    selected = random.random() * total_probability
    current_probability = 0
    for word, translation, probability in words:
        current_probability += probability
        if select < current_probability:
            return word, translation

答案 2 :(得分:0)

您可以使用random.choices来指定样本权重。然后,我还将词汇表存储为一个列表,以保持相对于权重的排序。权重如何根据正确或错误的答案进行更新取决于您,但是您可以使用反比例缩放,例如:

vocab = [
    ("Haus", "house"),
    ("Garten", "garden"),
    ("Freund", "friend"),
    ("Freundin", "friend")
]
weights = [1] * len(vocab)

while ...:
    index, (x, y) = random.choices(enumerate(vocab), weights)

    attempt = input("Translate " + x)

    if(attempt == y):
        weights[index] = 1 / (1/weights[index] + 1)
    else:
        weights[index] = 1 / max(1/weights[index] - 1, 1)