В плане критики больше хочется услышать направление в котором думать, а готовый код всегда можно поклянчить.
Спасибо всем откликнувшимся.
# coding : utf8 import math DEGCHAR = chr(176) def degrees_to_dms(dec_degrees): """ Перевод десятичных градусов в градусы, минуты, секунды. """ degrees = math.trunc(dec_degrees) minutes = math.trunc((dec_degrees - degrees) * 60) seconds = (((dec_degrees - degrees) * 60) - minutes) * 60 return degrees, minutes, seconds def degrees_to_radian(): """ Перевод градусов в радианы. """ angle = input('Угол г м с: ') angle = angle.split(' ') degrees, minutes, seconds = int(angle[0]),int(angle[1]),float(angle[2]) radian = math.radians(degrees + minutes/60 + seconds/3600) print('\n', 'Угол =', radian, 'радиан', sep=' ') def radian_to_degrees(): radian = input('rad: ') radian = math.degrees(float(radian)) degrees, minutes, seconds = degrees_to_dms(radian) print('Угол=',' ', degrees, DEGCHAR, minutes, '\'', '%.2f'%seconds, '\"', '\n', sep='') def ogz(): print('координаты пунктов:') x1 = input('X1=') y1 = input('Y1=') x2 = input('X2=') y2 = input('Y2=') x1 = float(x1) y1 = float(y1) x2 = float(x2) y2 = float(y2) dx = x2 - x1 dy = y2 - y1 distance = math.hypot(dx,dy) if dx == 0 and y2 > y1: angle = 90 elif dx == 0 and y2 < y1: angle = 270 else: dyx = abs(dy/dx) rhumb = math.atan(dyx) * 180/math.pi if dx >= 0 < dy: angle = rhumb elif dx < 0 >= dy: angle = 180 + rhumb elif dx >= 0 > dy: angle = 360 - rhumb elif dx < 0 <= dy: angle = 180 - rhumb degrees, minutes, seconds = degrees_to_dms(angle) print('Расстояние S = ', '%.3f'%distance, '\n', 'Дирекционный угол ', degrees, DEGCHAR, minutes, '\'', '%.3f'%seconds, '\"', sep='') def pgz(): print('Координаты первого пункта') x1=input('X1=') y1=input('Y1=') distance = input('S A-B = ') angle = input('Дирекуионный угол А-B г м с = ') angle = angle.split(' ') degrees, minutes, seconds = int(angle[0]), int(angle[1]), float(angle[2]) x1, y1, distance = float(x1), float(y1), float(distance) radian = math.radians(degrees + minutes/60 + seconds/3600) dx = distance * math.cos(radian) dy = distance * math.sin(radian) x2 = x1 + dx y2 = y1 + dy print('\n','X2 = ', '%.3f'%x2, '\n', 'Y2 = ', '%.3f'%y2, sep=' ') task_dict = { 1:degrees_to_radian, 2:radian_to_degrees, 3:ogz, 4:pgz } while True: print ('1. Градусы в радианы\n', '2. Радианы в градусы\n', '3. ОГЗ\n', '4. ПГЗ\n', '5. Выход', sep='') x = input('Задача: ') try: x = int(x) except ValueError: continue if not x in task_dict: break try: task_dict[x]() except (IndexError, ValueError): print('Ошибка ввода', '\n', '_'*10,)