import?matplotlib.pyplot?as?plt
from?random_walk?import?RandomWalk
#?只要程序處于活動(dòng)狀態(tài),就不斷模擬隨機(jī)漫步
while?True:
????#?創(chuàng)建一個(gè)RandomWalk實(shí)例
????rw?=?RandomWalk(50_000)
????rw.fill_walk()
????#?將所有的點(diǎn)都繪制出來
????plt.style.use('classic')
????fig,?ax?=?plt.subplots(figsize=(15,?9))??#?調(diào)整尺寸
????point_numbers?=?range(rw.num_points)
????ax.scatter(rw.x_values,?rw.y_values,?c=point_numbers,
???????????????cmap=plt.cm.Blues,?edgecolor='none',?s=1)??#?edgecolor刪除點(diǎn)周圍輪廓
????#?突出起點(diǎn)和終點(diǎn)
????ax.scatter(0,?0,?c='green',?edgecolors='none',?s=100)
????ax.scatter(rw.x_values[-1],?rw.y_values[-1],?c='red',?edgecolors='none',
???????????????s=100)
????#?隱藏坐標(biāo)軸
????ax.get_xaxis().set_visible(False)
????ax.get_yaxis().set_visible(False)
????plt.show()
????keep_running?=?input("Make?another?walk?(y/n):")
????if?keep_running?==?'n':
????????break
from?random?import?choice
class?RandomWalk():
????def?__init__(self,?num_points=5000):
????????#?初始化隨機(jī)漫步的屬性
????????self.num_points?=?num_points
????????#?所有隨機(jī)漫步都始于(0,0)
????????self.x_values?=?[0]
????????self.y_values?=?[0]
????def?fill_walk(self):
????????#?計(jì)算隨機(jī)漫步包含的所有點(diǎn)
????????#?不斷漫步踢步,直到列表到達(dá)指定的長度
????????while?len(self.x_values)?<?self.num_points:
????????????#?決定前進(jìn)方向以及沿這個(gè)方向前進(jìn)的距離
????????????x_direction?=?choice([1,?-1])??#?右1?左-1
????????????x_distance?=?choice([0,?1,?2,?3,?4])
????????????x_step?=?x_direction?*?x_distance
????????????y_direction?=?choice([1,?-1])
????????????y_distance?=?choice([0,?1,?2,?3,?4])
????????????y_step?=?y_direction?*?y_distance
????????????#?拒絕原地踏步
????????????if?x_step?==?0?and?y_step?==?0:
????????????????continue
????????????#?計(jì)算下一個(gè)點(diǎn)的x值和y值
????????????x?=?self.x_values[-1]?+?x_step??#?最后一個(gè)值相加
????????????y?=?self.y_values[-1]?+?y_step
????????????self.x_values.append(x)??#?附加到末尾
????????????self.y_values.append(y)