0
class InterpolatedArray(object):

  """An array-like object that provides
  interpolated values between set points."""

  def __init__(self, points):
    self.points = sorted(points)

  def __getitem__(self, x):
    if x > self.points[-1][0]:
      return self.points[-1][1] + (x - self.points[-1][0]) * float((self.points[-1][1] - self.points[-2][1]) / (self.points[-1][0] - self.points[-2][0]))
    elif x < self.points[0][0]: 
      return self.points[0][1] + (x - self.points[0][0]) * float(self.points[1][1] - self.points[0][1] / (self.points[1][0] - self.points[0][0])
    else:
      lower_point, upper_point = self._GetBoundingPoints(x)
      return self._Interpolate(x, lower_point, upper_point)

  def _GetBoundingPoints(self, x):
    """Get the lower/upper points that bound x."""
    lower_point = None
    upper_point = self.points[0]
    for point  in self.points[1:]:
      lower_point = upper_point
      upper_point = point
      if x <= upper_point[0]:
        break
    return lower_point, upper_point

  def _Interpolate(self, x, lower_point, upper_point):
    """Interpolate a Y value for x given lower & upper
    bounding points."""
    slope = (float(upper_point[1] - lower_point[1]) /
             (upper_point[0] - lower_point[0]))
    return lower_point[1] + (slope * (x - lower_point[0]))

it just complain "invalid syntax" in the line: else:

4

2 回答 2

2

你错过了一个右括号:

return self.points[0][1] + (x - self.points[0][0]) * float(self.points[1][1] - self.points[0][1] / (self.points[1][0] - self.points[0][0])

看起来你的意思是有一个)after self.points[0][1]

于 2013-10-31T17:39:10.323 回答
0

您需要在此行上加上右括号(在 之前的那个else):

return self.points[0][1] + (x - self.points[0][0]) * float(self.points[1][1] - self.points[0][1] / (self.points[1][0] - self.points[0][0])

你有 3 个左括号,但只有两个右括号。

我不能告诉你放置它的确切位置,因为这取决于你想做什么。但是,它很可能是:

return self.points[0][1] + (x - self.points[0][0]) * float(self.points[1][1] - self.points[0][1] / (self.points[1][0] - self.points[0][0]))
#                                                                                                                                   here--^

或者:

return self.points[0][1] + (x - self.points[0][0]) * float(self.points[1][1] - self.points[0][1]) / (self.points[1][0] - self.points[0][0])
#                                                                                         here--^
于 2013-10-31T17:39:57.077 回答