我正在尝试编写一个程序,该程序获取方向和大小的列表,并输出机器人从其起始位置的距离。
执行以下代码时出错,但我……
这是我的offtopic反应(你的问题是混合标签和空格,我的答案是简单的重写)。
import math xymoves = {"+X": (1, 0), "-X": (-1, 0), "+Y": (0, 1), "-Y": (0, -1)} position = [0, 0] directions = ['+Y', '-X', '-Y', '+X', '-X', '-Y', '+X'] assert all(xymove in xymoves for xymove in directions) magnitudes = [9, 7, 4, 8, 3, 6, 2] for direction, magnitude in zip(directions, magnitudes): xmove, ymove = xymoves[direction] position[0] += magnitude * xmove position[1] += magnitude * ymove print math.sqrt(position[1]**2+position[0]**2)
变化:
for
while
if elif elif
xymoves
math.sqrt
float
注意,带有xymoves的字典可以用其他方向扩展,例如北方使用“N”,东北部使用“NE”等
很可能你混淆了你的空格和标签。在这种情况下,可能更容易将符号放在幅度和过滤器中 x 和 y 像这样:
x
y
In [15]: mDr = [ (int(d[0]+m), d[1]) for (d, m) in zip(direction, map(str, magnitude))] In [16]: mDr Out[16]: [(9, 'Y'), (-7, 'X'), (-4, 'Y'), (8, 'X'), (-3, 'X'), (-6, 'Y'), (2, 'X')]
在这种情况下,您可以非常轻松地获得总x和y距离。例如,y距离:
In [17]: [md[0] for md in mDr if md[1] =='Y'] Out[17]: [9, -4, -6]
而且总数 y 特定方向的距离:
In [18]: sum( [md[0] for md in mDr if md[1] =='Y'] ) Out[18]: -1
你也可以这样做 x 然后计算那条路的距离。