Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2008 11:52:46

Moonbite2006
От:
Зарегистрирован: 2008-07-04
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

Обращался и на другой форум, там не смогли помочь. Смысл этой функции в том, чтобы по элементно сканирует текст на наличие определенной буквы, и в случае нахождение, задает вопрос о замене, если пользователь согласен - заменяет, нет - нет и идет дальше. Все работает, но работает только один раз, то есть, допустим есть слово “ere” ему надо найти и заменить букву e , первую он находит и заменяет, вторую пропускает, а вот с третей проблема, он почему то переменной h не присваивает индекса этой буквы, а как следствие и не заменяет, h остается при старом значении. Пробежался по нему дебагером и убедился… вот код функции
def finder(line,what_replace,where_replace,b=“”):
for i in line:
z=string.find(i,what_replace)
if z==-1:
pass
else:
answer=int(raw_input(“Find. Whoud continue? - ”))
print answer
if answer==1:
h=string.index(line,i)
line=string.split(line,line,1)
b=string.join(line,where_replace)
raw_input()
print b
elif answer==0:
continue
Прошу помочь, потому что тут судя по всему ошибка в том, что я пока не изучил… переписывал функцию. в несколько вариантах, результат всегда один и тот же. Если надо могу потом скинуть всю программу целиком.



Отредактировано (Июль 6, 2008 11:53:38)

Офлайн

#2 Июль 6, 2008 13:33:31

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

/me делает грустное лицо и неодобрительно качает головой



Офлайн

#3 Июль 6, 2008 13:34:47

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

попробуйте не искать ошибку в функции, а четче для самого себя сформулировать проблему и спроектировать решение на бумажке в виде алгоритма.

и вот еще: НЕ используйте string. Он тут не нужен.



Офлайн

#4 Июль 6, 2008 13:54:26

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

def finder(st, char, replace_char):
    """
    Replace sнmbol in string by another sнmbol with user confirmation
    
    st -- string
    char -- substituted symbol
    replace_char -- a symbol which replaces
    """
    temp_st = ''
    for i in st:
        if i == char:
            answer=raw_input("Find. Replace char? (Y/N) - ")
            print answer
            if answer.upper() == 'Y':
                i = replace_char
        temp_st = temp_st+i
    return temp_st
# example usage
print finder('testline', 'e', 'g')

Я знаю, что не стоило давать готовый вариант. Ну тут ясно видно, что человек полез в густые дебри - может рабочий код несколько “осветлит” подход.
Такое бывает.

Отредактировано (Июль 6, 2008 13:56:26)

Офлайн

#5 Июль 6, 2008 17:28:36

Moonbite2006
От:
Зарегистрирован: 2008-07-04
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

Ferroman, bialix, спасибо, очень помогло, коротко и логично. Просто, придумав один алгоритм (даже если он не оправданно сложный) и понимая что то не получается, трудно осознать, что все это было зря и жалко все стирать. Поэтому пытаюсь доделать его до конца… Ну, на ошибках учимся:)



Офлайн

#6 Июль 6, 2008 19:17:09

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)


“В программировании главное - не сцать” (с)

:)

Офлайн

#7 Июль 7, 2008 13:40:53

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

Ferroman
def finder(st, char, replace_char):
    """
    Replace sнmbol in string by another sнmbol with user confirmation
    
    st -- string
    char -- substituted symbol
    replace_char -- a symbol which replaces
    """
    temp_st = ''
    for i in st:
        if i == char:
            answer=raw_input("Find. Replace char? (Y/N) - ")
            print answer
            if answer.upper() == 'Y':
                i = replace_char
        temp_st = temp_st+i
    return temp_st
# example usage
print finder('testline', 'e', 'g')
Просто интересно. А если текст будет несколько мегабайт? будет новый объект создавать в памяти?



Отредактировано (Июль 7, 2008 13:41:07)

Офлайн

#8 Июль 7, 2008 14:20:15

hellt
От:
Зарегистрирован: 2008-03-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

строка в несколько мб это изврат)



Офлайн

#9 Июль 7, 2008 14:53:20

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

Я посмотрел это код, и понял насколько я обленился пока програмировал на питоне.
Мне сразу захотелось заменить все это каким-нибудь методом внутренним, или модулем каким.
Расслабляет питон…



Офлайн

#10 Июль 7, 2008 15:06:32

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемма в h=string.index(line,i)

Да, если это не строка, а текст - то делать надо по-другому.

PS: Де делайте такие большие цитаты, пожалуйста, а то сильно ветка растягивается - читать неудобно.


— оффтоп —

Расслабляет питон…
Есть такое :) Иногда даже обидно - написать что-то хочется, а уже всё написали :) Но я обычно бегло смотрю в доки/гугл если ничего сходу подходящего не нашёл - делаю сам. Получается максимально быстрая разработка. При чём чем задача труднее/крупномасштабнее - тем больше времени трачу на поиск…

Отредактировано (Июль 7, 2008 15:10:02)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version