Python Turtle Goto не допускает отрицательного плавания

1

Я пытаюсь использовать "черепаху", чтобы показать позицию Международной космической станции (МКС) на карте мира. Я взял долготу и широту из API. Затем сохранили координаты переменных "lon" и "lat".

Но когда я использую iss.goto(lon, lat) я получаю TypeError. Я считаю, что это связано с тем, что координаты долготы и широты иногда являются отрицательными, поэтому float имеет префикс "-".

Может кто-нибудь, пожалуйста, помогите мне исправить это?

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
    попробуйте print(type(lat))
Теги:
python-3.x
turtle-graphics

1 ответ

2
Лучший ответ

Ошибка заключается в том, что вы не можете вычесть float из строки.

Таким образом, проблема не имеет ничего общего с некоторыми значениями, которые являются float или некоторые из поплавков являются отрицательными. Вы не можете вычесть int из строки или положительного поплавка из строки или чего-либо еще из строки. Проблема в том, что некоторые из ваших значений являются строками.

Вы можете увидеть это, если вы распечатаете представление значений, а не значений напрямую:

print('latitude: ', repr(lat))
print('longitude: ', repr(lon))

Вы увидите что-то вроде этого:

latitude:  '-10.4958'
longitude:  '-172.9960'

Итак, чтобы исправить это, просто преобразуйте эти строки в float:

lat = float(location['latitude'])
lon = float(location['longitude'])
  • 0
    Оно работает! Я благодарен вам. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню