我试图制作一个特定的棋盘游戏,并且在查找变量中是否存在某个属性时会遇到一些麻烦。" to"和"玩"
index_error_lst = []
if hasattr(play, 'player_no'):
index_error_lst.append(play.discard_pile_no)
if hasattr(play, 'player_no'):
index_error_lst.append(play.player_no)
if hasattr(to, 'discard_pile_no'):
index_error_lst.append(to.discard_pile_no)
if hasattr(to, 'build_pile_no'):
index_error_lst.append(to.build_pile_no)
if hasattr(to, 'player_no'):
index_error_lst.append(to.player_no)
if sorted(index_error_lst)[-1] > 3:
return 0
我觉得这种方法是一种非常冗长乏味的方法,用于检查类中是否存在属性。有没有办法通过属性进行for循环检查并追加那些存在并继续那些不属于那些?
最后两行用于检查index_error_lst并查看这些属性中的任何数字是否大于3(这是最大玩家数/最大卡堆数)并返回错误。
谢谢!
答案 0 :(得分:0)
功能性方法如何:
from itertools import product
# ...
index_error_lst = filter(
# Filter out not-found or None values
lambda value: value is not None,
map(
# Will receive tuple (obj, attr)
# Attempt to get the value or fallback to None
lambda attr: getattr(attr[0], attr[1], None),
# Cartesian product of its arguments
product(
(play, to),
('player_no', 'discard_pile_no', 'build_pile_no')
)
)
)
# ...
if any(value > 3 for value in index_error_lst):
return 0