Return 负值
Return a negative value
我正在尝试实现一个函数,我有 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)
这returns一个错误:
local variable 'payoff1' referenced before assignment
我试着将它们初始化为 "0" ,但还是一样。
如果我有所有正值,那么确切的功能非常有效。
编辑:
很抱歉打字错误。和函数 AlwaysDefect() returns "b" 和 "d"。
如果动作是 c 或 d,则您的 if 语句无法捕捉,这会导致 payoff1 和 payoff2 未被初始化。
您的意思是 AlwaysDefect
函数 return 'd' 或 'b'?
现在它 return 'd',你不会进入你的 if 语句的 none 并且你没有 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))
您应该将两种收益都初始化为某种东西,因为如果您的行为不属于特定情况,那么您最终 return 什么都不会。所以添加一个默认的 else 以便你的函数 return 默认收益下面的代码应该可以帮助你解决你的问题。
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
从技术上讲,这应该可以防止您出现该引用错误。
这段代码有一些问题。
def game(action1,action2):
# 1. this if/else chain only handles input values of "a" or "b"
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
# 2. this is misspelt, so payoff2 never gets declared for input "b","b"
payyoff2 = 2
return payoff1 , payoff2
game
仅的代码适用于("a","b")
x("a","b")
中的输入,但没有错误检查,事实上您发布的代码 确实 提供超出该范围的输入
其中一个有效输入 ("b","b"
) 仍然会失败,因为您拼错了 "payoff"。较不冗长的代码出现拼写错误的机会较少,但实际上这是您应该在测试中发现的东西。
action1 = TitForTat (0,'c')
action2 = AlwaysDefect()
为什么不在将参数传递给函数之前 打印 参数?或者打印函数内的参数?或者进入pdb
里面的函数看一下?
您在此处将它们设置为 "a", "d"
,TitForTat
可以 生成 "c"
。 "c"
和 "d"
都没有在您的 game
函数中处理。
我正在尝试实现一个函数,我有 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)
这returns一个错误:
local variable 'payoff1' referenced before assignment
我试着将它们初始化为 "0" ,但还是一样。 如果我有所有正值,那么确切的功能非常有效。
编辑:
很抱歉打字错误。和函数 AlwaysDefect() returns "b" 和 "d"。
如果动作是 c 或 d,则您的 if 语句无法捕捉,这会导致 payoff1 和 payoff2 未被初始化。
您的意思是 AlwaysDefect
函数 return 'd' 或 'b'?
现在它 return 'd',你不会进入你的 if 语句的 none 并且你没有 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))
您应该将两种收益都初始化为某种东西,因为如果您的行为不属于特定情况,那么您最终 return 什么都不会。所以添加一个默认的 else 以便你的函数 return 默认收益下面的代码应该可以帮助你解决你的问题。
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
从技术上讲,这应该可以防止您出现该引用错误。
这段代码有一些问题。
def game(action1,action2):
# 1. this if/else chain only handles input values of "a" or "b"
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
# 2. this is misspelt, so payoff2 never gets declared for input "b","b"
payyoff2 = 2
return payoff1 , payoff2
game
仅的代码适用于("a","b")
x("a","b")
中的输入,但没有错误检查,事实上您发布的代码 确实 提供超出该范围的输入其中一个有效输入 (
"b","b"
) 仍然会失败,因为您拼错了 "payoff"。较不冗长的代码出现拼写错误的机会较少,但实际上这是您应该在测试中发现的东西。action1 = TitForTat (0,'c') action2 = AlwaysDefect()
为什么不在将参数传递给函数之前 打印 参数?或者打印函数内的参数?或者进入pdb
里面的函数看一下?
您在此处将它们设置为 "a", "d"
,TitForTat
可以 生成 "c"
。 "c"
和 "d"
都没有在您的 game
函数中处理。