Найти - Пользователи
Полная версия: Выделение подстроки
Начало » Python для новичков » Выделение подстроки
1 2 3
Ed
Функция в этом языке обычно начинается с def. То есть то, что вы показали функцией не является, это просто код.
Покажите обе функции main и zvuk.
AmF
def 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(', ')])

def main():
text = "ndkvfjbikvbjsh\nfbvfvjnewirvk"
text.replace('\n', '')
for key in dic:
text = text.replace(key, dic[key]) ###
print text
Вот. Но мне бы хотелось, чтобы в main() строка ### использовала бы zvuk(), т.е., как я понимаю, ее надо как-то вызвать … - или это невозможно сделать?

Спасибо
grok
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', ''))
Этот код не совсем правильно будет работать, например вот с такой строкой:
text = "ndkvndkfjbikvbjsh\nfbvfvjngrewirvkl".replace('\n', '')
Результат первых 3-х замен будем следующим: kvkf (символ ‘v’ не переседён).
Как я понял задание, текст должен быть разделен на триады (text = “ndk vnd kfj bik vbj snf bvf vjn gre wir vkl”), а потом уже производится замена… В вашем же коде в ищется любое совпадение 3-х символов в тексте…

Вот теперь будет работать, AmF:
dic={'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
text="ndkndkvfjbikvbjsh\nfbvfvjnewirvk"
txt=text.replace('\n', '')
n=len(txt)
key=0
roll=[]
while key < n:
nlist=txt[key:key+3]
key=key+3
roll.append(dic.get(nlist))
seq = ''
str_ = seq.join(roll)
print str_
Ed
grok
Этот код не совсем правильно будет работать, например вот с такой строкой:
text = "ndkvndkfjbikvbjsh\nfbvfvjngrewirvkl".replace('\n', '')
Как ваш пример согласуется с вот этим утверждением автора?
всю строку можно разбить на такие тройки (лишних нет).
Что есть, например, vnd или kfj в вашем примере? Таких троек нет в словаре.
Ed
AmF
Вот. Но мне бы хотелось, чтобы в main() строка ### использовала бы zvuk(), т.е., как я понимаю, ее надо как-то вызвать … - или это невозможно сделать?
Ваш zvuk делает не то, что вы сказали. Она не ‘принимает тройку символов’ и не ‘возвращает 1 символ ’. Сделайте ее такой и тогда ее можно будет вызвать в main. Только смысла в этом не будет, поскольку этот функционал реализуется словарем.
grok
Ed
Как ваш пример согласуется с вот этим утверждением автора?
всю строку можно разбить на такие тройки (лишних нет).
Что есть, например, vnd или kfj в вашем примере? Таких троек нет в словаре.
Я всего лишь немного утрировал пример.. (конечно же, все тройки должны быть прописаны в словаре ИМХО). Как мне показалось по заданию, вся строка должна быть разбита на триады, ибо одиночных символов быть не должно.. В Вашем же примере, одиночные символы остаются..
Ed
Мне так не показалось. Посмотрите первый пост - задача состоит в замене, а разбивать на тройки - предложеное автором решение.
Впрочем неважно. Я согласен, что в некоторых случаях в резуотате замены по моему алгоритму можно получить неверное решение, но не для указаных автором троек.
AmF
Скажите, пжлст, что я делаю не так: в одном файле у меня длинная зашифрованная строка. Я хочу прочитать эту строку, преобразовать ее, заменив тройки символов одним, а результат записать в другой файл. Моя проблема: не выводится результат, хотя вроде никаких ошибок не выдает:
dic={'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
f = open("in.txt", 'r')
f1 = open("out.txt", 'w')
for line in f:
lne = line.replace('\n', '')
n=len(lne)
key=0
roll=[]
while key < n:
nlist=lne[key:key+3]
key=key+3
roll.append(dic.get(nlist))
f2 = open('out.txt', 'r')
for line in f2:
seq = ''
str_ = seq.join(roll)
f1.write(str_)
f.close()
f1.close()
Спасибо
grok
dic={'ndk':'k', 'vfj':'a', 'bik':'f', 'vbj':'r', 'shf':'u',
'bvf':'p', 'vjn':'c', 'ewi':'e', 'rvk':'g'}
f = open("in.txt", 'r')
f1 = open("out.txt", 'w')
text=f.read()
lne = text.replace('\n', '')
n=len(lne)
key=0
roll=[]
while key < n:
nlist=lne[key:key+3]
key=key+3
roll.append(dic.get(nlist))
seq = ''
str_ = seq.join(roll)
f1.write(str_)
f.close()
f1.close()
Ed
Смотрю я на этот код и он мне не нравится. Какой-то он не питоновый.
n=len(lne)
key=0
roll=[]
while key < n:
nlist=lne[key:key+3]
key=key+3
roll.append(dic.get(nlist))
seq = ''
str_ = seq.join(roll)
Как вы смотрите на эти аналоги?
roll = []
for key in range(0, len(txt), 3):
roll.append(dic.get(txt[key:key+3]))
print ''.join(roll)
print ''.join([dic[txt[key:key+3]] for key in range(0, len(txt), 3)])
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