Если вы хотите правильно обработать негативы, первая ненулевая мера устанавливается как отрицательная. Это противоречит общепринятой практике - указывать все градусы, минуты и секунды как отрицательные ( Википедия показывает 40 ° 26.7717, -79 ° 56.93172 в качестве действительного примера обозначения градусов-минут, в котором градусы отрицательны и минуты не имеют знака), а установка градусов на отрицательное значение не имеет никакого эффекта, если часть градусов равна 0. Вот функция, которая адекватно обрабатывает это, основываясь на функциях Пола МакГвайра и Баенса:
def decdeg2dms(dd):
negative = dd < 0
dd = abs(dd)
minutes,seconds = divmod(dd*3600,60)
degrees,minutes = divmod(minutes,60)
if negative:
if degrees > 0:
degrees = -degrees
elif minutes > 0:
minutes = -minutes
else:
seconds = -seconds
return (degrees,minutes,seconds)