-2

我对python很陌生。我需要有人帮助我在 python 中运行一个简单的脚本。我有一个我附上的代码。我是定义函数和运行 if else 函数的新手,所以我需要有关如何使以下函数工作的帮助?

我不知道是否有必要定义不同的函数,我知道我在下面的代码中的很多行都错了。我需要有人帮我修改它

def values():
    p1g = float(input("Player 1 Utility for green"))
    p2r = float(input("Player 2 ulitity for red"))
    p1r = float(input("Player 1 utility for red"))
    p2g = float(input("Player 2 utility for green"))
    d1 = float(input("Player 1 Disagreement point"))
    d2 = float (input("Player 2 Disagreement point"))

    return [p1g,p2r,p14,p2g,d1,d2]

def slope_int(p1g,p2r,p1r,p2g):
   """Returns the slope and intercept of the payoff/utilities"""
   m = (p2g-p2r)/(p1r-p1g)
   c = p2r - ((p2g-p2r)/(p1r-p1g))* p1g
   return [m,c]

def nash_bargaining_x(p1g,p2r,p1r,p2g,d1,d2,m,c):
    return -(p2r -d2 - m*p1g - m*d1)/2*m

def nash_bargaining_y(p1g,p2r,p1r,p2g,d1,d2,m,c):
    return -(p2r -d2 - m*p1g - m*d1) + c # where c = p1g-p2r*((p2g-p2r)/(p1r-p1g)

solution = [nash_bargaining_x(),nash_bargaining_y()]
print (solution)
if abs.(p1g-nash_bargaining_x) > (p1r-nash_bargaining_x):
   solution = "P1 has Red"
else:
   solution = "P2 has red"

期望程序计算脚本中列出的所有值并返回用户输入变量所需的值。

4

2 回答 2

0

此代码中不需要定义函数。但是,如果您确实定义了这样的函数:

def foo():
   …

然后你必须再次调用它以使其像这样运行:

foo()

如果您不这样做,则该功能将不会运行。

取值函数,我会做

p1g,p2r,p14,p2g,d1,d2 = values()

在我调用 slope_int() 之前。此外,slope_int() 需要有返回选项卡,与 nash_x 和 nash_y 相同。然后,我会在解决方案之前按顺序调用所有内容,如下所示:

p1g,p2r,p14,p2g,d1,d2 = values()
m,c = slope_int(p1g,p2r,p1r,p2g)
solution = [nash_bargaining_x(),nash_bargaining_y()]
print(solution)
if abs.(p1g-nash_bargaining_x) > (p1r-nash_bargaining_x):
    solution = "P1 has Red"
else:
    solution = "P2 has red"
print(solution)

我想这就是你要找的

但是,我建议不要为此脚本定义函数。如果函数将被多次调用,则应定义它们。

于 2019-07-10T16:51:11.510 回答
0

好的,让我们分解一下,因为您在编写功能代码时遇到了许多问题。首先,你有一个很好的函数values()来获取用户的所有输入,但你从来没有使用过这个函数。您将需要调用此函数并保存其中的所有输出,如下所示:

def values():

    p1g = float(input("Player 1 Utility for green"))
    p2r = float(input("Player 2 ulitity for red"))
    p1r = float(input("Player 1 utility for red"))
    p2g = float(input("Player 2 utility for green"))
    d1 = float(input("Player 1 Disagreement point"))
    d2 = float (input("Player 2 Disagreement point"))

    return [p1g,p2r,p14,p2g,d1,d2]


[p1g,p2r,p14,p2g,d1,d2] = values()

现在,您可以在整个代码中使用来自用户的变量。之后,您的其他函数定义看起来不错,尽管它们的缩进很差(但这可能只是您没有使用 Stack Overflow 格式):

def slope_int(p1g,p2r,p1r,p2g):
       """Returns the slope and intercept of the payoff/utilities"""
       m = (p2g-p2r)/(p1r-p1g)
       c = p2r - ((p2g-p2r)/(p1r-p1g))* p1g

    return [m,c]

def nash_bargaining_x(p1g,p2r,p1r,p2g,d1,d2,m,c):

    return -(p2r -d2 - m*p1g - m*d1)/2*m

def nash_bargaining_y(p1g,p2r,p1r,p2g,d1,d2,m,c):
    return -(p2r -d2 - m*p1g - m*d1) + c # where c = p1g-p2r*((p2g-p2r)/(p1r-p1g)

即使您在上述函数定义和输入中将变量命名为相同,您也不能只调用这些函数并期望它们具有您values()函数中的变量。您必须明确发送您希望这些函数用作参数的数字,如下所示:

solution = [nash_bargaining_x(p1g,p2r,p1r,p2g,d1,d2,m,c),nash_bargaining_y(p1g,p2r,p1r,p2g,d1,d2,m,c)]
print (solution)

现在您的解决方案应该如您所愿,最后一个注意事项是abs绝对值的函数不会被调用,abs.()而是abs()像这样:

 if abs(p1g-nash_bargaining_x) > abs(p1r-nash_bargaining_x)
    solution = "P1 has Red"
    else
    solution = "P2 has red"
于 2019-07-10T17:12:16.437 回答