Python中的随机包装代码问题

时间:2019-01-23 12:16:07

标签: python python-3.x random

我有以下简单的“随机游走”代码:

import random

def random_walk(n):
    """Return coordinates after 'n' block random walk."""
    x = 0
    y = 0
    for i in range(n):
        step = random.choice(['N', 'S', 'E', 'W'])
        if step == 'N':
            y = y + 1
        elif step == 'S':
            y == y - 1
        elif step == 'W':
            x = x + 1
        else:
            x = x - 1
        return (x,y)

for i in range(25):
    walk = random_walk(10)
    print(walk, "Distance from home = ", abs(walk[0]) + abs(walk[1]))

我有两个问题

(A)当我在Visual Studio Code中运行它时,它告诉我变量i为     未使用。它带有“下划线”,给我以下错误:

[pylint] Unused variable 'i' [W0612] (10,6)
[pylint] Unused variable 'i' [W0101] (22,3)

请注意,Sublime和Jupyter可以毫无问题地运行它。

(B)由于某种原因,我在x轴上移动的步幅不能超过一个     方向和一个y方向。结果是我离家的距离     始终为0,1或但是上面的代码清楚地表明我们     对于n个块而不是         仅0、1或2个块。

(0, 1) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(0, 1) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(0, 0) Distance from home = 0
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(0, 0) Distance from home = 0
(1, 0) Distance from home = 1
(1, 0) Distance from home = 1
(0, 0) Distance from home = 0
(0, 1) Distance from home = 1
(1, 0) Distance from home = 1
(0, 0) Distance from home = 0
(1, 0) Distance from home = 1
(0, 0) Distance from home = 0
(0, 0) Distance from home = 0

出什么问题了?

1 个答案:

答案 0 :(得分:1)

“未使用的变量”消息不是错误,而是警告。这说明您是真的:您在for语句的开头设置了i,但没有在任何地方使用i的值。如果不需要i的值,则可以忽略该警告。默认情况下,Jupyter显然不认为警告您未使用它足够重要(或者它指示您错过了警告)。他们可能有一个选项,您可以将其设置为获取此类警告。

由于您没有使用i,因此可以使用_来避免警告(_代替了您未使用的变量名):

for _ in range(n):

而且,在您的主程序中:

for _ in range(25):

您有错字:y == y - 1应该是y = y - 1

由于缩进,return (x,y)位于for循环中。因此,您的函数每次都在第一次迭代后返回。您需要在for循环完成后使用它。伸出它。 Python使用缩进来确定块结构。

for i in range(n):
    ...

    else:
        x = x - 1

return (x,y)