2015-09-11 103 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

相關問題