3

想用对应的 ASCII 替换单词中的所有法语字母。

letters = [['é', 'à'], ['è', 'ù'], ['â', 'ê'], ['î', 'ô'], ['û', 'ç']]

for x in letters:
   for a in x:
        a = a.replace('é', 'e')
        a = a.replace('à', 'a')
        a = a.replace('è', 'e')
        a = a.replace('ù', 'u')
        a = a.replace('â', 'a')
        a = a.replace('ê', 'e')
        a = a.replace('î', 'i')
        a = a.replace('ô', 'o')
        a = a.replace('û', 'u')
        a = a.replace('ç', 'c')

print letters[0][0]

但是,此代码会打印é。我怎样才能使这项工作?

4

5 回答 5

30

我可以建议你考虑使用翻译表

translationTable = str.maketrans("éàèùâêîôûç", "eaeuaeiouc")

test = "Héllô Càèùverâêt Jîôûç"
test = test.translate(translationTable)
print(test)

将打印Hello Caeuveraet Jiouc。抱歉我法语不好。

于 2016-12-06T21:19:55.967 回答
18

您也可以使用unidecode. 安装它:pip install unidecode
然后做:

from unidecode import unidecode

s = "Héllô Càèùverâêt Jîôûç ïîäüë"
s = unidecode(s)
print(s)  # Hello Caeuveraet Jiouc iiaue

结果将是相同的字符串,但法语字符将被转换为它们的 ASCII 等价物:Hello Caeuveraet Jiouc iiaue

于 2018-04-05T14:19:24.240 回答
3

replace函数返回替换字符的字符串。

在您的代码中,您不存储此返回值。

循环中的行应该是a = a.replace('é', 'e').

您还需要存储该输出,以便最终打印它。

e:这篇文章解释了如何访问循环中的变量

于 2016-12-06T21:11:03.173 回答
1

这是另一个解决方案,使用名为unicodedata.

在unicode结构中,像'ô'这样的字符实际上是一个复合字符,由字符'o'和另一个称为' COMBINING GRAVE ACCENT '的字符组成,基本上是'̀'。使用 中的方法decompositionunicodedata可以得到这两部分的 unicodes(十六进制)。

>>> import unicodedata as ud
>>> ud.decomposition('ù')
'0075 0300'
>>> chr(0x0075)
'u'
>>> >>> chr(0x0300)
'̀'

因此,要从 'ù' 中检索 'u',我们可以先进行字符串拆分,然后使用内置int函数进行转换(请参阅线程将十六进制字符串转换为整数),然后使用chr功能。

import unicodedata as ud

def get_ascii_char(c):
    s = ud.decomposition(c)
    if s == '': # for an indecomposable character, it returns ''
        return c
    code = int('0x' + s.split()[0], 0)
    return chr(code)

我是 python 中的 unicode 表示和实用程序的新手。如果有人对改进这段代码有任何建议,我会很高兴学习!

干杯!

于 2018-09-17T02:55:04.323 回答
1

我可能为时已晚,但它可能会帮助寻找相同答案的人。虽然我是 Python 新手,但我会这样处理:

letterXchange = {'à':'a', 'â':'a', 'ä':'a', 'é':'e', 'è':'e', 'ê':'e', 'ë':'e',
    'î':'i', 'ï':'i', 'ô':'o', 'ö':'o', 'ù':'u', 'û':'u', 'ü':'u', 'ç':'c'}
text = input() # Replace it with the string in your code.
for item in list(text):
    if item in letterXchange:
        text = text.replace(item,letterXchange.get(str(item)))
    else:
        pass
print (text)
于 2020-11-20T20:12:31.343 回答