用Python來擲個色子

擲色子的問題總會出現在概率課本中,老師們都喜歡拿這個耳熟能詳的事件來舉例子,但今天我們不講概率,我們來用Python模擬擲色子。

用random模塊我們可以輕易地模擬輸出點數(一般我們取的這個點數是色子頂上的點數),即隨機生成一個1-6的數字。

random.randint(1,6)

的確非常容易,但如果我們想要知道色子的正面反面,左面右面的數值,又該如何計算呢?

本着求知探索精神, 我翻箱倒櫃找到一枚祖傳色子,來仔細觀察一下。

file

我們可以發現,每個點數的對面點數相加都爲7,即1的對面點數爲6,剩下的2,3,4,5也對稱的分佈在1的四側(2,5相對,3,4相對)。但是其四面的順序,從不同的角度觀測其排列順序方式也是不同的,還是以頂上點數1爲例,從點數2開始按照順時針我們可以看到2,4,5,3,從點數4開始按照順時針我們可以看到4,5,3,2,而這些序列構成一個環狀。而這些環狀數組,我們可以直接用列表來表示,1-6點的順時針側面點數列表如下所示

[2,4,5,3]
[1,3,6,4]
[1,5,6,2]
[1,2,6,5]
[1,4,6,3]
[2,3,5,4]

因此,想要描述一個色子的每一面就有了思路,首先隨機生成一個數字,直接當作頂部的數字;接着隨機生成一個狀態,表示從其對應數組的某一位開始,也可以直觀地理解爲從不同角度看過去;最後輸出不同位置的點數,用手繪立方體的方式打印出色子。

rand_number=random.randint(0,5)
rand_state=random.randint(0,3)

def throw():
    print("         __ __ __ \n");
    print("      /    %d      / |\n"%(rand_number+1))
    print("      __ __ __      |\n")
    print("    |          | %d  |\n"%dice[rand_number][(rand_state+1)%4])
    print("  %d |     %d    |    /\n"%(dice[rand_number][(rand_state+3)%4],dice[rand_number][(rand_state+2)%4]))
    print("      __ __ __    /\n")
    print("           %d\n"%(6-rand_number))

下面請欣賞我的靈魂畫作之畫色子~

file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章