为了账号安全,请及时绑定邮箱和手机立即绑定

返回负值。

返回负值。

绝地无双 2021-07-27 08:44:36
我正在尝试实现一个功能,其中我有 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 actiondef AlwaysDefect():  return "b"action1 = TitForTat (0,'c')action2 = AlwaysDefect()game (action1,action2)这将返回一个错误:local variable 'payoff1' referenced before assignment我试图将它们初始化为 "0" ,但相同。如果我有所有正值,那么确切的函数效果很好。编辑:很抱歉打字错误。并且函数 AlwaysDefect() 返回“b”和“d”。
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

您的函数调用中有太多的箔条。使用字典:


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))


查看完整回答
反对 回复 2021-08-03
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-08-03
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您应该将两个收益都初始化为某个东西,因为如果您的行为不属于特定情况,您最终什么也不会返回。因此,添加一个默认值 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

从技术上讲,这应该可以防止您出现该参考错误。


查看完整回答
反对 回复 2021-08-03
  • 3 回答
  • 0 关注
  • 293 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号