выяснение Y-перехват с заданным наклоном в Python - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь вычислить точку пересечения склона, но не могу работать со всеми своими тестовыми блоками.Я получаю первые тестовые блоки для работы, но с последним у меня возникли некоторые проблемы.Может кто-нибудь помочь мне найти ошибку?

def test(actual, expected):
    """ Compare the actual to the expected value,
        and print a suitable message.
    """
    import sys
    linenum = sys._getframe(1).f_lineno   # get the caller's line number.
    if (expected == actual):
        msg = "Test on line {0} passed.".format(linenum)
    else:
        msg = ("Test on line {0} failed. Expected '{1}', but got '{2}'."
                                 . format(linenum, expected, actual))
    print(msg)

def slope (x1, y1, x2, y2):
    x2 = (x2 - x1)
    y2 = (y2 - y1)

    m = (y2/x2)
    return m

def intercept(x1, y1, x2, y2):
    m = slope(x1,y1,x2,y2)
    b = y2 - (m*x2)
    return b 


def test_suite():
    test(intercept(1, 6, 3, 12), 3.0)
    test(intercept(6, 1, 1, 6), 7.0)
    test(intercept(4, 6, 12, 8), 5.0)






test_suite()

Ответы [ 3 ]

4 голосов
/ 27 декабря 2011

В результате теста вы получаете подсказку: Expected '5.0', but got '8'. Обратите внимание, что ожидаемое значение является числом с плавающей запятой, но фактический результат является целым числом.

Быстрое решение состоит в том, чтобы изменить slope функцию на:

def slope (x1, y1, x2, y2):
    x2 = (x2 - x1)
    y2 = (y2 - y1)

    m = (1.0*y2/x2)
    return m

Другим исправлением будет переключение на Python 3 или добавление from __future__ import division в начало вашего файла .py. В Python 3 деление приводит к плавающей точке по умолчанию. См. PEP 238 для более подробного обсуждения.

2 голосов
/ 27 декабря 2011

Вы передаете целочисленные значения, поэтому оператор '/' по умолчанию принимает целочисленное деление.Достаточно изменить slope:

def slope (x1, y1, x2, y2):
    x2 = float(x2 - x1)
    y2 = float(y2 - y1)

    m = (y2/x2)
    return m
0 голосов
/ 27 декабря 2011

Похоже, домашнее задание для меня.Попробуйте пройти последний тестовый сценарий вручную и распечатать значения, чтобы увидеть, получите ли вы то же самое.

Например: замените функцию наклона на

def slope (x1, y1, x2, y2):
    x2 = (x2 - x1)
    y2 = (y2 - y1)
    print y2,x2
    m = (y2/x2)
    print m
    print 1.0*y2/x2
    return 1.0*y2/x2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...