2014-11-10 1 views
0

하나 개의 번호를 얻어 distribution_of_rolls라는 함수를 작성 롤과 아래의 형태로 그 롤의 값의 분포를 출력한다. 예를 들어
는 :찾을 주사위 분포

Distribution of dice rolls 

    2:  7 (3.5%) ******* 
    3: 14 (7.0%) ************** 
    4: 15 (7.5%) *************** 
    5: 19 (9.5%) ******************* 
    6: 24 (12.0%) ************************ 
    7: 35 (17.5%) *********************************** 
    8: 24 (12.0%) ************************ 
    9: 28 (14.0%) **************************** 
    10: 18 (9.0%) ****************** 
    11:  9 (4.5%) ********* 
    12:  7 (3.5%) ******* 
    ----------------------------- 
     200 rolls 

내 코드는 어딘가 잘못된 것입니다. 인쇄 할 수 없습니다.

def roll(): 
     return randrange(1,7) + randrange(1,7) 

def distribution_of_rolls(n:int): 
     result=({i,0} for i in range(2,13,1)) 
     c='' 
     result=list(result) 
     for i in range(n): 
       a = roll() 
       print(a) 
       result[a]= result[a] + 1 
       print(result) 
     for i in range(2,13,1): 
      b=(result[i]/float(n)) * 100 
     for i in range(int(math.floor(n))): 
      c = c + '*' 
      d = "{0:0.1f}%".format(b) 
     print("{0:2d}: {1:5d} ({2:s}) {3:s}".format(i, result[i], d, c) 
     print("-------------------------") 
     print("{0:10d} rolls".format(n)) 


    distribution_of_rolls(20) 
+4

당신은 아마'결과 = 싶어요. 지금, 결과는 당신의 (공개되지 않은) 문제의 원인 일 가능성이있는 발전기입니다. 그것보다 더 원한다면, 실제로 잘못되어 가고있는 것을 우리에게 말해줘야합니다. –

답변

0

더 많은 기능을 사용하면 디버깅이 쉬워집니다. {(2, 13) 범위에서 내가 0 내가} ', 그렇지 않으면'딕셔너리 (...)`에서 현재 통화를 감싸는 예를 들면,

def roll(): 
    return random.randrange(1,7) + random.randrange(1,7) 

def create_data(nrolls): 
    data = collections.defaultdict(int) 
    for _ in range(nrolls): 
    data[roll()] += 1 
    return data 

fmtstart = "{dsum:>2}:{count:>6} ({pct:4.1f}%)" 

def format_data(data): 
    result = [] 
    total = float(sum(data.values())) 
    tuples = sorted(data.items()) 
    for k,v in tuples: 
    start = fmtstart.format(dsum=k,count=v,pct=100*v/total) 
    end = " " + "*"*v 
    result.append(start + end) 
    return "\n".join(result) 

print(format_data(create_data(200))) 
0
from random import randrange 

def roll(): 
     return randrange(1,7) + randrange(1,7) 

def distribution_of_rolls(n:int): 
    results = {i:0 for i in range(2,13)} 
    for i in range(n): 
     results[roll()] += 1 
    for i in range(2,13): 
     occurrences = results[i] 
     percentage = (occurrences/float(n)) * 100 
     bar = occurrences * "*" 
     print("{0:2d}: {1:5d} ({2:4.1f}%) {3:s}".format(i, occurrences, percentage, bar)) 
    print("-------------------------") 
    print("{0:9d} rolls".format(n)) 


distribution_of_rolls(200)