我需要以下脚本在python中运行并给出结果?解决简单的数学问题

我需要以下脚本在python中运行并给出结果?解决简单的数学问题,python,traffic-simulation,Python,Traffic Simulation,我对python非常陌生。我需要有人帮我用python运行一个简单的脚本。我有一个附加的代码。我不熟悉定义函数和运行if-else函数,所以我需要关于如何使以下函数工作的帮助 我不知道是否有必要定义不同的函数,我知道下面代码中的许多行肯定是错的。我需要有人帮我修改它 def values(): p1g = float(input("Player 1 Utility for green")) p2r = float(input("Player 2 ulitity for red")

我对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"

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

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

def foo: … 然后,您必须再次调用它以使其像这样运行:

福 如果不这样做,则该函数将不会运行

使用values函数,我会

p1g、p2r、p14、p2g、d1、d2=数值 在我调用slope_int之前。 另外,slope_int需要有返回标签,与nash_x和nash_y一样。 然后,在解决方案之前,我会把一切都安排好,就像这样:

p1g、p2r、p14、p2g、d1、d2=数值 m、 c=斜率μintp1g,p2r,p1r,p2g 解决方案=[nash_讨价还价x,nash_讨价还价y] 印刷液 如果abs.p1g-nash\u讨价还价\u x>p1r-nash\u讨价还价\u x: 溶液=P1有红色 其他: 解决方案=P2具有红色 印刷液 我想这就是你要找的


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

好的,让我们详细分析一下,因为在生成函数代码的过程中存在许多问题。首先,你有一个很好的函数值来获取用户的所有输入,但是你从来没有使用过这个函数。您需要调用此函数并保存其所有输出,如下所示:

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()
 if abs(p1g-nash_bargaining_x) > abs(p1r-nash_bargaining_x)
    solution = "P1 has Red"
    else
    solution = "P2 has red"
现在,您可以在整个代码中使用来自用户的变量了。之后,您的其他函数定义看起来不错,尽管缩进很差,但这可能只是您没有体验过堆栈溢出格式:

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是这样的:

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()
 if abs(p1g-nash_bargaining_x) > abs(p1r-nash_bargaining_x)
    solution = "P1 has Red"
    else
    solution = "P2 has red"

非常感谢。你能帮我写剧本吗。谢谢你,你到底在哪里调用values函数?你只是定义了它,没有试着运行它,我不知道从那里去哪里。就像我说的,我对python非常陌生。那么我猜这个值函数是不必要的?我只是设置它,以便能够定义变量p1g、p2r等。我意识到50%的代码没有意义。我只是写了我能写的。我不知道如何运行此脚本并返回结果。。thanks@roganjosh我想我的问题是上面描述的。我只想让程序从用户那里得到在values函数中定义的值,然后使用所有的值来计算其他定义的函数,如slope_int、nash_等,然后将这两个函数返回给我solution@blorgbeard我不认为我说过我不知道如何开始?我已经开始了,但我不知道如何从这里开始。剧本中的错误在哪里。我想让程序从values函数中的用户给定输入运行一些计算,计算斜率,p2r,p1r,p2g,nash_讨价还价x,nash_讨价还价y,并给我解决方案谢谢。我相信这是有帮助的。那么,为了在上面的脚本中运行,我必须在哪里调用定义的函数呢?在这种情况下,您需要在需要值的任何行之前调用值。在您的代码中,在所有函数定义之后的“solution=[nash\u agreementation\u x,nash\u agreementation\u y]”行前面。不幸的是,之后您将遇到全局变量问题,因为您的变量仅在函数中定义。在这种情况下,我建议您干脆完全取消函数,并将输入作为主程序的一部分,即删除行def values:并返回[p1g、p2r、p14、p2g、d1、d2],同时取消缩进中间的所有内容。因此,如果您认为此答案有帮助,请选中勾号,并将答案标记为已接受。如果你不喜欢它,向下标记它,如果你喜欢它,向上标记它。只是一些关于使用这个界面的建议,谢谢你们@谢谢你的修改。实际上,我正在定义函数,因为我想把这个脚本放在一个模拟平台中,并多次运行它。同样在你修改过的代码中,在解决方案=nash_讨价还价…等之前
需要像我在代码中那样定义这些函数吗?或者我可以把它定义为一个变量吗?我相信你可以把它定义为一个变量。我不知道你是什么意思,不过谢谢你。这看起来好多了。你是对的,我对这个接口和python都是新手,所以它写得很差,我感谢你的努力。在我返回[m,c]的函数slope_int中,这是一种正确的写入方法,这样函数就可以计算m,c,并且我可以随时使用这个变量吗?当我试图运行它时,我得到了以下错误文件,第20行返回[m,c]^IndentationError:unindent与任何外部缩进级别都不匹配。当您习惯Python时,会经常出现该错误。在Python中,缩进非常重要,开头有空格的行与没有空格的行不同。您的错误意味着在第20行中,该行开头的空格/制表符过多或过少。由于该行是函数slope_int的延续,因此您需要与c=p2r-p2g-p2r/p1r-p1g*p1g上面的行相同数量的制表符/空格。这样python就知道你的返回行属于你的函数,应该只在函数结束时执行。谢谢你的夸奖,但我现在真的不想被用作直接联系人。我担心,如果我让人们直接联系我,来这里对我来说将变成一件家务事,而不是一次冒险,让我找到一个完美的问题来回答。只要继续问你关于堆栈溢出的棘手Python问题,我会密切关注它们:D