Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 27, 2024 09:59:26

misha_miheev
Зарегистрирован: 2024-11-19
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полноцено работает код

Доброго времени суток

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

Вопрос:
к примеру при вводе данных х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

Офлайн

#2 Ноя. 27, 2024 19:09:09

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полноцено работает код

misha_miheev
происходит ошибка ZeroDivisionError: float division by zero
Разобраться будет проще, если сообщение об ошибке рассмотреть подробнее: в какой строке происходит ошибка?
По поводу исключения… А проверить ввод банальными if не устраивает?

Офлайн

#3 Ноя. 27, 2024 19:29:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2744
Репутация: +  183  -
Профиль   Отправить e-mail  

Не полноцено работает код

 x1 = float(input('введи х1: ‘))
x2 = float(input(’введи х2: ))
dx = x2 - x1
r = math.degrees(math.atan(abs(dy / dx))) # Находим Румб
Если x1 == x2, то dx == 0 и по этому у тебя ошибка деления на 0.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 28, 2024 06:48:16

misha_miheev
Зарегистрирован: 2024-11-19
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полноцено работает код

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
все равно ошибка

Офлайн

#5 Ноя. 28, 2024 20:20:46

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полноцено работает код

misha_miheev
А подскажите почему на https://geostart.ru/post/299 (онлайн калькулятор решения ОГЗ) получаем решение?
Видимо, у них алгоритм решения лучше адаптирован к вариантам с разными квадрантами и направлениями.
misha_miheev
все равно ошибка
И какая ошибка и в какой строке? Опять “деление на ноль”? Ну так в этом фрагменте операций деления нет и такая ошибка возникать не может. Значит у вас либо возникает какая-то другая ошибка, либо где-то в другом месте. Я сегодня не угадоспособен. Вероятность того, что кто-то другой сумеет угадать где и какая ошибка возникает - немножко больше нуля, т.е. =о.
И, в следующий раз, используйте квотинг. Код без отступов читать очень не удобно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version