Форум сайта python.su
Обращался и на другой форум, там не смогли помочь. Смысл этой функции в том, чтобы по элементно сканирует текст на наличие определенной буквы, и в случае нахождение, задает вопрос о замене, если пользователь согласен - заменяет, нет - нет и идет дальше. Все работает, но работает только один раз, то есть, допустим есть слово “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)
Офлайн
/me делает грустное лицо и неодобрительно качает головой
Офлайн
попробуйте не искать ошибку в функции, а четче для самого себя сформулировать проблему и спроектировать решение на бумажке в виде алгоритма.
и вот еще: НЕ используйте string. Он тут не нужен.
Офлайн
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)
Офлайн
Ferroman, bialix, спасибо, очень помогло, коротко и логично. Просто, придумав один алгоритм (даже если он не оправданно сложный) и понимая что то не получается, трудно осознать, что все это было зря и жалко все стирать. Поэтому пытаюсь доделать его до конца… Ну, на ошибках учимся:)
Офлайн
“В программировании главное - не сцать” (с)
:)
Офлайн
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)
Офлайн
строка в несколько мб это изврат)
Офлайн
Я посмотрел это код, и понял насколько я обленился пока програмировал на питоне.
Мне сразу захотелось заменить все это каким-нибудь методом внутренним, или модулем каким.
Расслабляет питон…
Офлайн
Да, если это не строка, а текст - то делать надо по-другому.
PS: Де делайте такие большие цитаты, пожалуйста, а то сильно ветка растягивается - читать неудобно.
— оффтоп —
Расслабляет питон…Есть такое :) Иногда даже обидно - написать что-то хочется, а уже всё написали :) Но я обычно бегло смотрю в доки/гугл если ничего сходу подходящего не нашёл - делаю сам. Получается максимально быстрая разработка. При чём чем задача труднее/крупномасштабнее - тем больше времени трачу на поиск…
Отредактировано (Июль 7, 2008 15:10:02)
Офлайн