Найти - Пользователи
Полная версия: Выделение подстроки
Начало » Python для новичков » Выделение подстроки
1 2 3
AmF
Всем привет!

Прошу помощи в задаче (хочу понять алгоритм):

пользователь вводит строку (длинную, без знаков препинания, пробелов) - одни лат.буквы, которая может занимать пару строк. Необходимо каждые 3 буквы заменить одной по определенным правилам (приведу 3 правила: amn -> k, jjj -> l, fjd -> p). Всю строку можно разбить на такие тройки (лишних нет). Причем тройка может начинаться на одной строке, а заканчиваться на другой (для меня этот момент самый сложный).
Вот я хотел бы разобраться, каким образом это можно провернуть …

Спасибо
igor.kaist
Читайте доки по работе со строками и смотрите метод replace.
http://www.intuit.ru/department/pl/python/6/3.html
P.S. Есть же куча книг на русском языке, почему бы там не посмотреть сперва?
grok
Я бы правила в словарь занес, что-то типа {'amn' : k, ‘jjj’ : l, ‘fjd’ : p} и т.д..
А после уже проводить замену =)
Vader
Вот похожая задача http://www.python.su/forum/viewtopic.php?id=8525
С переносом на новую строку можно бороться так:
mystring.replace('\n','')
grok
Что-то вы то добавляте, то удаляете коммент, AmF.
Я бы так разделил текст по 3 символа:
text="ndkvfjbikvbjsh\nfbvfvjnewirvk"
txt=text.replace('\n', '')
n=len(txt)
i=n/3
key=0
while key < i:
nlist=txt[0:3]
print nlist
txt=txt.replace(nlist, '')
key+=1
AmF
За инфу - спасибо! У меня процесс идет - напишу одно - возникнет новая мысль - проверю - напишу другое …

Вот что у меня пока получилось: сначала объединил всё в одну большую строку, а потом разбил всё на тройки …
mystr = 'nnnvvvbhjuytfds\nhjkkjhfdsuiofdsyuitremnb\ngfuyitttrew'
mystr.replace('\n','')
s1 = mystr.split()
print s1
seq = ''
str = seq.join(s1)

while i < len(str):
posl = str[i:i + 3]
print posl
i += 3
Помогите, пжлст, с последней частью: надо теперь каждую тройку заменить на результат выполнения ф-ции zvuk() - ф-ция, которая заменяет тройку символов на 1 символ … - она у меня написана … мне непонятно, как это использовать …

Спасибо …
grok
Я Вас иногда не понимаю.. Вы бы код привели своей функции zvuk()…
dic={'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
text="ndkvfjbikvbjsh\nfbvfvjnewirvk"
txt=text.replace('\n', '')
n=len(txt)
i=n/3
key=0
roll=[]
while key < i:
nlist=txt[0:3]
txt=txt.replace(nlist, '')
key+=1
roll.append(dic.get(nlist))
seq = ''
str_ = seq.join(roll)
print str_
Ed
А просто пройтись по словарю и поменять не проще будет?
Как-нибудь так:
dic = {'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
text = "ndkvfjbikvbjsh\nfbvfvjnewirvk".replace('\n', '')
for key in dic:
text = text.replace(key, dic[key])
print text
Ну или тоже самое с извоащениями:
print reduce(lambda x, y: x.replace(y, dic[y]), dic, "ndkvfjbikvbjsh\nfbvfvjnewirvk".replace('\n', ''))
AmF
grok
Ага, спасибо! Только вот не могу понять, почему это не работает для, например, такого ввода:
 text = "ndkndkndkvfjbikvbjsh\nfbvfvjnrvkrvkrvkewirvk"
Т.е. когда во вводимом тексте есть повторяющиеся символьные последовательности, идущие одна за другой - программа выводит замену только для первой тройки символов из повтора - остальные игнорирует и переходит потом к другой тройке, отличной от этой.

Спасибо
AmF
Ed Спасибо! Ваш код работает для любых последовательностей!

И последний вопрос: у меня есть ф-ция zvuk() - она принимает тройку символов и возвращает 1 символ и ф-ция main() - в которой в длинной строке выделяются тройки и заменяются последовательно на 1 символ. Можно ли в ф-ции main() вызвать ф-цию zvuk() ? - т.е., когда надо заменить тройку, вызываем zvuk() - она заменяет - и смотрим на след. тройку и т.д. ?

Вот ф-ция zvuk():
dic = {'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
sl = raw_input("Enter the codon: ")
return ' '.join([dic.get(cod, ' ') for cod in sl.split(', ')])
Спасибо!
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