Вы можете использовать random.choices
из стандартной библиотеки.
import random
values = ['EV', 'PHEV']
for _ in range(10):
result = random.choices(values, weights=(0.3, 0.7))
print(result[0], end=' ')
Пример вывода: PHEV EV PHEV PHEV PHEV PHEV PHEV PHEV EV EV
Дополнительная информация: вы не ограничивается только двумя вариантами, и вы можете получить несколько результатов.
import random
values = ['A', 'B', 'C']
for _ in range(10):
result = random.choices(values, weights=(1, 4, 10), k=2)
print(result)
Пример вывода:
['B', 'C']
['B', 'C']
['C', 'C']
['C', 'C']
['C', 'B']
['C', 'B']
['B', 'C']
['C', 'C']
['C', 'C']
['B', 'C']
Это возможная реализация, включая код из вопроса. Здесь я предполагаю, что типы pev и их вероятность фиксированы в коде, поэтому я сделал их атрибутом класса Vehicle
. При необходимости это можно изменить. Обратите внимание, что распределения являются относительными и не должны составлять в точности 1.0
.
import random
class Vehicle:
pev_types = {'EV': 0.3, 'PHEV': 0.7, 'X': 0.2}
def __init__(self):
self.pev_type = self._get_random_pev_type()
def __str__(self):
return f'Vehicle (pev type:{self.pev_type})'
def _get_random_pev_type(self):
return random.choices(list(self.pev_types), weights=self.pev_types.values())[0]
print(', '.join(str(Vehicle()) for _ in range(10)))
Пример вывода:
Vehicle (EV), Vehicle (EV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV)