返回负值

2024-09-28 03:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个函数,其中我有两个玩家,他们的收益取决于他们的行动。你知道吗

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”。你知道吗


Tags: and函数gamereturnifdefactionelif
3条回答

你的意思是AlwaysDefect函数返回'd'还是'b'?你知道吗

既然它返回了'd',您就不必使用任何if语句,而且您也没有payoff1或payoff2的定义

也是一个打字错误:payyoff2->;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 # or any other value
     payoff2 = 0 # or any other value
  return payoff1, payoff2

函数调用中的错误太多。使用字典:

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

如果操作是c或d,则if语句无法捕获,这将导致payoff1和payoff2未初始化。你知道吗

相关问题 更多 >

    热门问题