Найти - Пользователи
Полная версия: Не полноцено работает код
Начало » Python для новичков » Не полноцено работает код
1
misha_miheev
Доброго времени суток

написал программку решение обратной геодезической задачи

Вопрос:
к примеру при вводе данных х1 = 50, у1 = 50, х2 = 50, у2 =100
происходит ошибка ZeroDivisionError: float division by zero
где в коде не правильно?
проверял на сайте https://geostart.ru/post/299 получаю значение Дирекционного угла.

и посоветуйте как сделать исключение если ввести в координаты все 0
вот мой код:

import math

print('Координаты пунктов')
while True:
x1 = float(input('введи х1: ‘))
y1 = float(input(’введи у1: ‘))
x2 = float(input(’введи х2: ‘))
y2 = float(input(’введи у2: ‘))
dx = x2 - x1
dy = y2 - y1
dist1 = math.hypot(dx, dy) # или так math. sqrt(dx ** 2 + dy ** 2)
print(’Расстояние: ‘, round(dist1, 3))

r = math.degrees(math.atan(abs(dy / dx))) # Находим Румб
dd = r

d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60
# print(’Румб: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='')

a = 0 # Дирекционный угол
if dx > 0 and dy > 0:
a = r
ne = r
print('СВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx < 0 and dy > 0:
a = 180 - r
se = r
print('ЮВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx < 0 and dy < 0:
a = 180 + r
sw = r
print('ЮЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx > 0 and dy < 0:
a = 360 - r
nw = r
print('СЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx == 0:
if dy > 0:
a = 90
elif dy < 0:
a = 270
elif dy == 0:
if dx > 0:
a = 0
elif dx < 0:
a = 180

da = (a)

dd = da

d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60

print('Дирекционный угол: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='')

b = input('Хотите начать заново (y/n): ‘)

if b == ’y':
print('good')
else:
break
Alex.Pro.
misha_miheev
происходит ошибка ZeroDivisionError: float division by zero
Разобраться будет проще, если сообщение об ошибке рассмотреть подробнее: в какой строке происходит ошибка?
По поводу исключения… А проверить ввод банальными if не устраивает?
Rodegast
 x1 = float(input('введи х1: ‘))
x2 = float(input(’введи х2: ))
dx = x2 - x1
r = math.degrees(math.atan(abs(dy / dx))) # Находим Румб
Если x1 == x2, то dx == 0 и по этому у тебя ошибка деления на 0.
misha_miheev
Rodegast
Спасибо, понял.
А подскажите почему на https://geostart.ru/post/299 (онлайн калькулятор решения ОГЗ) получаем решение? (тупо подгонка? при таких вводных х1 = 50, у1 = 50, х2 = 50, у2 =100 я понимаю что дирекционный угол будет равен 90 градусов)
вот участок кода:
elif dx == 0:
if dy > 0:
a = 90
elif dy < 0:
a = 270
elif dy == 0:
if dx > 0:
a = 0
elif dx < 0:
a = 180
все равно ошибка
Alex.Pro.
misha_miheev
А подскажите почему на https://geostart.ru/post/299 (онлайн калькулятор решения ОГЗ) получаем решение?
Видимо, у них алгоритм решения лучше адаптирован к вариантам с разными квадрантами и направлениями.
misha_miheev
все равно ошибка
И какая ошибка и в какой строке? Опять “деление на ноль”? Ну так в этом фрагменте операций деления нет и такая ошибка возникать не может. Значит у вас либо возникает какая-то другая ошибка, либо где-то в другом месте. Я сегодня не угадоспособен. Вероятность того, что кто-то другой сумеет угадать где и какая ошибка возникает - немножко больше нуля, т.е. =о.
И, в следующий раз, используйте квотинг. Код без отступов читать очень не удобно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB