python中的随机游动
我正在尝试用python实现一个随机漫游。这就是我得到的错误。我觉得我的实现是错误的,或者至少不是最好的。有人能看一下吗。请记住,我是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]
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*方向
。(由于您似乎在笛卡尔网格上移动,我也不认为您需要计算的方向。只需从适当的坐标中添加或减去步长即可。)