#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
Комментариев нет:
Отправить комментарий