此程序应返回204和199,但返回0和1000。 我可以通过将main方法的第一行和第二行更改为:
来解决问题 FirstStrat = Defector()
SecondStrat = TitForTat()
为什么会发生这种情况?
无论我输入Defector
和TitForTat
的订单如何,我如何更改程序以使其有效?
答案 0 :(得分:1)
问题来自于您从类Strategy
定义变量的方式。通过这种方式定义它们:
class Strategy(object):
turn_number = 1
moves = []
opponent_moves = []
total_points = 0
opponent_points = 0
所有这些变量将由类Strategy
(或其任何子类)的所有实例共享。这使得self.opponent_moves
不会保存来自对手的移动,它将保存来自两个玩家的移动(因为他们在每个调用方法update
时共享此变量),因此方法{{来自get_move
的1}}将返回TitForTat
的最后一次移动,而不是来自对手的最后一次移动。
要解决您的问题,只需将它们定义为SecondStrat
:
__init__
它会正常工作。