无法按预期增加整数

时间:2019-07-12 09:56:29

标签: python if-statement montecarlo

我正在关注有关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%。视频教程的代码不正确吗?

1 个答案:

答案 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