题目
CPU通过一个8位IO口读取了1个字节的内容,现在存储在一个bytes对象里,示例: b'\x45';这8位分别代表了车间里8个阀门的当前状态,1表示该阀门通,0表示该阀门断。请设计一个程序,从bytes对象解析出8个阀门的当前状态,True表示通,False表示断。这8个状态应组织在一个列表中,其中,第i个元素对应输入字节的第i位。
输入格式:
形如 b'\x45'的单字节bytes。(注意是16进制)
输出格式:
包含8个布尔值的列表。其中,第i个元素代表输入字节的第i位(从低到高分别是0 ~ 7位)。
[True, False, True, False, False, False, True, False]
输入样例:
b'\x01'
输出样例:
[True, False, False, False, False, False, False, False]
解题
题目代码:
v = eval(input())
v = v[0]
r = []
for i in range(8):
x = True if v & (0x01 << i) else False
r.append(x)
print(r)
代码解释:
第一行是从用户键盘中读入一个字符串表达式并返回其运算值
第二行是取出bytes类型序列中的第一个元素(本题中仅输入一个序列元素)
第三行创建一个新列表
第四行使用for循环遍历range(8)
第五行使用条件判断对x进行赋值
第六行使用append()方法将x的加入r列表中
第七行输出r列表
代码内相关内容解释:
eval()函数
执行字符串表达式并返回其值
字符串表达式可以包含变量、函数调用、运算符和其他Python语法元素
题目代码指将输入的bytes类型
input()函数
从键盘输入一个字符串
for循环
在给出的生成者对象范围内进行遍历循环
if else语句
本题中x = True if v & (0x01 << i) else False
如果v & (0x01 << i)为真,则x的值为True,反之为False
<< 左移
本题中0x01 << i是将1左移i个位置,左边多出位舍弃,右边空缺位补0
& 按位与
两整数二进制相同位置同时为1时才取1,其余情况均取0
append()方法
在列表后添加一个元素
总结
本题中需根据用户输入的bytes值进行操作,v[0]将其转化成int,通过0x01左移和&来判断bytes类型所表达的int各个位置的0和1情况,即表示出车间8个阀门的开关情况True或False