가변 확률의 생성기를 사용하십시오. 두 목록으로 과일과 고기를 섞은 것과 선택,하지만 당신은에서 선택하는 빈도의 확률을 조정하거나 지금까지 제작 된 내용을 기반으로 :
import random
def food_mix():
fruits = ['apple', 'banana', 'grape'] * 30
meats = ['beef', 'pork'] * 5
random.shuffle(fruits)
random.shuffle(meats)
meat_prob = 0
fruit_count = 0
first_meat = False
while fruits or meats:
if not meats or not fruits:
# yield remainders
yield meats.pop() if meats else fruits.pop()
continue
if random.random() < meat_prob:
yield meats.pop()
first_meat = True
meat_prob = fruit_count = 0
else:
yield fruits.pop()
fruit_count += 1
if (first_meat and fruit_count > 3) or fruit_count > 5:
# allow meat again
if first_meat:
meat_prob = 1.0/10.0 # one in 10 chance of meat
else:
meat_prob = 100.0/(95.0 - fruit_count) # scale based on amount of fruit
을이 항상 과일과 고기 같은 수의 생산 그러나 귀하의 제약 조건에 따라 무작위 순서로 배열하십시오 :
>>> len(list(food_mix()))
100
>>> list(food_mix()).count('beef')
5
>>> list(food_mix()).count('pork')
5
>>> list(food_mix()).count('apple')
30
>>> list(food_mix()).count('banana')
30
>>> list(food_mix()).count('grape')
30
>>> list(food_mix())
['grape', 'banana', 'banana', 'banana', 'apple', 'apple', 'beef', 'banana', 'banana', 'banana', 'grape', 'grape', 'apple', 'apple', 'apple', 'banana', 'grape', 'apple', 'grape', 'grape', 'grape', 'banana', 'grape', 'banana', 'grape', 'banana', 'grape', 'banana', 'beef', 'apple', 'apple', 'apple', 'banana', 'apple', 'banana', 'apple', 'banana', 'apple', 'grape', 'beef', 'apple', 'apple', 'apple', 'banana', 'grape', 'pork', 'banana', 'grape', 'grape', 'apple', 'grape', 'grape', 'apple', 'apple', 'grape', 'apple', 'grape', 'grape', 'banana', 'grape', 'apple', 'grape', 'banana', 'apple', 'banana', 'grape', 'banana', 'grape', 'apple', 'apple', 'banana', 'banana', 'banana', 'grape', 'pork', 'grape', 'apple', 'banana', 'banana', 'grape', 'banana', 'grape', 'grape', 'apple', 'banana', 'pork', 'apple', 'apple', 'grape', 'apple', 'banana', 'banana', 'banana', 'apple', 'beef', 'apple', 'grape', 'pork', 'pork', 'beef']
고기는 위쪽으로 생성 된 변경 사항을 조정할 수 있습니다. 현재의 확률은 그 끝에있는 고기를 모으는 경향이 있습니다.
fruits
목록의 크기와 함께 표시되는 확률을 조정하여 과일이 부족할 때 육류 제품이 생산 될 확률을 높일 수 있습니다.
스택 오버플로에 오신 것을 환영합니다! 우리가 당신을 위해 몇 가지 코드를 작성하기를 원하는 것처럼 보입니다. 대부분의 사용자는 곤경에 처한 코더 코드를 기꺼이 만들지 만 일반적으로 포스터가 이미 문제를 해결하려고 시도했을 때만 도움이됩니다. 이러한 노력을 입증하는 좋은 방법은 지금까지 작성한 코드, 예제 입력 (있는 경우), 예상 출력 및 실제로 얻은 출력 (콘솔 출력, 스택 추적, 컴파일러 오류 등)을 포함시키는 것입니다. 응용할 수 있는). 더 자세하게 제공할수록 더 많은 답변을받을 수 있습니다. –
저는 카운터를 유지하고 아이템이 생성 될 때 확률을 조정하는 발전기 방식을 사용합니다. 따라서 적어도 5 가지 과일 아이템이 생산 될 때까지 육류 아이템 확률은 0이며, 그 후에 확률을 높일 수 있습니다. 육류 제품을 생산할 때마다 또 다른 3 개의 과일 등을 생산할 때까지 확률은 다시 0으로 떨어집니다. –
"과일 품목 (바나나, 사과, 포도)을 5 ~ 10 회 제공 한 후"를 명확히 할 수 있습니까? – Joel