返回负值。

我正在尝试实现一个功能,其中我有 2 个玩家,他们的收益取决于他们的行为。


def game(action1,action2):


  if action1 == "a" and action2 == "a":

     payoff1 = 1

     payoff2 = 1

  elif action1 == "a" and action2 == "b":

     payoff1 = -5

     payoff2 = 3

  elif action1 == "b" and action2 == "a":

     payoff1 = 3

     payoff2 = -5

  elif action1 == "b" and action2 == "b":

     payoff1 = 2

     payoff2 = 2

 return payoff1 , payoff2

然后我会有这个游戏的策略(示例):


def TitForTat(round_num, previous_action):

    if round_num == 0:

       action = "a"

    else:

       action = previous_action

  return action


def AlwaysDefect():

  return "b"


action1 = TitForTat (0,'c')

action2 = AlwaysDefect()


game (action1,action2)

这将返回一个错误:


local variable 'payoff1' referenced before assignment

我试图将它们初始化为 "0" ,但相同。如果我有所有正值,那么确切的函数效果很好。


编辑:


很抱歉打字错误。并且函数 AlwaysDefect() 返回“b”和“d”。


绝地无双
浏览 294回答 3
3回答

PIPIONE

您的函数调用中有太多的箔条。使用字典:def game(action1, action2):    payoffs = {        ('a', 'a'): (1, 1),  ('a', 'b'): (-5, 3),        ('b', 'a'): (3, -5), ('b', 'b'): (2, 2)    }    return payoffs.get((action1, action2), (0, 0))

德玛西亚99

如果操作是 c 或 d,则您的 if 语句不会被捕获,这会导致 payoff1 和 payoff2 未被初始化。

慕标琳琳

您应该将两个收益都初始化为某个东西,因为如果您的行为不属于特定情况,您最终什么也不会返回。因此,添加一个默认值 else 以便您的函数返回默认收益,以下代码应该可以帮助您解决问题。def game(action1,action2):    if action1 == "a" and action2 == "a":        payoff1 = 1        payoff2 = 1    elif action1 == "a" and action2 == "b":        payoff1 = -5        payoff2 = 3    elif action1 == "b" and action2 == "a":        payoff1 = 3        payoff2 = -5    elif action1 == "b" and action2 == "b":        payoff1 = 2        payoff2 = 2    else:        payoff1= 0        payoff2=0    return payoff1 , payoff2从技术上讲,这应该可以防止您出现该参考错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python