2014-01-23 165 views
-1

我正在使用給定數量的骰子在python中編寫用於試驗次數的直方圖的代碼。我在堆棧溢出中找到了一個代碼,並根據我的要求對結果進行了修改。這是我修改後的代碼。更改骰子滾動程序的內置函數

import random 
from collections import defaultdict 

def main(dice,rolls): 
    result = roll(dice, rolls) 
    maxH = 0 
    for i in range(dice, dice * 6 + 1): 
     if result[i]/rolls > maxH: maxH = result[i]/rolls 
    for i in range(dice, dice * 6 + 1): 
     print('{:2d}{:10d}{:8.2%} {}'.format(i, result[i], result[i]/rolls, '#' * int(result[i]/rolls/maxH * 40))) 


def roll(dice,rolls): 
    d = defaultdict(int) 
    for _ in range(rolls): 
     d[sum(random.randint(1, 7) for _ in range(dice))] += 1 
    return d 

但是,我應該實現這一點,而不使用內置函數,如defaultdict,random.randint,.format。是否有可能取代他們,但仍然得到所需的輸出?我嘗試了幾種方法,但無法讓他們取代。

+0

爲什麼'range'和'print'允許?他們也只是內置功能 – thefourtheye

+2

您真的需要用自己編寫的代碼生成隨機數嗎?這是完全不重要的。 – geoffspear

+0

剛剛不到一小時[問不到這個問題](http://stackoverflow.com/q/21312819/198633)?您收到的回覆中有哪些不足(我的是其中之一,如果您發表評論,我很樂意更新它)? – inspectorG4dget

回答

0

不要嘗試使用random而得到一個隨機數。在這個級別的任何作業任務期望的範圍之上,FAR超過了FAR,並且即使對於專業程序員來說也是一個不平凡的問題,從而產生一個好的PRNG。不過,我們可以切出defaultdictformat

import random 

def roll(dice,rolls): 
    d = {} 
    i = 0 
    while i < rolls: # to avoid the builtin range() 
     result = sum((random.randint(1, 6) for _ in range(dice))) 
     # or if you want to avoid the builtins sum() and range() 
     # result = 0 
     # dicerolled = 0 
     # while dicerolled < dice: 
     #  result += random.randint(1,6) 
     #  dicerolled += 1 
     try: d[result] += 1 
     except KeyError: d[result] = 1 
     i += 1 
    return d 

def main(dice,rolls): 
    results = roll(dice,rolls) 
    MAXH = 60 # what's your hist scale 
    maxH = max(results.values()) 
    # or if you want to avoid the builtin max() as well 
    # for count in result.values(): 
    #  if count/rolls > maxH: maxH = count 
    SCALE = MAXH/maxH #this is your scale 
    for theroll,count in sorted(results.items()): 
     if len(str(theroll)) < 2: print(" ",end='') 
     print(str(theroll) + " : " + "H"*int(count*SCALE)) 

我們結束了一個程序,可以避開所有內建但random模塊,str()int()(這兩者都是技術上構造反正)。最大的問題是:爲什麼!?!?!?!

Python是使用和利用庫的MADE,而stdlib是包含電池的原因!使用你的內容,使用你的進口,或用不同的語言編碼。