我正在关注有关python(https://www.youtube.com/watch?v=BfS2H1y6tzQ)的蒙特卡洛问题的youtube简短视频教程,该代码无法正常工作。目的是考虑如果距离大于4,则考虑乘搭交通工具,我将需要乘搭交通工具多少次才能回家。
所以我认为问题是每次调用random_walk时,x,y变量都会重置为零,因此距离永远不会始终在0-1范围内,并且不会按预期递增。
import random
def random_walk(n):
x, y = 0, 0
for i in range(n):
(dx, dy) = random.choice([(0, 1), (0, -1), (1, 0), (-1, 0)])
x += dx
y += dy
return (x, y)
number_of_walks = 10000
no_transport = 0
for walk_length in range(1, 31):
for i in range(number_of_walks):
(x, y) = random_walk(walk_length)
distance = abs(x) + abs(y)
if distance <= 4:
no_transport += 1
transported_percentage = float(no_transport) / number_of_walks
print("Walk Size = ", walk_length, " / % transported = ", 100 * transported_percentage)
我希望结果显示出我在运输的%
期间必须带回家的时间,相反,我得到的数字不正确,例如100, 200, 300%
。视频教程的代码不正确吗?
答案 0 :(得分:0)
您需要在主循环中重置no_transport,因为它在所有测试中都是累积的,而不是每个步长。
for walk_length in range(1, 31):
no_transport = 0
另外,百分比是计算no_transport步行的次数,而不是运输步行的百分比:这是运输的百分比。
transported_percentage = (number_of_walks - float(no_transport)) / number_of_walks