Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2022 22:19:24

snakeous
Зарегистрирован: 2021-04-25
Сообщения: 9
Репутация: +  0  -
Профиль  

bytearray slice - Юникод и кириллица

 #!/usr/bin/env python3
def func(string, eslice, replace):
    print(f"STRING: '{string}' SLICE: '{string[eslice[0]:eslice[1]]}'") # debug
    encoding = 'utf-8'
    b = bytearray(string, encoding)
    b[eslice[0]:eslice[1]] = replace.encode(encoding)
    return b.decode(encoding)
assert func('a test', (2,6), 'abcd') == 'a abcd'
assert func('b тест', (2,6), 'абвгде') == 'b абвгде'
assert func('a qwer a', (2,6), 'abcdef') == 'a abcdef a'
assert func('c qwer абвг c', (2,6), 'фываолдж') == 'c фываолдж абвг c'
assert func('⣿ abcd тест ⣿', (2,6), 'олдж') == '⣿ олдж тест ⣿'

Если указать encoding = ‘cp1251’, то проходятся все ассерты, кроме последнего
Как изменить функцию так, чтобы проходились все ассерты?



——————————————————————
Я новичок в Python, не судите строго :)

Офлайн

#2 Апрель 15, 2022 22:37:59

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

bytearray slice - Юникод и кириллица

snakeous
Как изменить функцию так, чтобы проходились все ассерты?
 def func(string, eslice, replace):
    return string[:eslice[0]] + replace + string[eslice[1]:]
 
assert func('a test', (2,6), 'abcd') == 'a abcd'
assert func('b тест', (2,6), 'абвгде') == 'b абвгде'
assert func('a qwer a', (2,6), 'abcdef') == 'a abcdef a'
assert func('c qwer абвг c', (2,6), 'фываолдж') == 'c фываолдж абвг c'
assert func('⣿ abcd тест ⣿', (2,6), 'олдж') == '⣿ олдж тест ⣿'

Отредактировано xam1816 (Апрель 15, 2022 22:46:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version