Форум сайта python.su
0
Нужно создать класс, который инициализируется списком целых чисел и на их основе вычисляет список вещественных чисел. У класса должен быть единственный метод-геттер, который выдаёт требуемый элемент списка вещественных чисел. При выходе за пределы списка должна замигать красная лампочка и завыть сирена. В смысле, программа должна прерваться и предупредить. :o
values = [ 10, 20, 5, 31 ] total = sum(values) equities = [] for n in values: equities.append(n/total) while 1: number = int(input("Enter number: ")) if 0 <= number < len(equities): print (equities[number]) else: print ("It devil knows") break
Офлайн
52
Думаю, для начала нужно нормально изучить язык, а потом уже применять какие-то методологии.
NotDeadAlreadyВ чем отличия от стандартного list'a?
У класса должен быть единственный метод-геттер, который выдаёт требуемый элемент списка вещественных чисел. При выходе за пределы списка должна замигать красная лампочка и завыть сирена.
>>> class MyList(list): ... def __init__(self, *args): ... total = float(sum(args)) ... super(MyList, self).__init__([arg / total for arg in args]) ... ... ... >>> obj = MyList(1, 2, 3, 4, 5) >>> obj [0.06666666666666667, 0.13333333333333333, 0.2, 0.26666666666666666, 0.333333333 3333333] >>> obj[1] 0.13333333333333333 >>> obj[5] Traceback (most recent call last): File "<input>", line 1, in <module> IndexError: list index out of range
Отредактировано fata1ex (Июль 16, 2012 14:34:08)
Офлайн
0
fata1ex
Думаю, для начала нужно нормально изучить язык, а потом уже применять какие-то методологии.
В чем отличия от стандартного list'a?
Отредактировано NotDeadAlready (Июль 16, 2012 17:09:35)
Офлайн
52
NotDeadAlready
Мне просто надо делать всякие утилитки для личных нужд.
NotDeadAlreadyИнтересный подход у вас :)
я хочу понять логику применения ТДД
Отредактировано fata1ex (Июль 16, 2012 17:23:17)
Офлайн
16
Лично мне понравилось описание TDD в книжке “Dive into python3”, раздел “Unit Testing”. Посмотрите, возможно, там вы найдете ответы на свои вопросы.
Офлайн
0
fata1exNotDeadAlready
Мне просто надо делать всякие утилитки для личных нужд.NotDeadAlreadyИнтересный подход у вас
я хочу понять логику применения ТДД
При тестировании определяющую роль играет набор требований, по которому строятся непосредственно тесты. Банально, да, но из требований я заметил только наличие геттера и контроль выхода за пределы списка.
Вы хотите увидеть однострочные тесты к стандартному типу? assertTrue(hasattr(obj, ‘__getitem__’)), assertRaises(…)?
В общем, по-моему, опробовать новый подход можно только самостоятельно его испытав на, например, “утилитке для личной нужды”.
Составляете требования, пишете тесты, пишете код, прогоняете тесты, и по кругу.
Может, кто-нибудь другой вам подскажет лучше.
Офлайн
0
GaiveR
Лично мне понравилось описание TDD в книжке “Dive into python3”, раздел “Unit Testing”. Посмотрите, возможно, там вы найдете ответы на свои вопросы.
Офлайн
0
fata1ex>>> class MyList(list): ... def __init__(self, *args): ... total = float(sum(args)) ... super(MyList, self).__init__([arg / total for arg in args])
Отредактировано NotDeadAlready (Июль 17, 2012 10:49:47)
Офлайн
52
NotDeadAlready, ну вот видите, вам для начала нужно познакомиться с тестированием в питоне. И тогда не будет возникать вопросов, как запускать тесты и тд. Именно поэтому первая фраза была насчет изучения языка.
Соответственно, та программа тоже будет оттестирована, чтобы быть уверенным, что она выдаёт корректный набор входных данных.А если вы захотите через полгода взять эту часть программы и использовать в другом месте, то может оказаться, что у вас что-то не работает, и вы уже не вспомните, что это потому что вы не сделали тесты, уповая на надежность внешнего источника данных :)
NotDeadAlreadyТДД не отличается в плане написания кода ничем. Просто для начала вы пишете тесты, а потом их прогоняете.
Я хочу увидеть весь процесс создания нужного мне класса по шагам
NotDeadAlready
Вот видите, у меня не получилось применить ТДД. Плоховато я представляю весь процесс. Допустим, я напишу тесты (пусть и постфактум). Как потом их запускать? Делать в файле проверку __init__ == __main__? Тогда можно будет в любой момент проверить корректность класса, просто запустив соответствующий файл .py. А как потом проверять всю прогу? Написать примитивный скрипт, который запускает все .py в каталоге, направляет их вывод в файл, а потом ищет в файле все строчки, в которых есть слово FAILED?
Отредактировано fata1ex (Июль 17, 2012 11:56:34)
Офлайн