Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2014 11:45:20

lecksys
Зарегистрирован: 2013-12-03
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

транслитирование.

Вобщем, дано слово по русски нужно перевести его транлитом (задачка придумана с потолка) вот до чего получилось дойти:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
alf_dict = {'А': 'a', 'Б': 'b', 'Ц': 'с', 'Д': 'd', 'Е': 'e', 'Ф': 'f'}
stroka = 'ФЕАДЦБА'
for key in alf_dict:
    s = stroka.replace(key, alf_dict[str(key)])
    print(s)
Но в результате получаю шесть строк с изменёнными буквами, хотелось бы получить вывод ФЕАДЦБА => feadcba. Тыкните пальцем где я не прав?

Отредактировано lecksys (Март 24, 2014 11:48:56)

Офлайн

#2 Март 24, 2014 11:49:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

транслитирование.

alf_dict = {'А': 'a', 'Б': 'b', 'Ц': 'с', 'Д': 'd', 'Е': 'e', 'Ф': 'f'}
stroka = 'ФЕАДЦБА'
for original, translit in alf_dict.items():
    stroka = stroka.replace(original, translit)
print(stroka)



Офлайн

#3 Март 24, 2014 12:24:15

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

транслитирование.

translate лучше юзать в этом случае (это я для тс).

Офлайн

#4 Март 24, 2014 12:35:24

lecksys
Зарегистрирован: 2013-12-03
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

транслитирование.

а как можно указать два ключа для одного значения?
что такое translate и где о нём почитать?
Ну а так, это больше академический интерес чтоб попробывать словари, строки и цикл for

спасибо! translate и maketrans действительно прикольные штуки:

print("абрвал... халк хочет кушать! халк будет ломать!!!".translate(str.maketrans('абвгдежзиклмнопрстуфхцшщчяь', "abvgdezziklmnoprstufhcss4y'")))
Но как реализовать буквы типа ж -> zh и им подобные?

Отредактировано lecksys (Март 24, 2014 16:45:35)

Офлайн

#5 Март 24, 2014 17:03:00

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

транслитирование.

двойные уже с помощью replace.

Офлайн

#6 Март 25, 2014 01:25:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

транслитирование.

lecksys
Но как реализовать буквы типа ж -> zh и им подобные?
>>> 'жжж'.translate(str.maketrans({'ж': 'zh'}))
'zhzhzh'
>>>

>>> td = str.maketrans('абв', 'abv')
>>> td.update(str.maketrans({'ж': 'zh'}))
>>> 
>>> 'абвжжж'.translate(td)
'abvzhzhzh'
>>>



Отредактировано py.user.next (Март 25, 2014 01:26:33)

Офлайн

#7 Март 25, 2014 09:35:22

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

транслитирование.

Есть либа готовая: pytils

Офлайн

#8 Март 25, 2014 11:21:48

lecksys
Зарегистрирован: 2013-12-03
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

транслитирование.

Поправил свой первоначальный вариант (теперь тоже работает)

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
alf_dict = {'А': 'a', 'Б': 'b', 'Ц': 'с', 'Д': 'd', 'Е': 'e', 'Ф': 'f'}
stroka = 'ФЕАДЦБА'
for key in alf_dict.keys():
    stroka = stroka.replace(key, alf_dict[key])
print(stroka)

Офлайн

#9 Март 25, 2014 16:11:16

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

транслитирование.

Всё уже написано. Мной.
https://pypi.python.org/pypi/trans



Офлайн

#10 Март 26, 2014 07:18:32

lecksys
Зарегистрирован: 2013-12-03
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

транслитирование.

Да действительно крутая штука, спасибо. Но мне это было интересно с академической точки зрения - пощупать, посмотреть, т.к. я ещё только учусь

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version