如何基于布尔变量反转对列表成员资格的检查?
我正在寻找一种简化以下代码的方法:
# variables: `is_allowed:boolean`, `action:string` and `allowed_actions:list of strings`
if is_allowed:
if action not in allowed_actions:
print(r'{action} must be allowed!')
else:
if action in allowed_actions:
print(r'{action} must NOT be allowed!')
我觉得必须有一种避免两次进行检查的方法,一次是对in
的检查,另一次是对not in
的检查,但是找不到一种更详细的方法。
答案 0 :(得分:2)
将测试结果与is_allowed
比较。然后使用is_allowed
整理正确的错误消息。
if (action in allowed_actions) != is_allowed:
print(action, "must" if is_allowed else "must NOT", "be allowed!")
答案 1 :(得分:1)
考虑到特定代码的结构方式,我认为唯一可以做的改进就是将action in allowed_actions
存储在变量中:
present = action in allowed_actions
if is_allowed:
if not present:
print(r'{action} must be allowed!')
else:
if present:
print(r'{action} must NOT be allowed!')