解析车间里的阀门状态 (高教社,《Python编程基础及应用》习题5-4)

题目

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值