我在python脚本中使用一个5位的位字段来跟踪报警系统的状态。例如,MSB中的0表示“未待命”,而MSB中的1表示“待命”,等等。这使得前一状态和当前状态上的XOR能够快速生成已更改的位:
previous = 0b11001
current = 0b10011
delta = current ^ previous # delta = 0b01010
我的代码中的下一步是基于delta
生成一个描述更改内容的字符串。有10种可能的状态和描述。我想知道创建这个字符串的最佳方法。我下面的工作,但似乎笨重:
statusKey = {
0: ' * Disarmed',
10: ' * No Alarm',
20: ' * No Fire',
30: ' * No Check',
40: ' * No AC',
1: ' * Armed',
11: ' * Alarm',
21: ' * Fire',
31: ' * Check',
41: ' * AC'
}
alert = ''
for i in range (5):
if (0b10000 & (delta << i)):
alert = ''.join((alert,statusKey[(10*i) + (0b01 & (current >> (4-i)))]))
#alert = 'No Alarm * Check'
有没有更好的方法来构造statusKey
中的数据?
有没有更好的方法基于这个结构生成alert
字符串?你知道吗
尽量少用逐位的数学运算符,因为这样会使代码非常不可读。一个简单的列表理解是你真正需要的。另外,您希望位状态数据结构是自描述性的。第一次读它的人应该立即理解其中的逻辑。你知道吗
相关问题 更多 >
编程相关推荐