2
# 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"
4
  • Please format this code. Commented Sep 25, 2014 at 23:44
  • 1
    So what's the question? Commented Sep 25, 2014 at 23:50
  • @sheeptest, I think it would be best to just omit the code, as it isn't the code that the OP is asking a question about. He is asking about calling a function inside a function, correct? Commented Sep 25, 2014 at 23:50
  • @T.Woody Yeah. You're correct. I just couldn't tell if there was a text question inside of all of it when it was unformatted. Commented Sep 25, 2014 at 23:50

2 Answers 2

1

Save the variable as global is one way.

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

The other way, which is what I believe you are looking for is to call a function inside of a function. This would look like this:

 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

This will make the variable num = 5*2.

I hope this helps.

Sign up to request clarification or add additional context in comments.

1 Comment

The solution proposed by sheeptest is much cleaner than using a function inside another one. Functions that define clear inputs and outputs are nice building blocks for a larger more complicated code. They can be re-used in a different context and are easier to test. Calling a function inside another one is, of course, a perfectly valid way of doing it and will still work. Just a matter of style.
1

Functions can return values. You can store those values as variables. Then you can use those values as input to other functions.

I imagine you're trying to calculate the OPS_value using on_base and slugging percentages.

So you would calculate on_base, total_bases, and slugging and store the returned values in variables.

You then pass in those variables as input to your OPS_value function, which returns the final, calculated value.

See the below example:

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

What we're trying to do is keep the math related to calculating each thing total_bases, slugging, etc separate.

The other major change from your original code is that you don't need to have a function for just adding two values. You can and should do that in one line.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.