2016-07-26 3 views
-1

Прежде чем читать этот вопрос, я хотел бы опубликовать отказ от ответственности.Изменение символа в строке в python

Я читал, что у нас есть функции, которые могут непосредственно заменить символ в строке (string.replace), я просто хочу попробовать ручной метод для этого.

Вот код, который я только что написал.

string = bytearray("abc'defgh",'utf-8') 

for value in range(0,9): 
    if string[value]=='h' or string[value]=='c': 
     string[value]=='i' 
    else: 
     print('''Word's are not the same''') 


print(string.decode("utf-8")) 

Я хотел бы также, как люди которые дают мне ответ также объяснить немного о ByteArray(), как я только что видел эту функцию и я пытаюсь его.

Спасибо!

+4

'строка [значение] == 'i'' ->' строка [значение] =' i'' –

+2

вы не сказали, что проблема была. – polku

+0

Рассмотрите возможность использования метода 'translate'. Это намного быстрее, чем это делается вручную: 'text =" abc'defgh "; text.translate ({ord ('h'): 'i', ord ('c'): 'i'}) -> "abi'defgi" ' – Bakuriu

ответ

0

Как уже упоминалось, есть более эффективные способы сделать это, но я думаю, что это имеет смысл в качестве учебного упражнения, чтобы изучить, как работает bytearray.

Тесты if никогда не будут успешными. Эти тесты предполагают, что bytearray представляет собой массив строк с одним символом, но это неверно. A bytearray представляет собой массив из целых чисел, поэтому ваши тесты должны сравнивать элементы в string с целыми числами. Вы можете сделать это с использованием реальных целых чисел, но удобнее использовать тест in с объектом bytes. И когда вы делаете замену вам нужно поставить целое число, или вы получите эту ошибку:

TypeError: an integer is required 

Вот новая версия кода. Я изменил имя string на arr, потому что это не строка, поэтому вызов string сбивает с толку.

Я также изменил цикл for, чтобы использовать функцию enumerate, которая выполняет итерацию по итерируемому объекту, давая пары (индекс, элемент).

arr = bytearray("abc'defgh", 'utf-8') 

replacement = ord('i') 
for i, v in enumerate(arr): 
    if v in b'ch': 
     arr[i] = replacement 
    print(v, chr(v)) 

print(arr) 
print(arr.decode('utf-8'))  

выход

97 a 
98 b 
99 c 
39 ' 
100 d 
101 e 
102 f 
103 g 
104 h 
bytearray(b"abi\'defgi") 
abi'defgi