可以在python 3.7中以编程方式定义Unicode字符吗?

时间:2019-07-18 06:46:08

标签: python unicode python-3.x

我正在尝试编写一个python 3.7函数,该函数打印纸牌的Unicode字符(使用wikipedia作为参考)。

每个Unicode字符都是一个可以表示为'\U1F0{SUIT_ID}{VALUE_ID}'的字符串。例如,'\U1F0A1'是黑桃the的王牌。

我的代码是

def print_card(suit_id, value_id):
    print(f'\U1F0{suit_id}{value_id}')

理论上,命令print_card('A', '1')随后将打印出黑桃A。命令print_card('C', 'D')将打印出钻石的女王。

但是,尝试定义此函数会导致以下错误:

  File "<ipython-input-32-b19e42821b25>", line 2
    print(f'\U1F0{suit_id}{value_id}')
         ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated \UXXXXXXXX escape

这是怎么了?

1 个答案:

答案 0 :(得分:4)

chr function creates a character from a numeric code point

>>> suit_id = 0xA0
>>> value_id = 1
>>> print(chr(0x1F000 + suit_id + value_id))
?

在没有evalcompileexec的情况下,您无法处理生成的转义 strings ,但这正是出于您的目的而创建的功能。

如果您真的很喜欢字符串输入,int('A0', 16)将为您提供数字值0xA0(或int('A', 16) * 16),而int('1F0{}{}'.format(suit_id, value_id), 16)也适用于最接近的匹配项。