我正在尝试编写一个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
这是怎么了?
答案 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))
?
在没有eval
或compile
或exec
的情况下,您无法处理生成的转义 strings ,但这正是出于您的目的而创建的功能。
如果您真的很喜欢字符串输入,int('A0', 16)
将为您提供数字值0xA0
(或int('A', 16) * 16
),而int('1F0{}{}'.format(suit_id, value_id), 16)
也适用于最接近的匹配项。