用Python来掷个色子

掷色子的问题总会出现在概率课本中,老师们都喜欢拿这个耳熟能详的事件来举例子,但今天我们不讲概率,我们来用Python模拟掷色子。

用random模块我们可以轻易地模拟输出点数(一般我们取的这个点数是色子顶上的点数),即随机生成一个1-6的数字。

random.randint(1,6)

的确非常容易,但如果我们想要知道色子的正面反面,左面右面的数值,又该如何计算呢?

本着求知探索精神, 我翻箱倒柜找到一枚祖传色子,来仔细观察一下。

用Python来掷个色子_第1张图片

我们可以发现,每个点数的对面点数相加都为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))

下面请欣赏我的灵魂画作之画色子~

用Python来掷个色子_第2张图片

你可能感兴趣的:(Python)