2011-10-13 2 views
0

Python 2.7에서 작업.반복에서 문자열이 생성되는 인스턴스의 수를 더하기

나는 무작위 걸음 걸이를 꾸미는 것에 착수하고있다. 하지만 우선 난 임의의 생성기에서 얻은 결과의 수를 합산하는 데 문제가 있습니다.

코드의 첫 번째 조각이 경우

def random_pick(some_list, probabilities): 
x = random.uniform(0,1) 
cumulative_probability = 0.0 
for item, item_probability in zip(some_list, probabilities): 
    cumulative_probability += item_probability 
    if x < cumulative_probability: break 
return item 

이리스트는 A = [ '아웃'히트 '] 및 각각의 확률은 B = 0.3, 0.7 주어진다 ]. 이 코드는 확률 .3의 'Hit'및 확률 .7의 'Out'을 반환합니다.

나는 그 때 그 확률에 따라 플레이어의 타율의 대략적인 시뮬레이션을 만들 수있는 코드를 가지고 :

def battingAverage(atBats, i, some_list=a, probabilities=b): 
for i in range(1,atBats): 
    if random_pick(a, b) == 'Hit': 
     hit = random_pick(a, b) 
     print '%.0f: %s' % (1, 'Hit') 
    elif random_pick(a, b) == 'Out': 
     out = random_pick(a, b) 
     print '%.0f: %s' % (2, 'Out') 

내가 이것을 실행하면, 내가가 선택한만큼 타석의 임의의 세대를 얻을 수 . 그러나 인스턴스의 수 또는 히트와 아웃 모두를 합산 할 수 있기를 원합니다.하지만 어떻게 계산할 수 없었습니다. random_pick을 변경하여 아이템 대신 확률을 반환하면 아래와 비슷한 코드를 사용하려고했지만 아무 소용이 없습니다.

def battingAverage(atBats, i, some_list=a, probabilities=b): 
num_hits = 0 
num_outs = 0 
for i in range(1,atBats): 
    if random_pick(a, b) == 'Hit': 
     hit = (random_pick(a, b))/.3 
     num_hits += hit 
    elif random_pick(a, b) == 'Out': 
     out = (random_pick(a, b))/7 
     num_outs += out 
print num_hits, num_outs 

모든 도움을 주시면 감사하겠습니다. 또한 몬테카를로 시뮬레이션을 배우기에 좋은 자료를 아는 사람이 있습니까?

답변

2
num_hits = 0 
num_outs = 0 
for i in range(1, atBats): 
    if random_pick(a,b) == 'Hit': 
     num_hits += 1 
    else: 
     num_outs += 1 
print num_hits, num_outs 
+0

아 ... 맞아. 도와 주셔서 감사합니다! –

2

(그것은 긴 하루이었다), 그러나 여기 포인터의 커플, 제가 코드의 논리를 따라 고군분투하고 정직하게하려면 : 당신이 좋아하는 일을 할 때)

1 :

if random_pick(a, b) == 'Hit': 
    ... 
elif random_pick(a, b) == 'Out': 
    ... 

당신은 두 번 random_pick()를 호출하고, 그래서 당신은 하나가 아닌 독립적 인 시뮬레이션을 수행하고 있습니다. 결과적으로 두 가지 중 어느 것도 실행되지 않을 수 있습니다. 문제를 해결하려면 random_pick() 번 호출하고 결과를 저장 한 다음 해당 결과로 분기하십시오.

2) 다른 문제에 관해서는, 파이썬에서는 함수에서 여러 값을 반환 할 수 있습니다. 이 여기에 유용 할 수 있습니다 :

item, prob = random_pick(a, b) 

item 또는 prob (또는 둘 다) 사용

def random_pick(some_list, probabilities): 
    ... decide on the item and probability ... 
    return item, probability 

당신은 다음과 같이 호출 할 수 있습니다.

+0

알겠습니다 ... 응답 해 주셔서 감사합니다. –

관련 문제