함수 경로를 쓰고 있습니다. 이 함수는 포인트 목록을 취하는 필수 매개 변수 점이 있습니다. 함수는 주어진 목록의 각 점을 차례로 방문 할 경우 여행 한 총 거리를 반환해야합니다. 필수 매개 변수 외에도이 함수에는 다음과 같은 두 개의 선택적 매개 변수가 있습니다.포인트 목록에서 포인트 간 거리를 측정하는 함수 (x, y)
주기 : 경로의 끝이 시작 지점과 같거나 (False) 여부를 나타내는 부울 값을가집니다. 이 매개 변수의 기본값은 False입니다.
distance : 주어진 경로에서 두 개의 연속 점 사이의 총 거리를 계산하는 데 사용되는 거리 함수를 사용합니다. 명시 적 값이이 매개 변수에 전달되지 않은 경우, 유클리드 거리가
문제를 사용해야합니다
route([(41.79, 13.59), (41.68, 14.65), (21.16, -4.79)], distance=lambda p1, p2: abs(p1[0] + p2[0]))
정답 : 146.31 누구는 경우에 그것을 해결하는 방법) 마지막 정의 경로 (로 알고있다 나는 첫 번째 규칙에 추가로 붙어있어이 부분에서
if cycle == False and distance is λ(p1, p2): abs(p1[0] + p2[0]):
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a[0], b[0])
l.append(d)
count += 1
return sum(l)
: 내 코드의
부분은 내가 참조하십시오. (위의 부분을 제외하고) 잘 작동
전체 코드 : 나는 던컨에 동의
def euclidean(a, b):
'''
>>> euclidean((42.36, 56.78), (125.65, 236.47))
198.05484139500354
'''
from math import sqrt
return sqrt(sum((a - b)**2 for a, b in zip(a, b)))
def manhattan(c, d):
'''
>>> manhattan((42.36, 56.78), (125.65, 236.47))
262.98
'''
return sum(abs(c - d) for c, d in zip(c, d))
def chessboard(e, f):
'''
>>> chessboard((42.36, 56.78), (125.65, 236.47))
179.69
'''
return max(abs(e - f) for e, f in zip(e, f))
def route(points, cycle=False, distance=None):
'''
>>> route([(6.59, 6.73), (4.59, 5.54), (5.33, -13.98)])
21.861273201261746
>>> route(cycle=True, points=[(6.59, 6.73), (4.59, 5.54), (5.33, -13.98)])
42.60956710702662
>>> route([(6.59, 6.73), (4.59, 5.54), (5.33, -13.98)], distance=manhattan)
23.45
>>> route([(6.59, 6.73), (4.59, 5.54), (5.33, -13.98)], cycle=True, distance=manhattan)
45.42
'''
if cycle == False and distance is None:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a, b)
l.append(d)
count += 1
return sum(l)
if cycle == False and distance is euclidean:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a, b)
l.append(d)
count += 1
return sum(l)
if cycle == False and distance is λ(p1, p2): abs(p1[0] + p2[0]):
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a[0], b[0])
l.append(d)
count += 1
return sum(l)
if cycle == True and distance is None:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a, b)
l.append(d)
count += 1
f = points[0]
g = points[-1]
r = euclidean(g, f)
k = sum(l) + r
return k
if cycle == True and distance is euclidean:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = euclidean(a, b)
l.append(d)
count += 1
f = points[0]
g = points[-1]
r = euclidean(g, f)
k = sum(l) + r
return k
if cycle is False and distance is manhattan:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = manhattan(a, b)
l.append(d)
count += 1
return sum(l)
if cycle is True and distance is manhattan:
l = list()
count = 0
for items in range(len(points)-1):
a = points[items]
b = points[items+1]
d = manhattan(a, b)
l.append(d)
count += 1
f = points[0]
g = points[-1]
r = manhattan(g, f)
k = sum(l) + r
return k
함수를 비교하지 마십시오 : 서로 다른 두 개의 람다 식은'is' 또는'=='와 동일한 비교를하지 않습니다. 'distance (a, b)'를 호출하고 그 중복을 모두 제거하십시오. – Duncan