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: Де делайте такие большие цитаты, пожалуйста, а то сильно ветка растягивается - читать неудобно.
— оффтоп —
Расслабляет питон…
Есть такое :) Иногда даже обидно - написать что-то хочется, а уже всё написали :) Но я обычно бегло смотрю в доки/гугл если ничего сходу подходящего не нашёл - делаю сам. Получается максимально быстрая разработка. При чём чем задача труднее/крупномасштабнее - тем больше времени трачу на поиск…