Форум сайта python.su
Доброго времени суток, ув. форумчане.
вкратце опишу суть: ранее при использовании Delphi 7 (до перехода на Юникод) использовался питон-скрипт по коррекции раскладки клавиатуры (если вводилась кирилица, автоматом переключалось на латиницу), работал корректно. После перехода на Delphi 2007 нижеуказанный скрипт перестал работать. В питоне не силен, посему прошу помощи в доработке скрипта:
def Convert(s): eng =u'QWERTYUIOPASDFGHJKLZXCVBNM' rus=u'\u0419\u0426\u0423\u041a\u0415\u041d\u0413\u0428\u0429\u0417\u0424\u042b\u0412\u0410\u041f\u0420\u041e\u041b\u0414\u042f\u0427\u0421\u041c\u0418\u0422\u042c' s_out ='' l=len(s) i=0 while i < l : j = ord(s[i]) if j > 128 : if j < 224 : i = i + 1 j2 = ord(s[i]) k = (j2%64) + (j %32) * 64 s2 = unichr(k) try : s_out += eng[rus.index(s2)] except : s_out += s[i-1: i] else : i = i+2 s_out += s[i-2: i] else : s_out += s[i] i += 1 return (s_out)
Офлайн
Если правильно понял, то если к примеру пользователь вводит в русской раскладке ‘ы’ вводился символ ‘s’, ‘х’ -> ‘[’, ‘ж’ -> ‘;’ и т.д. т.е. асинхронно? Или ж на входе строка которую надо конвертнуть?
Не проще ли словарь соответсвия ввести?
dictionary = {u'а' : 'f', u'б' : ',', u'в': 'd', ... , u'я' : 'z', u'А' : 'F', ... , u'Я' : 'Z'} # Для асинхронного способа достаточно проверить в наличие символ def Convert(c): if c in dictionary.keys(): c = dictionary[c] return c # Для случая конвертированния строки def Convert(s): s = list(s) for index, char in enumerate(s): if char in dictionary.keys(): s[index] = dictionary[char] return ''.join(s)
Отредактировано Piton23 (Май 16, 2012 11:27:01)
Офлайн
Мне было бы лень вручную заводить словарь.
>>> type(u'й') <type 'unicode'> >>> ord(u'б') 1073 >>> unichr(ord(u'б')+1) u'\u0432' >>> u'в' u'\u0432'
Офлайн
Сделал для себя,
работает с вышеприведённым кодом
dictionary = {u'q':'й', u'w':'ц', u'e':'у', u'r':'к', u't':'е', u'y':'н', u'u':'г', u'i':'ш', u'o':'щ', u'p':'з', u'[':'х', u']':'ъ', u'a':'ф', u's':'ы', u'd':'в', u'f':'а', u'g':'п', u'h':'р', u'j':'о', u'k':'л', u'l':'д', u';':'ж', u'z':'я', u'x':'ч', u'c':'с', u'v':'м', u'b':'и', u'n':'т', u'm':'ь', u',':'б', u'.':'ю', u'/':'.', u'Q':'Й', u'W':'Ц', u'E':'У', u'R':'К', u'T':'Е', u'Y':'Н', u'U':'Г', u'I':'Ш', u'O':'Щ', u'P':'З', u'{':'Х', u'}':'Ъ', u'A':'Ф', u'S':'Ы', u'D':'В', u'F':'А', u'G':'П', u'H':'Р', u'J':'О', u'K':'Л', u'L':'Д', u':':'Ж', u'"':'Э', u'Z':'Я', u'X':'Ч', u'C':'С', u'V':'М', u'B':'И', u'N':'Т', u'M':'Ь', u'<':'Б', u'>':'Ю', u'\'':'э', u'`':'ё'}
txts = {'fuf','ghbdtn','ns','jr','nzr','crh','dj','rfr','lf','ytn','gjrf','yt','tot','nen','[t','tnj','xbn','xtn','jyb','tcnm','xt','[s','ghjdthrf','plfhjdf','[fq','[fb','[p','yjhvfkmyj','bjn','vyt','rj','nen','eue','uf','cfv','nfr','xnj','vyt','rjn','njr','rf','rjy','gjyznyj','rhenf','cjcb','[eq','gbljh','ufyljy','dct','yf','cdz','kf;','ghj','rju','pf','cks','gjr','jik','nfr','gjxtve','ehf','kjk','kfvj','k.lb','yfhjl','rfdj','tcnm','tot','hfp','ldf'} ..... for index, char in enumerate(txts): if text(char): result = Convert(msg.Body) msg.Chat.SendMessage("Имел ввиду: "+ result ) return
Отредактировано Inviz (Май 21, 2013 14:34:09)
Офлайн