第一张海报:)
我正在创建一个简单的高尔夫风格的游戏,几个球员轮流投篮。在每一次射击之后,玩家的队列被重新评估,以知道下一个轮到谁了。你知道吗
离目标最远的玩家下一个。你知道吗
下面对所使用的代码进行了简化
class User:
def __init__(self):
self.position = (0.0, 0.0)
def distance_to_goal(self, goal_coord):
ax = ((goal_coord[0] - self.position[0]) ** 2)
bx = ((goal_coord[1] - self.position[1]) ** 2)
return math.sqrt(ax + bx)
Player1 = User() #(same for Player2, Player3)
TheGame.turn = [Player1, Player2, Player3]
TheGame.hole.goal_position = (0.0, 40.0)
当一个球员投篮后,他们的位置移动了,我想重新排列名单。我尝试了以下两种方法,但没有成功:
sorted(TheGame.turn, key = distance_to_goal(TheGame.hole.goal_position))
sorted(TheGame.turn, key = TheGame.turn.distance_to_goal(TheGame.hole.goal_position))
我在跟踪这个链接http://www.thegeekstuff.com/2014/06/python-sorted/ 这表明我应该使用一个定义作为排序方法。你知道吗
这是可行的,但我想知道是否有一个方法可以使用sort来引用类的定义?你知道吗
谢谢!你知道吗
@安迪的回答很好。你知道吗
使用lambda函数是另一种方法。你知道吗
当事情变得比方法调用更复杂时,Lambda函数非常方便。你知道吗
你可能在找
operator.methodcaller
。你知道吗例如:
https://docs.python.org/2/library/operator.html#operator.methodcaller
我好像有点晚了。为了添加到混合物中:
正如tdhip所述,lambda表达式是面包和黄油的抽象,当您需要从任意函数中获得收益时,它使事情变得非常简单。另外,由于您可能希望
turn
列表具有一点连续性,因此list.sort()
用于就地修改列表。User.__repr__
是为了测试时的清晰性而重新实现的。你知道吗相关问题 更多 >
编程相关推荐