2015-09-11 41 views
0

我在我的python程序中遇到问题。在这个程序中,用户输入一个字符串,然后程序调用一个函数从unicode的信到最近的ASCII符号转换(例如秒 - > S 0 - > 0等),但我得到 TypeError: 'str' object does not support item assignmentTypeError:'str'对象不支持项目分配

代码:

__author__ = 'neo' 
ceviri = { 
    'ş':'s','Ş':'S', 
    'ğ':'g','Ğ':'G', 
    'ı':'i','İ':'I', 
    'ü':'u','Ü':'U', 
    'ö':'o','Ö':'O' 
} 
def karakterDegistir(x): 
    p = x[:] 
    y = sorted(ceviri.keys()) 
    u = 0 
    while u < len(y): 
     if p[u] in y: 
     p[u] = ceviri[p[u]] 
     u = u + 1 
    return p 
print(karakterDegistir('şeker')) 
+3

Python不允许你修改一个字符串。你需要用翻译建立一个新的字符串,并返回它。 – Barmar

+0

可能的重复[如何在Python中修改字符串中的单个字符?](http://stackoverflow.com/questions/3861026/how-do-i-modify-a-single-character-in-a -string-in-python) –

回答

1

除了Barmar的关于Python不允许你修改字符串的地方,你通过你的输入数组的副本迭代评论,但你会高达y的长度(列表的键),而不是p的长度。

一个更Python的方式将 return ''.join([ceviri.get(c,c) for c in x])

(编辑:感谢代尔),由于我编辑: 为了澄清:此经过x中每个字母,如果这封信是您的ceviri字典,返回值,否则使用原来的字母。这将创建一个字母列表'''.join将所有字母组合成一个字符串。

+0

小细节:'return''.join([ceviri.get(c,c)for c in x])' – Dair

相关问题