from random import randint
class Die ( ) :
def __init__ ( self, num_sides = 6 ) :
self. num_sides = num_sides
def roll ( self) :
return randint( 1 , self. num_sides)
die = Die( )
results = [ ]
for i in range ( 100 ) :
result = die. roll( )
results. append( result)
print ( results)
[1, 2, 5, 5, 5, 5, 6, 5, 1, 2, 4, 2, 4, 2, 2, 1, 1, 1, 6, 2, 1, 4, 6, 3, 2, 6, 4, 1, 6, 4, 2, 3, 1, 6, 5, 1, 5, 1, 2, 2, 6, 4, 2, 4, 3, 6, 2, 1, 4, 3, 5, 5, 4, 3, 4, 4, 4, 2, 3, 4, 1, 2, 6, 2, 2, 5, 3, 5, 1, 3, 6, 1, 2, 5, 5, 2, 5, 3, 1, 2, 5, 1, 1, 1, 6, 1, 6, 1, 1, 1, 5, 6, 6, 4, 1, 1, 1, 4, 2, 1]
results = [ ]
for i in range ( 1000 ) :
result = die. roll( )
results. append( result)
frequencies = [ ]
for value in range ( 1 , die. num_sides + 1 ) :
frequency = results. count( value)
frequencies. append( frequency)
print ( frequencies)
[169, 163, 142, 170, 167, 189]
上面代码统计骰子的6个面分别出现的次数 results.count(value)
:可以统计列表中的值value的出现次数,非常方便下面对统计结果可视化
import pygal
hist = pygal. Bar( )
hist. title = "Results of rolling one D6 1000 times."
hist. x_labels = [ '1' , '2' , '3' , '4' , '5' , '6' ]
hist. x_title = "Result"
hist. y_title = "Frequency of Result"
hist. add( 'D6' , frequencies)
hist. render_to_file( 'die_visual.svg' )
hist = pygal.Bar()
实例创建一个条形图,接下来设置条形图的各项属性。hist.add('D6', frequencies)
将一系列值添加到图表中。第一个实参给出添加值的标签,第二个实参给出一个列表,其中包含将出现在图表中的值。最后将图表渲染为一个svg文件 pygal让图表具有交互性,当鼠标移动到图表中的条形时将看到与之关联的数据。
die1 = Die( )
die2 = Die( )
results = [ ]
for i in range ( 1000 ) :
result = die1. roll( ) + die2. roll( )
results. append( result)
frequencies = [ ]
max_result = die1. num_sides + die2. num_sides
for value in range ( 2 , max_result + 1 ) :
frequency = results. count( value)
frequencies. append( frequency)
hist = pygal. Bar( )
hist. title = "Result of rolling two D6 dice 1000 times."
hist. x_labels = [ '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' , '11' , '12' ]
hist. x_title = "Result"
hist. y_title = "Frequency of Result"
hist. add( "D6 + D6" , frequencies)
hist. render_to_file( 'dice_visual.svg' )
上面是同时掷两个D6骰子 下面是同时掷一个D6和一个D10骰子的全代码
from random import randint
import pygal
class Die ( ) :
def __init__ ( self, num_sides = 6 ) :
self. num_sides = num_sides
def roll ( self) :
return randint( 1 , self. num_sides)
die1 = Die( )
die2 = Die( 10 )
results = [ ]
for i in range ( 50000 ) :
result = die1. roll( ) + die2. roll( )
results. append( result)
max_nums = die1. num_sides + die2. num_sides
frequencies = [ ]
for value in range ( 2 , max_nums + 1 ) :
frequency = results. count( value)
frequencies. append( frequency)
hist = pygal. Bar( )
hist. title = "Result of rolling a D6 and a D10 dice 50000 times."
hist. x_labels = list ( i for i in range ( 2 , 17 ) )
hist. x_title = "Result"
hist. y_title = "Frequency of Result"
hist. add( "D6 + D10" , frequencies)
hist. render_to_file( 'D6&D10dice_visual.svg' )