我正在尝试使用“乌龟”在世界地图上显示国际空间站(ISS)的位置。我已经从API中获取了经度和纬度。然后将坐标保存到变量“ lon”和“ lat”。
但是当我使用iss.goto(lon, lat)
时,会收到TypeError。我认为这是由经度和纬度坐标有时为负值引起的,因此浮点数以“-”为前缀。
有人可以帮我解决这个问题吗?
import tkinter
import turtle
import json
import urllib.request
url = 'http://api.open-notify.org/iss-now.json'
response = urllib.request.urlopen(url)
result = json.loads(response.read())
location = result['iss_position']
lat = (location['latitude'])
lon = (location['longitude'])
print('latitude: ', lat)
print('longitude: ', lon)
screen = turtle.Screen()
screen.setup(3000, 1500)
screen.setworldcoordinates(-180, -90, 180, 90)
screen.register_shape('iss2.gif')
screen.bgpic('world_map.png')
iss = turtle.Turtle()
iss.shape('iss2.gif')
iss.setheading(90)
iss.penup()
iss.goto(lon, lat) # I get the error here
tkinter.mainloop()
错误消息:
Traceback (most recent call last):
File "C:/Users/Ouch/PycharmProjects/Learning/Space_station.py", line 47, in <module>
iss.goto(lon, lat)
File "C:\Python37\lib\turtle.py", line 1776, in goto
self._goto(Vec2D(x, y))
File "C:\Python37\lib\turtle.py", line 3165, in _goto
diff = (end-start)
File "C:\Python37\lib\turtle.py", line 262, in __sub__
return Vec2D(self[0]-other[0], self[1]-other[1])
TypeError: unsupported operand type(s) for -: 'str' and 'float'
答案 0 :(得分:2)
错误提示您无法从字符串中减去浮点数。
因此,该问题与某些值为浮点数或某些浮点为负数无关。您不能从字符串中减去int,不能从字符串中减去正浮点,也不能从字符串中减去其他任何东西。问题在于您的某些值是字符串。
如果您打印出值的代表而不是直接打印出值,则可以看到以下内容:
print('latitude: ', repr(lat))
print('longitude: ', repr(lon))
您会看到类似这样的内容:
latitude: '-10.4958'
longitude: '-172.9960'
因此,要解决此问题,只需将这些字符串转换为浮点数即可:
lat = float(location['latitude'])
lon = float(location['longitude'])