Разница двух имперских длин


У меня есть программа, которая берет две имперские длины (мили, ярды, футы и дюймы) и выводит их сумму и разницу. Моя проблема заключается в том, что когда разница отрицательна, вывод неверен.

def to_inches(miles, yards, feet, inches):
    return inches + (feet * 12) + (yards * 36) + (miles * 63360)


def from_inches(inches):
    miles = inches // 63360
    inches %= 63360

    yards = inches // 36
    inches %= 36

    feet = inches // 12
    inches %= 12

    return (miles, yards, feet, inches)

units1 = [int(n) for n in input().split(' ')]
units2 = [int(n) for n in input().split(' ')]

m_sum = from_inches(to_inches(*units1) + to_inches(*units2))
m_diff = from_inches(to_inches(*units1) - to_inches(*units2))

print(' '.join(str(n) for n in m_sum))
print(' '.join(str(n) for n in m_diff))

Вход:

2 850 1 7
1 930 1 4

Вывод:

4 21 0 11
0 1680 1 3

Вход:

0 1 0 0
1 0 0 0

Ожидаемый результат:

1 1 0 0
-0 1759 0 0

Фактический выход:

1 1 0 0
-1 1 0 0
1 3

1 ответ:

Это потому, что Python обрабатывает оператор mod % немного странно, когда дело доходит до отрицательных чисел. Проверьте этот ответ: https://stackoverflow.com/a/3883019/436282