sergeek
Можно ещё abs прописать и с отрицательными корректно будет работать, ну это уже так, если уж очень надо
Я думал, думал и коряво написал :)
Ты юнит тесты делаешь при работе ?
sergeek
Budulianinхм, вроде и так ок
Можно ещё abs прописать и с отрицательными корректно будет работать, ну это уже так, если уж очень надо
BudulianinОни очень редко мне подходят, обычно ассертов достаточно. Тут, конечно, совсем лень их было бы делать
Ты юнит тесты делаешь при работе ?
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)
Budulianinесли бы он их делал, то сразу бы правильно написал всё
Ты юнит тесты делаешь при работе ?
sergeekне смеши, это разные вещи
Они очень редко мне подходят, обычно ассертов достаточно.
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Нужно знать, чтобы понимать какие тесты составлять и сколько будет достаточно для хорошего покрытия
нет, не знаю; есть, вообще, книжки, посвящённые составлению тестов
py.user.next
а правильность проверить я не могу, потому что у sergeek'а просто выдаётся строка (даже не список), а у Budulianin'а - тоже разнородный список
Budulianinэто надуманно; есть, вообще, общие правила, я их читанул немного в Интернете; летом прошёл юнит-тесты в питоне наполовину (не прошёл моки, а моки дают возможность изображать то, чего нет: типа изобразить, что есть открытый файл, а в нём есть текст, при этом этого файла на самом деле нет)
Нужно знать, чтобы понимать какие тесты составлять и сколько будет достаточно для хорошего покрытия
Budulianinне, я не считаю, что для этого надо писать тест, к моим тестам оно не подходит, потому что они однородные; я мог бы конвертер написать, но просто лень (у тебя там много букв и медленные проверки на исключения), хотя… может, написать?..
Для проверки достаточно знать ожидаемый результат и фактический, чтобы их сравнить
[]
[1, 2, 3]
[1, 1, 2, 3]
[-4, -3, -1, 0, 2, 3]