Форум сайта python.su
sergeek
Отредактировано Budulianin (Окт. 27, 2013 19:26:29)
Офлайн
Budulianinхм, вроде и так ок
Можно ещё abs прописать и с отрицательными корректно будет работать, ну это уже так, если уж очень надо
BudulianinОни очень редко мне подходят, обычно ассертов достаточно. Тут, конечно, совсем лень их было бы делать
Ты юнит тесты делаешь при работе ?
Отредактировано sergeek (Окт. 27, 2013 19:39:17)
Офлайн
lst = [1, 2, 3, 4, 5, 6, 10, 123, 346] lst.sort() res = [] tmp = [] for item, nextitem in zip(lst, lst[1:]+[None]): tmp.append(item) if nextitem is None or nextitem - item != 1: if len(tmp) > 1: res.append(tmp) else: res.extend(tmp) tmp = [] out = [] for item in res: if isinstance(item, list): out.append("{}:{}".format(item[0], item[-1])) else: out.append(str(item)) print ', '.join(out)
Отредактировано bismigalis (Окт. 31, 2013 13:37:03)
Офлайн
bismigalis
Чётко :)
Офлайн
Budulianinесли бы он их делал, то сразу бы правильно написал всё
Ты юнит тесты делаешь при работе ?
sergeekне смеши, это разные вещи
Они очень редко мне подходят, обычно ассертов достаточно.
Отредактировано py.user.next (Окт. 27, 2013 22:26:29)
Офлайн
py.user.next
если бы он их делал, то сразу бы правильно написал всё
Офлайн
py.user.nextЧто значит разные? Они оба улучшают корректность программы и в этом контексте они не разные.
не смеши, это разные вещи
py.user.nextну вот делать мне нечего больше как для форумных задачек юнит тесты писать
если бы он их делал, то сразу бы правильно написал всё
Офлайн
#!/usr/bin/env python3 class NotAListError(TypeError): pass def convert_any_order(lst): """Convert integers in any order to single and range strings.""" if type(lst) != list: raise NotAListError('the argument should be a list') if not lst: return [] fmt = '{}:{}' lst.sort() out = [] prev, inrange, first = lst[0], False, 0 for x in lst[1:]: if prev + 1 != x: if inrange: inrange = False out.append(fmt.format(first, prev)) else: out.append(str(prev)) elif not inrange: inrange, first = True, prev prev = x if inrange: out.append(fmt.format(first, prev)) else: out.append(str(prev)) return out
>>> import onegrp
>>> onegrp.convert_any_order([1, 2, 3, 6, 5, 8, 10, -1, -2, -3])
['-3:-1', '1:3', '5:6', '8', '10']
>>>
sergeekне смеши меня, любой баг в задачке с тестом переделывается в десять раз быстрее, чем без него
ну вот делать мне нечего больше как для форумных задачек юнит тесты писать
Budulianinнет, не знаю; есть, вообще, книжки, посвящённые составлению тестов
Ты что-нибудь знаешь про тест-дизайн ?
Отредактировано py.user.next (Окт. 30, 2013 04:42:16)
Офлайн
py.user.nextНужно знать, чтобы понимать какие тесты составлять и сколько будет достаточно для хорошего покрытия
нет, не знаю; есть, вообще, книжки, посвящённые составлению тестов
py.user.next
а правильность проверить я не могу, потому что у sergeek'а просто выдаётся строка (даже не список), а у Budulianin'а - тоже разнородный список
Офлайн
Budulianinэто надуманно; есть, вообще, общие правила, я их читанул немного в Интернете; летом прошёл юнит-тесты в питоне наполовину (не прошёл моки, а моки дают возможность изображать то, чего нет: типа изобразить, что есть открытый файл, а в нём есть текст, при этом этого файла на самом деле нет)
Нужно знать, чтобы понимать какие тесты составлять и сколько будет достаточно для хорошего покрытия
Budulianinне, я не считаю, что для этого надо писать тест, к моим тестам оно не подходит, потому что они однородные; я мог бы конвертер написать, но просто лень (у тебя там много букв и медленные проверки на исключения), хотя… может, написать?..
Для проверки достаточно знать ожидаемый результат и фактический, чтобы их сравнить
[]
[1, 2, 3]
[1, 1, 2, 3]
[-4, -3, -1, 0, 2, 3]
Отредактировано py.user.next (Окт. 28, 2013 21:53:27)
Офлайн