возвращая используя random.choices () - PullRequest
0 голосов
/ 11 января 2020

В настоящее время мы пишем небольшую игру для школы, и чтобы выбрать, какое из них появится при включении, мы используем метод choices () , чтобы получить взвешенные вероятности и выбрать из списка, содержащего имена классов. Проблема, с которой я сталкиваюсь, заключается в том, что поскольку метод choices () возвращает массив, я не могу добавить свой объект в список, вот код, если у вас есть время, чтобы помочь нам. .. Спасибо

def Choice2():
    Type2 = choices([Healboost, DmgsUp, FireRateBoost, ""],weights=proba_powerups) #[0][1][2] are my class names, [3] is for no powerup
    CreatePowerUps(str(Type2)) # converting to str in order to strip "[]"


def CreatePowerUps(a):
    global Time,powerups
    a = a.strip("[]") # removing the "[]"
    print(f"a : {type(a)}") # prints "a : <class 'str'>"
    if Time > 0:
        if a == Healboost :
            powerups.append(a())
        elif a == FireRateBoost :
            powerups.append(a())
        elif a == DmgsUp :
            powerups.append(a())
        elif a == "":
            pass
        if Time > 1200:
            Time -= 10
        print(powerups) # debugging purpose (list stays empty)
        NFP.after(Time,Choice2)
    else:
        pass

1 Ответ

0 голосов
/ 11 января 2020

С какой стати вы приводите список в строку? Вам просто нужно выбрать первый элемент.

Вот упрощенный пример:

from random import choices

x, y, z = [0, 1, 2]
powerups = []

def choice2():
    type2 = choices([x, y, z, ""], weights=[1] * 4)
    create_power_ups(type2[0])

def create_power_ups(a):
    if a in (x, y, z):
        powerups.append(a)
    print(powerups)

choice2()

Запустите его несколько раз, и вы увидите все различные варианты: [], [0], [1] и [2].

Кстати, UpperCamelCase должен быть зарезервирован для имен классов, поэтому я исправил это, пока был там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...