利用位运算知识,俱乐部一共有32盏灯,设计一个灯光控制系统,共有4部分区域,其中台球部8盏,桌游区8盏,酒吧区8盏,休息区8盏,要求满足以下功能: 能独立控制每一盏灯 能一次性打开或关闭一个区域的全部灯光 能获取各个区域的灯开关情况 能一次性打开所有关闭的,关闭打开的灯
时间: 2024-04-30 14:21:57 浏览: 17
可以使用一个32位的整数来表示这32盏灯的开关状态,其中第i位表示第i盏灯的开关状态,0表示关闭,1表示打开。下面是实现上述功能的代码示例:
```python
class LightControl:
def __init__(self):
self.lights = 0 # 初始状态所有灯都关闭
def turn_on(self, light_idx):
# 打开指定编号的灯
self.lights |= (1 << light_idx)
def turn_off(self, light_idx):
# 关闭指定编号的灯
self.lights &= ~(1 << light_idx)
def toggle(self, light_idx):
# 切换指定编号的灯的状态
self.lights ^= (1 << light_idx)
def turn_on_area(self, area):
# 打开某个区域的所有灯
if area == '台球区':
self.lights |= 0b11111111000000000000000000000000
elif area == '桌游区':
self.lights |= 0b00000000111111110000000000000000
elif area == '酒吧区':
self.lights |= 0b00000000000000001111111100000000
elif area == '休息区':
self.lights |= 0b00000000000000000000000011111111
def turn_off_area(self, area):
# 关闭某个区域的所有灯
if area == '台球区':
self.lights &= 0b00000000111111111111111111111111
elif area == '桌游区':
self.lights &= 0b11111111000000001111111111111111
elif area == '酒吧区':
self.lights &= 0b11111111111111110000000011111111
elif area == '休息区':
self.lights &= 0b11111111111111111111111100000000
def get_area_status(self, area):
# 获取某个区域的灯开关情况
if area == '台球区':
return (self.lights >> 24) & 0b11111111
elif area == '桌游区':
return (self.lights >> 16) & 0b11111111
elif area == '酒吧区':
return (self.lights >> 8) & 0b11111111
elif area == '休息区':
return self.lights & 0b11111111
def turn_on_all(self):
# 打开所有关闭的灯
self.lights = 0b11111111111111111111111111111111
def turn_off_all(self):
# 关闭所有打开的灯
self.lights = 0b00000000000000000000000000000000
```
在上述代码中,我们使用了位运算来实现对单个灯的控制、对整个区域的控制以及对所有灯的控制。其中,左移操作 `<<` 和右移操作 `>>` 用于将某一位移动到最高或最低位,按位或操作 `|` 和按位与操作 `&` 用于设置或获取某一位的值,按位取反操作 `~` 和异或操作 `^` 用于切换某一位的值。具体可以参考 Python 的位运算符文档。