Цикл набора операторов if / else, пока переменная списка не имеет трех уникальных значений в Python 3

1

Попытка повторить этот раздел кода python, пока он не получит три разных результата. Это не настоящий код, просто упрощенная версия, которая делает то же самое.

roll = random.randint(1,100)
if roll < 10:
    name += "alpha"
elif roll < 37:
    name += "bravo"
elif roll < 50:
    name += "charlie"
elif roll < 89:
    name += "delta"
else:
    name += "echo"
print(name)

В принципе, я хочу, чтобы этот сегмент кода непрерывно повторялся до тех пор, пока [name] не имеет трех разных значений, а затем я хочу, чтобы на выходе выводились все три значения, каждый из которых был на новой строке. Я не уверен, что лучший способ сделать это. Спасибо за любую помощь.

edit: в моем фактическом коде диапазоны для каждого номера распределены неравномерно. Я отредактировал это, чтобы отразить это. Так как вероятность получения каждого из пяти возможных результатов различна, random.sample не будет работать (если только он не может быть отформатирован для разных коэффициентов по каждому результату)

Теги:
loops
random

4 ответа

2

В этом примере я бы сделал следующее:

import random
name = ["alpha", "bravo", "charlie", "delta", "echo"]
name = "\n".join(random.sample(name, 3))
1

Если вам нужны уникальные значения, возможно, тип set - это то, что вам нужно.

name = set()
while len(name)<3:
    roll = random.randint(1,100)
    if roll < 10: name.add("alpha")
    elif roll < 37: name.add("bravo")
    elif roll < 50: name.add("charlie")
    elif roll < 89: name.add("delta")
    else: name.add("echo")
for n in name: print n
1

Составьте список, а затем запустите цикл, пока в нем не будет трех уникальных элементов.

values = []
while len(values) != 3:
   index = random.randrange(100)
   value = determine_value_for_index(index)
   if value not in values:
        values.append(value)
0

Что случилось с random.sample?

names = ["alpha", "bravo", "charlie", "delta", "echo"]

random.sample(names, 3) # ['delta', 'echo', 'bravo']
random.sample(names, 3) # ['echo', 'charlie', 'delta']
random.sample(names, 3) # ['bravo', 'charlie', 'delta']

EDIT:

name = ''.join(random.sample(names, 3)) # 'deltabravocharlie'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню