#python #python_3x #инспекция_кода
Есть "программа" в которой есть классы Viking, Wizzard Assasin, далее должны формироваться две команды red_team и blue_team. В каждой команде может быть 3 участника dude, dude2, dude3 задача такая рандомно назначить переменным dude/2/3 классы. Я реализовал это так: chance = randint (1, 3) If chance == 1: dude = Viking (name = 'Red Viking') if chance == 2: dude = Wizzard (name = 'Red Wizzard') if chance == 3: dude = Assasin (name = 'Red Assasin') red_taem.append (dude.name) chance = randint (1, 3) If chance == 1: dude2 = Viking (name = 'Red Viking') if chance == 2: dude2 = Wizzard (name = 'Red Wizzard') if chance == 3: dude2 = Assasin (name = 'Red Assasin') red_team.append (dude2.name) chance = randint (1, 3) If chance == 1: dude3 = Viking (name = 'Red Viking') if chance == 2: dude3 = Wizzard (name = 'Red Wizzard') if chance == 3: dude3 = Assasin (name = 'Red Assasin') red_team.append (dude3.name) И вот этот вот ужас только для одной команды из трех участников! А если бы их было 20? Собственно вопрос: как это вот это все упростить? Чтобы не писать 100 000 сторк кода. П.С. Если предлагаете вариант решения пожалуйста объясните мне как ваш вариант будет работать. Классы: тут на самом деле та еще белеберда... class Viking: def __init__(self, name): self.name = name self.hp = 100 self.energy = 100 self.damage = 30 self.block = 15 self.role = 'tank' class Assasin: def __init__(self, name): self.name = name self.hp = 100 self.energy = 100 self.damage = 30 self.block = 15 self.role = 'ass' class Wizzard: def __init__(self, name): self.name = name self.hp = 100 self.energy = 100 self.damage = 30 self.block = 15 self.role = 'tank'
Ответы
Ответ 1
Функция random.choices(population, weights=None, *, cum_weights=None, k=1) возвращает список из k случайно выбранных элементов из population. Пример: from random import choices def build_team(N, color): dudes = [Viking(name=f'{color} Viking'), Wizzard(name=f'{color} Wizzard'), Assasin(name=f'{color} Assasin')] return choices(dudes, k=N) red_team = build_team(3, 'Red') blue_team = build_team(3, 'Blue') UPDATE: чтобы при выводе объекта класса на печать получить имя (self.name) - определите метод __repr__() для всех ваших классов: class Viking: def __init__(self, name): self.name = name self.hp = 100 self.energy = 100 self.damage = 30 self.block = 15 self.role = 'tank' def __repr__(self): return self.name v = Viking(name='Red Viking') print(v) # Red Viking
Комментариев нет:
Отправить комментарий