【问题标题】:using the output of a function as the input in another function python new to coding使用函数的输出作为另一个函数的输入 python 新的编码
【发布时间】:2014-11-20 21:26:15
【问题描述】:
# any help is greatly appreciated new to this stuff 

def total_bases(int1,int2,int3,int4):
    """(int, int, int, int) -> integer
    Return the total number of bases covered 
    >>>total_bases(2,3,4,5)
    40
    """

    return int1+2*int2+3*int3+4*int4

def slugging_percentage(total_bases,int5):
    """ (total_bases, int5) -> float # so for instance i need the product of the first function for the second function 
    Return the slugging percentage given the total number of bases covered and the total number at bat(int5)
    >>>slugging_percentage(20,9)
    2.22
    """

    return total_bases/int5

def on_base_percentage(h,bb,hbp,ab,sf):
    """(int,int,int,int,int) -> float
    Return the on-base percentage given the hits, base on balls, hit by pitch, at bats and sacrfice hits
    >>>on_base_percentage(1,2,3,4,5)
    0.43
    """

    return (h+bb+hbp)/(ab+bb+hbp+sf)

def on_base_plus_slugging(on_base_percentage,slugging_percentage):
    """(float,float) -> float # as well as for this 
    Return the on-base plus slugging given the on-base percentage and the slugging percentage 
    >>>on_base_plus_slugging(1.0,2.0)
    3.0
    """

    return on_base_percentage+slugging_percentage

def OPS_value(on_base_plus_slugging):
    """(float) -> string
    Return the on-base plus slugging value given the on-base plus slugging score range 
    >>>OPS_value(0.8234)
    B
    """
if on_base_plus_slugging > 0.9000:
    return "A"
elif on_base_plus_slugging > 0.7667:
    return "B"
elif on_base_plus_slugging > 0.7000:
    return "C"
else on_base_plus_slugging < 0.7000:
    return "F"
elif on_base_plus_slugging == 0.7000:
    return "F"

【问题讨论】:

  • 请格式化此代码。
  • 那么问题是什么?
  • @sheeptest,我认为最好省略代码,因为它不是 OP 提出问题的代码。他问的是在函数内部调用函数,对吗?
  • @T.Woody 是的。你是对的。我只是不知道在它未格式化时是否有一个文本问题。

标签: python function input output


【解决方案1】:

函数可以返回值。您可以将这些值存储为变量。然后您可以将这些值用作其他函数的输入。

我想您正在尝试使用on_baseslugging 百分比来计算OPS_value

因此您将计算on_basetotal_basesslugging 并将返回值存储在变量中。

然后您将这些变量作为输入传递给您的 OPS_value 函数,该函数返回最终的计算值。

请看下面的例子:

def OPS_value(percent):
    """(float) -> string
    Return the on-base plus slugging value given the on-base plus slugging score range 
    >>>OPS_value(0.8234)
    B
    """

    if percent > 0.9000:
        return "A"
    elif percent > 0.7667:
        return "B"
    elif percent > 0.7000:
        return "C"
    else:
        return "F"

total_bases = total_bases(2, 3, 4, 5) # Get the return value for total_bases

slugging = slugging_percentage(total_bases, 9) # Get the return value for slugging_percent
on_base = on_base_percentage(1, 2, 3, 4, 5) 
print OPS_value(on_base + slugging) # using on_base + slugging as input

我们正在尝试做的是将与计算 total_basesslugging 等每个事物相关的数学分开。

与原始代码的另一个主要变化是您不需要一个函数来仅添加两个值。 您可以而且应该在一行中做到这一点。

【讨论】:

    【解决方案2】:

    将变量保存为全局变量是一种方法。

     def some_function():
          global var     #This is a global variable
          #Do things to variable
    

    我相信您正在寻找的另一种方法是在函数内部调用函数。这看起来像这样:

     def function_1(#some variable):
          #Stuff could be up here
          num = function2(5)
          #Stuff could be down here
    
     def function_2(a_number):
          a_number = a_number*2
          return a_number
    

    这将使变量num = 5*2。

    我希望这会有所帮助。

    【讨论】:

    • sheeptest 提出的解决方案比在另一个函数内部使用函数要干净得多。定义清晰输入和输出的函数是更大更复杂代码的良好构建块。它们可以在不同的上下文中重复使用,并且更容易测试。当然,在另一个函数内部调用一个函数是一种完全有效的方法,并且仍然有效。只是风格问题。
    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2019-05-20
    • 2011-04-11
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多