社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python来掷个色子~

程序员大咖 • 4 年前 • 354 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


作者丨老肥

来源丨老肥码码码


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


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

random.randint(1,6)

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

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

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


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


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111212
 
354 次点击