Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Как упростить условие

#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

Комментариев нет:

Отправить комментарий