Найти - Пользователи
Полная версия: Проблемма в h=string.index(line,i)
Начало » Python для новичков » Проблемма в h=string.index(line,i)
1 2
Moonbite2006
Обращался и на другой форум, там не смогли помочь. Смысл этой функции в том, чтобы по элементно сканирует текст на наличие определенной буквы, и в случае нахождение, задает вопрос о замене, если пользователь согласен - заменяет, нет - нет и идет дальше. Все работает, но работает только один раз, то есть, допустим есть слово “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
/me делает грустное лицо и неодобрительно качает головой
bialix
попробуйте не искать ошибку в функции, а четче для самого себя сформулировать проблему и спроектировать решение на бумажке в виде алгоритма.

и вот еще: НЕ используйте string. Он тут не нужен.
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')

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

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

:)
ice
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
строка в несколько мб это изврат)
shiza
Я посмотрел это код, и понял насколько я обленился пока програмировал на питоне.
Мне сразу захотелось заменить все это каким-нибудь методом внутренним, или модулем каким.
Расслабляет питон…
Ferroman
Да, если это не строка, а текст - то делать надо по-другому.

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


— оффтоп —
Расслабляет питон…
Есть такое :) Иногда даже обидно - написать что-то хочется, а уже всё написали :) Но я обычно бегло смотрю в доки/гугл если ничего сходу подходящего не нашёл - делаю сам. Получается максимально быстрая разработка. При чём чем задача труднее/крупномасштабнее - тем больше времени трачу на поиск…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB