如何用Python3编写一个程序,将用拉丁语编写的名称转换为用俄语西里尔文编写的名称?

2024-05-20 12:11:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用Python3编写一个程序,以拉丁字母表中的用户名作为输入,然后将拉丁字符音译为俄语西里尔字母,然后打印出来。我已经将每个拉丁字母与俄文字母相等,然后我考虑使用if语句对每个字符执行转换,但当然没有成功,因为当用户键入多个字符时,程序返回else语句。我需要程序接受输入字符串并相应地一个接一个地打印对应字母。如果用户键入“David”,则程序应打印Баааааа”

这是我的搞笑代码:

A = "А"
B = "Б"
V = "В"
G = "Г"
D = "Д"
E = "Э"
YE = "Е"
YO = "Ё"
ZH = "Ж"
Z = "З"
I = "И"
Y = "Й"
K = "К"
L = "Л"
M = "М"
N = "Н"
O = "О"
P = "П"
R = "Р"
S = "С"
T = "Т"
U = "У"
F = "Ф"
H = "Х"
C = "Ц"
CH = "Ч"
SH = "Ш"
SHCH = "Щ"
YU = "Ю"
YA = "Я"
YY = "Ы"
a = "а"
b = "б"
v = "в"
g = "г"
d = "д"
e = "э"
ye = "е"
yo = "ё"
zh = "ж"
z = "з"
i = "и"
y = "й"
k = "к"
l = "л"
m = "м"
n = "н"
o = "о"
p = "п"
r = "р"
s = "с"
t = "т"
u = "у"
f = "ф"
h = "х"
c = "ц"
ch = "ч"
sh = "ш"
shch = "щ"
yy = "ы"
yu = "ю"
ya = "я"

print("Latin-to-Russian transliterator")
trans = input("Please enter your name: ")

if trans == "a":
   print(a)

elif trans == "b":
   print(b)
elif trans == "c":
   print(c)
else:
   print("sorry")

Tags: 字符串用户程序trans音译键入if字母
1条回答
网友
1楼 · 发布于 2024-05-20 12:11:32

将查找字典与正则表达式一起使用

lookup = dict(A = "А",
B = "Б",
V = "В",
G = "Г",
D = "Д",
E = "Э",
YE = "Е",
YO = "Ё",
ZH = "Ж",
Z = "З",
I = "И",
Y = "Й",
K = "К",
L = "Л",
M = "М",
N = "Н",
O = "О",
P = "П",
R = "Р",
S = "С",
T = "Т",
U = "У",
F = "Ф",
H = "Х",
C = "Ц",
CH = "Ч",
SH = "Ш",
SHCH = "Щ",
YU = "Ю",
YA = "Я",
YY = "Ы",
a = "а",
b = "б",
v = "в",
g = "г",
d = "д",
e = "э",
ye = "е",
yo = "ё",
zh = "ж",
z = "з",
i = "и",
y = "й",
k = "к",
l = "л",
m = "м",
n = "н",
o = "о",
p = "п",
r = "р",
s = "с",
t = "т",
u = "у",
f = "ф",
h = "х",
c = "ц",
ch = "ч",
sh = "ш",
shch = "щ",
yy = "ы",
yu = "ю",
ya = "я")

现在将键从最长到最短进行排序

sorted_keys = sorted(lookup.keys(),reversed=True)

对任何匹配项执行re.sub

result = re.sub("(%s)"%("|".join(sorted_keys)),
                # replacer function
                lambda m:lookup.get(m.group(1),m.group(1)),
                #input
                input("Enter Word: "))    
print(result)

通过从最长到最短排序,您将更喜欢较长的匹配,从而确保正确解释多字节字符

相关问题 更多 >