Форум сайта python.su
0
Функция должна переставлять все четные символы с нечетными.
Я вот не дописал,
def test(text): res = '' count = 0; for t in text: res += text[1 + count] + text[0 + count] count += 2 return res
Отредактировано Saturn (Июль 21, 2012 11:18:53)
Офлайн
173
Ошибка в логике. count каждый раз прибавляется на 2, а количество итераций равно количеству символов. Могу привести два варианта (однострочник и с циклом), но лучше попробуйте сами исправить.
Подсказка: t в коде не используется, для count больше подойдет range. Гляньте 3-й параметр к range в справке.
Отредактировано reclosedev (Июль 21, 2012 11:42:31)
Офлайн
0
Я уже допер, но напишите свои варианты, интересно увидеть.
def test(text): res = '' count = 0; for t in text: try: res += text[1 + count] + text[0 + count] count += 2 except IndexError: pass return res
Офлайн
173
def test1(text): return ''.join([x + y for x, y in zip(text[1::2], text[::2])]) def test2(text): res = [] for i in range(0, len(text) - 1, 2): res.append(text[i + 1] + text[i]) return ''.join(res) def test3(text): return ''.join([text[i + 1] + text[i] for i in range(0, len(text) - 1, 2)])
И цикл будет крутиться в два раза больше чем нужно. Хотя бы break вместо pass нужен.except IndexError: pass
Отредактировано reclosedev (Июль 21, 2012 12:02:00)
Офлайн
0
Вот так переделал после совета.
def shuffle_str(text): res = '' for t in range(0,len(text),2): res += text[1 + t] + text[0 + t] return res
Отредактировано Saturn (Июль 21, 2012 12:11:41)
Офлайн
52
Офлайн
14
Самое быстрое.
from array import array def swap(txt): arr=array('H', txt) arr.byteswap() return a.tostring()
Отредактировано odnochlen (Июль 21, 2012 17:56:25)
Офлайн
52
Офлайн
173
odnochlenДа, кстати. Но с Юникодом не справиться (если вообще это кому-то нужно будет
Самое быстрое.
from array import array
).
Офлайн