我可以从我写的内容开始:
for player in self.players:
player.shot()
if self.players[0].best > self.players[1].best and self.players[2].best:
self.players[0].wins += 1
print ("Winner: ", self.players[0].name, "\nResult: ", self.players[0].best)
elif self.players[1].best > self.players[0].best and self.players[2].best:
self.players[1].wins+=1
print("Winner: ", self.players[1].name, "\nResult: ", self.players[1].best)
我知道如何创建循环,但在比较对象值时我不知道如何使用它。 这只有在我知道有多少玩家的情况下才有效,如果有4名玩家,上面的代码就没用了。 我如何在一个返回self.best值中最高值的循环中写这个?
答案 0 :(得分:4)
Pythonic的做法是:
bestOfAll = max(p.best for p in self.players)
bestPlayers = [p for p in self.players if p.best == bestOfAll]
if len(bestPlayers) == 1:
bestPlayer = bestPlayers[0]
bestPlayer.wins += 1
print ("Winner: ", bestPlayer.name, "\nResult: ", bestPlayer.best)
elif len(bestPlayers) > 1:
# More than one player with best score. Resolve a tie?
第一行生成best
self.players
属性的列表,然后找到最大值。下一行生成一个其得分与该最佳得分相匹配的玩家列表。程序的其余部分打印结果。确实没有理由搞乱列表索引。
答案 1 :(得分:0)
如果您希望获得最高best
的玩家,可以像这样使用max()
:
bestPlayer = max(self.players, key = lambda p: p.best)
bestPlayer.wins += 1
print ("Winner: ", bestPlayer.name, "\nResult: ", bestPlayer.best)
但这并不能很好地处理关系。如果两个以上的玩家具有相同的best
,则会选择其中一个。
如果您希望获得best
最高的所有玩家,可以使用map()
和filter()
,如下所示:
best = max(map(lambda p: p.best, self.players))
bestPlayers = filter(lambda p: p.best == best, self.players)
答案 2 :(得分:0)
我知道如何创建循环,但在比较对象值时我不知道如何使用它。
循环与问题无关,与比较对象的任务无关。
如果self.players [0] .best> self.players [1] .best and self.players [2] .best
这里的逻辑是错误的:这不是自然语言AND,而是逻辑语言。你所描述的是:“确定self.players[1].best
和self.players[2].best
是否都为真(非零),然后检查self.players[0].best
是否大于真/假值(1为真,0,为假)“。要进行两种比较,您必须重复比较逻辑。
幸运的是,你不需要或不想做那样的事情。
我如何在返回self.best值中最高值的循环中写这个?
你没有。
你说“我想要self.best值中的最高值”,然后使用内置的Python函数max
(“maximum”的缩写,上下文中的“最高”的另一个词)。其他答案解释了如何。
答案 3 :(得分:-1)
int playerno
int max = 0
foreach player in self.players
if(self.players[player].best > max)
{
playerno = player
max = self.players[player]
}
self.players[playerno].wins++
print ("Winner: ", self.players[playerno].name, "\nResult: ", self.players[playerno].best)
语法可能有些不正确,但您应该参与逻辑。