Moonbite2006
Июль 6, 2008 11:52:46
Обращался и на другой форум, там не смогли помочь. Смысл этой функции в том, чтобы по элементно сканирует текст на наличие определенной буквы, и в случае нахождение, задает вопрос о замене, если пользователь согласен - заменяет, нет - нет и идет дальше. Все работает, но работает только один раз, то есть, допустим есть слово “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
Прошу помочь, потому что тут судя по всему ошибка в том, что я пока не изучил… переписывал функцию. в несколько вариантах, результат всегда один и тот же. Если надо могу потом скинуть всю программу целиком.
bialix
Июль 6, 2008 13:33:31
/me делает грустное лицо и неодобрительно качает головой
bialix
Июль 6, 2008 13:34:47
попробуйте не искать ошибку в функции, а четче для самого себя сформулировать проблему и спроектировать решение на бумажке в виде алгоритма.
и вот еще: НЕ используйте string. Он тут не нужен.
Ferroman
Июль 6, 2008 13:54:26
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')
Я знаю, что не стоило давать готовый вариант. Ну тут ясно видно, что человек полез в густые дебри - может рабочий код несколько “осветлит” подход.
Такое бывает.
Moonbite2006
Июль 6, 2008 17:28:36
Ferroman, bialix, спасибо, очень помогло, коротко и логично. Просто, придумав один алгоритм (даже если он не оправданно сложный) и понимая что то не получается, трудно осознать, что все это было зря и жалко все стирать. Поэтому пытаюсь доделать его до конца… Ну, на ошибках учимся:)
Ferroman
Июль 6, 2008 19:17:09
“В программировании главное - не сцать” (с)
:)
ice
Июль 7, 2008 13:40:53
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')
Просто интересно. А если текст будет несколько мегабайт? будет новый объект создавать в памяти?
hellt
Июль 7, 2008 14:20:15
строка в несколько мб это изврат)
shiza
Июль 7, 2008 14:53:20
Я посмотрел это код, и понял насколько я обленился пока програмировал на питоне.
Мне сразу захотелось заменить все это каким-нибудь методом внутренним, или модулем каким.
Расслабляет питон…
Ferroman
Июль 7, 2008 15:06:32
Да, если это не строка, а текст - то делать надо по-другому.
PS: Де делайте такие большие цитаты, пожалуйста, а то сильно ветка растягивается - читать неудобно.
— оффтоп —
Расслабляет питон…
Есть такое :) Иногда даже обидно - написать что-то хочется, а уже всё написали :) Но я обычно бегло смотрю в доки/гугл если ничего сходу подходящего не нашёл - делаю сам. Получается максимально быстрая разработка. При чём чем задача труднее/крупномасштабнее - тем больше времени трачу на поиск…