我有一段代码使用google maps API来获取给定位置之间的距离。因此,例如Tour(' New + York + NY' Lansing + MI',' Sacramento + CA')将计算纽约和纽约之间的位置。兰辛,然后是兰辛&萨克拉门托&给出最终距离值。
我想使用添加方法来指定另一个游览,例如Tour(Oakland + CA)来创建像Tour这样的新路线(' New + York + NY& #39;,' Lansing + MI',' Sacramento + CA',Oakland + CA),然后将其传递到类Tour以计算与新目的地的新距离。
我的代码如下,但是当我在添加功能之后将值传回时,我的距离为0.我知道巡回赛(' New + York + NY&#39 ,' Lansing + MI',#Sacramento + CA',Oakland + CA)如果直接通过就可以使用它,但无法使用添加;我意识到我可能在 str 或 repr 方面做错了什么,我还不太了解它们。任何帮助将不胜感激,现在试图解决这个问题几个小时。
import requests
import json
class Tour:
def __init__ (self, *args):
self.args = args
def __str__ (self):
# returns New+York+NY;Lansing+MI;Los+Angeles+CA
return ' '.join(self.args)
def __repr__ (self):
# returns New+York+NY;Lansing+MI;Los+Angeles+CA
return ' '.join(self.args)
def distance (self, mode = 'driving'):
self.mode = mode
meters_list = []
# counts through the amount of assigned arguments, 'Lansing+MI', 'Los+Angeles+CA' will give 2
for i in range(len(self.args)-1):
#print (self.args[i])
url = 'http://maps.googleapis.com/maps/api/distancematrix/json?origins=%s&destinations=%s&mode=%s&sensor=false' % (self.args[i], self.args[i+1], self.mode)
response = requests.get(url)
# converts json data into a python dictionary
jsonAsPython = json.loads(response.text)
# gets the dictionary value for the metres amount by using the relevent keys
meters = int(jsonAsPython['rows'][0]['elements'][0]['distance']['value'])
#print (meters)
meters_list.append(meters)
return (sum(meters_list))
def __add__ (self, other):
new_route = str(','.join(self.args + other.args))
return Tour(new_route)
a = Tour('New+York+NY', 'Lansing+MI','Sacramento+CA')
b = Tour('Oakland+CA')
print (a)
print (b)
print (a.distance())
c = a + b
print(c)
print (c.distance())
以防这里也是原始项目的链接:http://www.cse.msu.edu/~cse231/PracticeOfComputingUsingPython/08_ClassDesign/GoogleMap/Project11.pdf
答案 0 :(得分:0)
您当前的Tour.__add__
功能是这样的:
Tour('a') + Tour('b') -> Tour('a, b')
您希望Tour.__add__
的行为如下:
Tour('a') + Tour('b') -> Tour('a', 'b')
您使用splat运算符允许Tour.__init__
接受任意数量的参数,因此您必须在Tour.__add__
中执行相反的操作。以下是如何执行此操作的示例:
def f(a, b, c):
print(a, b, c)
f([1, 2, 3]) # TypeError: f() missing 2 required positional arguments: 'b' and 'c'
f(*[1, 2, 3]) # prints 1, 2, 3
f(1, 2, 3) # prints 1, 2, 3