2015-09-11 6 views
0

У меня проблема в моей программе python. В этой программе пользователь вводит строку, а затем программа вызывает функцию для преобразования из юникода письма к символу ближайшего ASCII (например, S -> S ö -> о и т.д.), но я получаю TypeError: 'str' object does not support item assignmentТипError: объект '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 в о питоне не позволяя изменять строки в месте, вы перебор копии входного массива, но вы собираетесь до длины у (ваш список ключей), а не длина p.

Гораздо более вещим способ будет return ''.join([ceviri.get(c,c) for c in x])

(Edit: благодаря Dair), и с тех пор я редактирование: Для уточнения: это проходит через каждую букву в й, и если это письмо в вашем ceviri dictionary, вернуть значение, в противном случае использовать оригинальную букву. Это создает список букв '' '.join объединяет все буквы в строку.

+0

Маленькая деталь: 'return '' .join ([ceviri.get (c, c) для c в x])' – Dair

Смежные вопросы