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

Попытка заставить этот раздел кода 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)

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

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

Ответы [ 4 ]

2 голосов
/ 23 мая 2011

Для этого примера я бы сделал это:

import random
name = ["alpha", "bravo", "charlie", "delta", "echo"]
name = "\n".join(random.sample(name, 3))
1 голос
/ 23 мая 2011

Если вам нужны уникальные значения, возможно, вам нужен тип 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 голос
/ 23 мая 2011

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

values = []
while len(values) != 3:
   index = random.randrange(100)
   value = determine_value_for_index(index)
   if value not in values:
        values.append(value)
0 голосов
/ 23 мая 2011

Что не так с 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']

РЕДАКТИРОВАТЬ:

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