Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2012 11:13:40

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Функция должна переставлять все четные символы с нечетными.
Я вот не дописал,

def test(text):
    res = ''
    count = 0;
    for t in text:             
        res += text[1 + count] + text[0 + count]
        count += 2 
    return res  
 

Как можно сделать чтобы с каждой итерацией
к text прибавлялось +2 ?
Не пойму почему count не хочет прибавляться ?



Отредактировано Saturn (Июль 21, 2012 11:18:53)

Офлайн

#2 Июль 21, 2012 11:40:40

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Ошибка в логике. count каждый раз прибавляется на 2, а количество итераций равно количеству символов. Могу привести два варианта (однострочник и с циклом), но лучше попробуйте сами исправить.

Подсказка: t в коде не используется, для count больше подойдет range. Гляньте 3-й параметр к range в справке.

Отредактировано reclosedev (Июль 21, 2012 11:42:31)

Офлайн

#3 Июль 21, 2012 11:51:09

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Я уже допер, но напишите свои варианты, интересно увидеть.

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  



Офлайн

#4 Июль 21, 2012 11:56:10

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

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)])

except IndexError:
            pass
И цикл будет крутиться в два раза больше чем нужно. Хотя бы break вместо pass нужен.

Отредактировано reclosedev (Июль 21, 2012 12:02:00)

Офлайн

#5 Июль 21, 2012 12:06:33

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Вот так переделал после совета.

def shuffle_str(text):
    res = ''
    for t in range(0,len(text),2):
        res += text[1 + t] + text[0 + t]
    return res

Интересные варианты. Я про join совершенно не подумал. Спасибо.



Отредактировано Saturn (Июль 21, 2012 12:11:41)

Офлайн

#6 Июль 21, 2012 12:23:12

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

http://python.su/forum/topic/9477



Отредактировано fata1ex (Июль 21, 2012 12:23:20)

Офлайн

#7 Июль 21, 2012 17:55:59

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Самое быстрое.

from array import array
def swap(txt):
    arr=array('H', txt)
    arr.byteswap()
    return a.tostring()

Отредактировано odnochlen (Июль 21, 2012 17:56:25)

Офлайн

#8 Июль 21, 2012 18:03:35

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

Офлайн

#9 Июль 21, 2012 18:28:02

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

А как добавить инкремент в функции ?

odnochlen
Самое быстрое.

from array import array
Да, кстати. Но с Юникодом не справиться (если вообще это кому-то нужно будет ).

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version