1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 投掷骰子的python代码_模拟骰子(Python) 掷骰子

投掷骰子的python代码_模拟骰子(Python) 掷骰子

时间:2021-11-18 01:52:53

相关推荐

投掷骰子的python代码_模拟骰子(Python) 掷骰子

模拟掷骰子实际是抽取(1~6之间的)随机数问题,涉及random模块,后面版本的数据可视化主要应用matplotlib.pyplot模块。

1.0:模拟一个骰子的结果。首先定义roll_dice()函数,从1~6之间随机抽取一个整数作为掷骰子的结果。在主函数中定义一个长度为6的列表(初始值为0),记录每个点出现的次数。每次掷完骰子都进行判断,掷出的点数在对应的列表位置上的元素加1。enumerate()函数将列表索引与对应的元素一一对应起来。

"""

模拟掷骰子

1.0:输出结果为掷骰子的频数与频率

"""

import random

def roll_dice():

"""

模拟掷骰子

:return: 返回一个1-6之间的随机数

"""

roll = random.randint(1,6)

return roll

def main():

Times = 10000

result_list = [0] * 6

for i in range(Times):

roll = roll_dice()

for j in range(1,7):

if roll == j:

result_list[j-1] += 1

for k,result in enumerate(result_list):

print ("掷得数字{},次数为{},频率为{}".format(k+1,result,result/Times))

if __name__=="__main__":

main()

2.0:模拟掷两个骰子的结果。与1.0不同的是,2.0定义两个列表,一个记录点数,一个记录点数出现的次数。zip()函数对两个列表进行组合,以元组的形式输出,dict(zip())函数将两个列表的元素以字典的形式输出。

"""

模拟掷骰子

2.0:模拟掷两个骰子的结果

"""

import random

def roll_dice():

"""

模拟掷骰子

:return: 返回一个1-6之间的随机数

"""

roll = random.randint(1,6)

return roll

def main():

Times = 1000

result_list = [0] * 11

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list,result_list))

for i in range(Times):

roll1 = roll_dice()

roll2 = roll_dice()

for j in range(2,13):

if roll1 + roll2 == j:

roll_dict[j] += 1

for k,result in roll_dict.items():

print ("掷得数字{},次数为{},频率为{}".format(k,result,result/Times))

if __name__=="__main__":

main()

3.0:将两个骰子的结果用散点图可视化,这里要用到matplotlib.python库。为了便于将两个骰子的结果分别可视化,定义连个列表,分别记录每个骰子的结果。plt.scatter()函数中的参数alpha表示透明度。

"""

模拟掷骰子

3.0:将掷两个骰子的结果可视化

"""

import random

import matplotlib.pyplot as plt

def roll_dice():

"""

模拟掷骰子

:return: 返回一个1-6之间的随机数

"""

roll = random.randint(1,6)

return roll

def main():

Times = 10

result_list = [0] * 11

roll_list = list(range(2,13))

roll_dict = dict(zip(roll_list,result_list))

roll1_result = []

roll2_result = []

for i in range(Times):

roll1 = roll_dice()

roll1_result.append(roll1)

roll2 = roll_dice()

roll2_result.append(roll2)

for j in range(2,13):

if roll1 + roll2 == j:

roll_dict[j] += 1

for k,result in roll_dict.items():

print ("掷得数字{},次数为{},频率为{}".format(k,result,result/Times))

#数据可视化

plt.scatter(range(Times),roll1_result,alpha=0.5,c="red")

plt.scatter(range(Times), roll2_result, alpha=0.5, c="green")

plt.show()

if __name__=="__main__":

main()

4.0:用直方图可视化掷骰子的结果。函数中的参数normed=1可将y轴显示为频率。

"""

模拟掷骰子

4.0:直方图可视化掷骰子结果

"""

import random

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]

plt.rcParams["axes.unicode_minus"] = False

def roll_dice():

"""

模拟掷骰子

:return: 返回一个1-6之间的随机数

"""

roll = random.randint(1,6)

return roll

def main():

Times = 1000

roll_list = []

for i in range(Times):

roll1 = roll_dice()

roll2 = roll_dice()

roll_list.append(roll1+roll2)

plt.hist(roll_list, bins=range(2,14), normed=1,edgecolor="black",linewidth=1)

plt.title ("掷骰子结果")

plt.xlabel("点数")

plt.ylabel("频率")

plt.show()

if __name__=="__main__":

main()

5.0:涉及科学计算numpy库。在numpy中的列表可直接相加。

"""

模拟掷骰子

4.0:科学计算

"""

import numpy as np

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]

plt.rcParams["axes.unicode_minus"] = False

def main():

Times = 1000

roll_list = []

roll1 = np.random.randint(1,7,size=Times)

roll2 = np.random.randint(1,7, size=Times)

roll_list = roll1 + roll2

plt.hist(roll_list, bins=range(2,14), normed=1,edgecolor="black",linewidth=1,rwidth=0.8)

plt.title ("掷骰子结果")

tick_labels = ["2点","3点","4点","5点","6点","7点","8点","9点","10点","11点","12点"]

tick_pos = np.arange(2,13)+0.5

plt.xticks(tick_pos, tick_labels)

plt.xlabel("点数")

plt.ylabel("频率")

plt.show()

if __name__=="__main__":

main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。