import matplotlib.pyplot as plt
from random_walk import RandomWalk
rw = RandomWalk()
rw.fill_walk()
fig,ax = plt.subplots()
ax.plot(rw.x_values,rw.y_values,linewidth=12)
plt.show()
模拟数据路线,比如花粉在水中的运动:
下面用重构的方法解决简化代码:
from random import choice
class RandomWalk:
def __init__(self, num_points=5000):
self.num_points = num_points
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
while len(self.x_values) < self.num_points:
x_step = self.get_step()
y_step = self.get_step()
if x_step == 0 and y_step == 0:
continue
x = self.x_values[-1] + x_step
y = self.y_values[-1] + y_step
self.x_values.append(x)
self.y_values.append(y)
def get_step(self):
direction = choice([1,-1])
distance = choice([0,1,2,3,4,5])
step = distance * direction
return step
相当于再用一个函数,可以缩小fill_walk(),注意返回值
效果:
下面处理模拟骰子的情况:
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)
from die import Die
die = Die()
results = []
for roll in range(100):
result = die.roll()
results.append(result)
print(results)
效果为:
下面分析结果:
注意编写时用到了count函数,而且是result.count(value),对result中的数据计算value的数量,
还有注意die.num_sides+1加上die,注意时调用类的格式
from die import Die
die = Die()
results = []
for roll 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(results,end='\n')
print(frequencies)
效果为: