Skip to main content
 首页 » 编程设计

python之如果列表中的字符串因变音符号而失败

2025年05月04日30小虾米

因为我是法国人,所以我正在尝试制作一个小功能,可以在国家/地区名称之前添加好的定冠词。除了少数以变音符号开头的国家外,我没问题。这是我的代码:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
def article(nomPays): 
    voyelles = ['A','E','É','I','O','U','Y'] 
    if nomPays == 'Mexique': 
        return 'du' 
    elif nomPays[0] in voyelles: 
        return 'de l\'' 
    elif nomPays[-1] == 'e':#signe négatif pour compter à partir de la dernière lettre 
        return 'de la' 
    else: 
        return 'du' 
 
print article('Érythrée') 

如果我输入 Allemagne 而不是 Érythrée,行为是正确的:它返回“de l”。但 Érythrée 返回“de la”。这意味着我的函数无法将字符 É 识别为 voyelles 列表的一部分。

谁能解释一下为什么以及如何解决这个问题?

请您参考如下方法:

问题是您在 Python 2 中使用 str,其中 str 是一个字节序列,因此 nomPays[0]将给出字符串的第一个字节,而不是第一个字符。在单字节编码中,这不是问题,但对于像 UTF-8 这样的多字节编码,“Érythrée”的第一个字节是一个前导字节,而不是整个字符“É”。

您需要更改为使用 unicode 来抓取第一个字符:

firstChar = unicode(nomPays, 'UTF-8')[0].encode('UTF-8') 

实际上,使用 startswith 可能更容易:

if any(nomPays.startswith(voyelle) for voyelle in voyelles): 

或者,您可以在整个应用程序中使用 unicode,或者切换到 Python 3,所有这些都得到了更好的处理。