Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的随机游动_Python_Random - Fatal编程技术网

python中的随机游动

python中的随机游动,python,random,Python,Random,我正在尝试用python实现一个随机漫游。这就是我得到的错误。我觉得我的实现是错误的,或者至少不是最好的。有人能看一下吗。请记住,我是python的初学者,我认为有人会这样编写代码,所以我可以完全离开 in randomWalk(stepSize, stepNumber) 37 for _ in range(stepNumber): 38 r = randint(1,4) ---> 39 x,y = movement[r]

我正在尝试用python实现一个随机漫游。这就是我得到的错误。我觉得我的实现是错误的,或者至少不是最好的。有人能看一下吗。请记住,我是python的初学者,我认为有人会这样编写代码,所以我可以完全离开

in randomWalk(stepSize, stepNumber)
     37     for _ in range(stepNumber):
     38         r = randint(1,4)
---> 39         x,y = movement[r]
     40         xList.append(x)
     41         yList.append(y)
TypeError: 'function' object is not iterable
这是我的密码

from pylab import *
import numpy as np
import matplotlib.pyplot as plt
import random as rnd
matplotlib.rcParams.update({'font.size': 20})

x = 0.
y = 0.
xList = []
yList = []
def goRight(stepSize, y):
    direction = np.cos(0)
    x = stepSize*direction
    return [x,y]

def goUp(stepSize, x):
    direction = np.cos(90)
    y = stepSize*direction
    return [x,y]

def goLeft(stepSize, y):
    direction = np.cos(180)
    x = stepSize*direction
    return [x,y]

def goDown(stepSize, x):
    direction = np.cos(270)
    y = stepSize*direction
    return [x,y]

def randomWalk(stepSize, stepNumber):
    movement = {1: goRight, 
                2: goUp, 
                3: goLeft, 
                4: goDown}

    for _ in range(stepNumber):
        r = randint(1,4)
        x,y = movement[r]
        xList.append(x)
        yList.append(y)


    plt.ioff()
    plot(x, y)
    plt.show()


randomWalk(1.,4)

不能在函数字典中调用这样的函数,请使用以下函数:

functionToCall = movement[r] # look up for function in dictionary
x,y = functionToCall(stepsize , x, y) # then call function with desired parameters

不能在函数字典中调用这样的函数,请使用以下函数:

functionToCall = movement[r] # look up for function in dictionary
x,y = functionToCall(stepsize , x, y) # then call function with desired parameters

问题出在线路上

x,y = movement[r]
dictionary movement是调用movement[r]时函数的int列表,只返回一个函数,但这里您尝试将其解包。相反,我认为你想要:

 x,y = movement[r](stepSize)
这将调用函数并返回所需的坐标。
此外,您还需要更改所有步骤方法,使其仅接受一个参数…

问题在于该行

x,y = movement[r]
dictionary movement是调用movement[r]时函数的int列表,只返回一个函数,但这里您尝试将其解包。相反,我认为你想要:

 x,y = movement[r](stepSize)
这将调用函数并返回所需的坐标。
此外,您还需要更改所有step方法,使其仅采用一个参数…

您正在将函数放入dict
移动中<代码>移动[r]
没有调用函数,只是访问它们。您生产线的基本工作是:

x, y = goDown
如果要在该行中调用函数,必须添加括号和参数,如:

x, y = movement[r](stepSize, x)
这表明您的设计存在问题,因为有些函数期望
x
,有些函数期望
y
。你可以通过让所有函数都取坐标,x和y来解决这个问题,然后你的直线应该是这样的

x, y = movement[r](stepSize, x, y)

您正在将函数放入dict
移动中<代码>移动[r]
没有调用函数,只是访问它们。您生产线的基本工作是:

x, y = goDown
如果要在该行中调用函数,必须添加括号和参数,如:

x, y = movement[r](stepSize, x)
这表明您的设计存在问题,因为有些函数期望
x
,有些函数期望
y
。你可以通过让所有函数都取坐标,x和y来解决这个问题,然后你的直线应该是这样的

x, y = movement[r](stepSize, x, y)

@利怀特:我不知道。那应该去哪里?@das-g。你完全正确。很抱歉您可能希望更改后的坐标仍取决于其先前的值,例如
x=x+stepSize
而不是
x=stepSize*方向
。(因为你似乎是在笛卡尔网格上移动,我也不认为你需要计算的方向。只要在适当的坐标中加上或减去步长即可。)@leeweight我不需要。那应该去哪里?@das-g。你完全正确。很抱歉您可能希望更改后的坐标仍取决于其先前的值,例如
x=x+stepSize
而不是
x=stepSize*方向
。(由于您似乎在笛卡尔网格上移动,我也不认为您需要计算的方向。只需从适当的坐标中添加或减去步长即可。)