Не могу создать список юникод-символов

Рейтинг: 0Ответов: 1Опубликовано: 12.04.2023

Нужно создать список строк типа: '\U0001F000'

smiles = []
for i in range(10):
    smiles.append(f'\U0001F{random.randint(600, 900)}')

python даёт ошибку

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-6: truncated \UXXXXXXXX escape

Буду благодарен, если расскажите как это сделать!

Конкатенация и срезы не помогли!

Ответы

▲ 7Принят

Сформировать юникодный символ именно таким образом через подстановку в \U... не получится (можно в два этапа, но проще через chr, см. ниже).

Можно использовать просто функцию chr, при передаче в нее кода символа будет формироваться соответствующий символ, т.е. chr(0x1F000) == "\U0001F000":

import random

random_part = 0xabc  # Заменить на random_part = random.randint(0x600, 0x900)

char = chr(0x1F000 + random_part)
print(repr(char))
print(char)

Вывод:

'\U0001fabc'
🪼

Ну и если нужен диапазон от \U0001F600 до \U0001F900, то диапазон случайных чисел нужно задать в шестнадцатеричном виде: random.randint(0x600, 0x900) (т.к. код 0001F600 - шестнадцатеричный, 600 в нем - не десятичное число "шестьсот", а шестнадцатеричное число 0x600).