списки / словари с вероятностями

Изменен testem.js с настройками ниже. и его рабочий штраф:)

/* eslint-env node */
module.exports = {
  test_page: 'tests/index.html?hidepassed',
  disable_watching: true,
  launch_in_ci: [
    'Chrome'
  ],
  launch_in_dev: [
    'Chrome'
  ],
  browser_args: {
    Chrome: {
      mode: 'ci',
      args: [
        '--disable-gpu',
        '--headless',
        '--remote-debugging-port=0',
        '--window-size=1440,900'
      ]
    }
  }
};
1
задан Kannappan Sirchabesan 20 January 2019 в 18:31
поделиться

3 ответа

Вы можете использовать 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)
0
ответ дан a_guest 20 January 2019 в 18:31
поделиться

Быстрая идея.

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
0
ответ дан szatkus 20 January 2019 в 18:31
поделиться

Вы можете сделать следующее. Каждый раз, когда пользователь правильно переводит, добавляйте это слово в отдельный список. В следующий раз, когда слово будет выбрано случайным образом и оно окажется в новом списке, разрешите использовать его с определенной вероятностью, например, 50%; в противном случае выберите другое слово. Вам нужно будет поместить эту логику в собственный цикл на случай, если другое «правильное» слово будет выбрано случайным образом.

import random

vokabeln = {
    "Haus": "house",
    "Garten": "garden",
    "Freund": "friend",
    "Freundin": "friend"
}

korrekt = []

versuche = int(input("Anzahl der Versuche: "))
i=0

while i < versuche:
    ok = False
    while not ok:
        x = random.choice(list(vokabeln))
        y = vokabeln.get(x)
        if x in korrekt:
            if random.random() < 0.5:
                ok = True
        else:
            ok = True

    i+=1
    versuch = input("Übersetze " + x)
    if(versuch == y):
        korrekt.append(x)
        print("Korrekt!")
    else:
        print("Falsch, richtig war " + y)
0
ответ дан redcurry 20 January 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: