我有类字符的对象列表wchich有x和y属性。我有这个功能:
def printBoard(self):
for y, row in enumerate(self.rows):
for x, char in enumerate(row):
if y == self.player.y and x == self.player.x:
print(self.player.char, end='')
else:
print(char, end='')
print()
它将游戏板打印到控制台。如果实际光标x,y等于玩家的x和y,则打印玩家的char。
我想遍历对象列表,而不仅仅是一个玩家实例
self.objects=[Character(x=0,y=2,char="O"), Character(x=2, y=5,char="Q")]
怎么做?我已经阅读了一些关于理解的内容,但这对我来说是一种黑魔法。
所以我的问题是:如何从单个if语句中检查列表中的任何对象的值是否等于变量?
好的,我做到了,但是这个解决方案很丑陋:
def printBoard(self):
for y, row in enumerate(self.rows):
#print("Y: ",y,end='')
for x, char in enumerate(row):
#print(',',x,end='')
try:
print(self.whatObjectIsOnGivenXY(x, y).char, end='')
except AttributeError:
print(char,end='')
print()
def whatObjectIsOnGivenXY(self,x1,y1):
for y, row in enumerate(self.rows):
for x, char in enumerate(row):
if (x, y) == (x1, y1):
for gameObject in self.objects:
if (gameObject.x, gameObject.y) == (x1,y1):
return gameObject
return None
有没有更好的解决方案?
答案 0 :(得分:0)
使用列表理解:
def equalCoordinates():
matches = [i for i in my_list if (i.x, i.y) == mouse.pos]
return matches
答案 1 :(得分:0)
self.objects=[o for o in [Character(x=0,y=2,char="O"), Character(x=2, y=5,char="Q")] if o.x == 2 and o.y == 5 ]
将列表中的第二个对象分配给self.objects。
def whatObjectIsOnGivenXY(self,x1,y1):
for y, row in enumerate(self.rows):
for x in range(len(row)):
if (x, y) == (x1, y1):
return [gameObject for gameObject in self.objects if (gameObject.x, gameObject.y)==(x,y)]
return None
现在你得到了对象列表。