gpt4 book ai didi

python - 输入错误 [] : findDistance() takes 0 positional arguments but 1 was given

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:42 25 4
gpt4 key购买 nike

我的代码的第一部分是计算地球上两个位置之间的距离。我的代码的第二部分返回一个列表,其中包含数据库中存储的所有美国城市。数据库保存在一个名为“city_data.db”的文件中,该文件包含一个名为“cities”的表,其中包含列(“country_code”、“city_name”、“region”、“population”、“latitude”、“longitude”)。请注意,美国的国家/地区代码是“us”。

我的代码的第三部分返回一个列表,其中包含存储在数据库中的美国所有城市,这些城市按它们与布法罗市的大圆距离排序。使用 (42.8864, -78.8784) 作为布法罗的纬度/经度

我在输入 [] 时遇到错误:findDistance() 采用 0 个位置参数,但给出了 1 个。我做错了什么?

import sqlite3
import math
conn = sqlite3.connect("city_data.db")
c = conn.cursor()
conn.commit()

#Part 1
def great_circle_distance(lat1, lon1, lat2, lon2):
radius = 6371

dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = radius * c

return d

#Part 2
def get_us_cities():
get_city = c.execute("SELECT * FROM cities WHERE country_code = 'us'").fetchall()
return [x for x in get_city]

#Part 3
def findDistance():
citieslist = get_us_cities()
lat1 = 42.8864
lon1 = -78.8784
lat2 = citieslist[4]
lon2= citieslist[5]
distance = great_circle_distance(lat1, lon1, lat2, lon2)
return distance

def closest_cities():
array = get_us_cities()
array.sort(key = findDistance)
return array

最佳答案

你在做什么

array.sort(key = findDistance)

这意味着排序算法正在使用 findDistance() 为其排序的每个值查找“键”。基本上,它获取一个列表,对该列表中的每个项目执行 findDistance(),然后根据返回值对列表进行排序。因此,array.sort() 期望它作为 key 给出的任何内容都能够获取一个值并吐出另一个可用于排序的值。

我不知道你是如何构建你的数据库的,或者你的数组将采用什么格式,但是让我们假设这个例子中的每个项目都是一个列表,索引对应于你的列列出(例如,“纬度”将是索引 4,“经度将是索引 5,等等)。然后,您需要重写 findDistance( ) 将其中一个作为参数:

def findDistance(city):
lat1 = 42.8864
lon1 = -78.8784
lat2 = city[4] # notice how we're using the variable that was passed in,
lon2 = city[5] # instead of accessing get_us_cities()
distance = great_circle_distance(lat1, lon1, lat2, lon2)
return distance

关于python - 输入错误 [] : findDistance() takes 0 positional arguments but 1 was given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53464603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com