Max Silbert
Max Silbert

Reputation: 13

Trouble with Iterations in Function

The assignment I'm working on for class is asking us to make a program that calculates integer division by means of repeated subtraction (just like multiplication is equivalent to repeated addition). So far everything works great except for the number of times that the user wants to calculate a quotient.

For some reason, the program always runs just once instead of the number of iterations/inputs that I've prompted the program to execute in the for loop.

Could I get some help with this? I'm new with functions, so I'm sure the program isn't as readable as it could be, but all I need to figure it is what is wrong with my get_num_of_inputs() function and/or num_of_inputs variable.

Thanks!! :)

def main():
    num_of_inputs = get_num_of_inputs()
    numerator, denominator = get_input()
    quotient = calc_quotient(num_of_inputs, numerator, denominator)
    display_output(numerator, denominator, quotient)

def get_num_of_inputs():
    return int(input("What is the number of inputs?: "))

def get_input():
    numerator = int(input("\nEnter the numerator: "))
    denominator = int(input("Enter the denominator (must not be zero): "))
    return numerator, denominator

def calc_quotient(num_of_inputs, numerator, denominator):

    if denominator == 0:
        return print("Error: invalid input")

    if numerator == 0:
        return 0

    if denominator == 1:
        return numerator

    if denominator == -1:
        return -numerator

    numerator_abs = abs(numerator)
    denominator_abs = abs(denominator)

    for iterations in range(num_of_inputs):
        #case 1
        if numerator_abs > denominator_abs:
            result = 5
            acc = numerator_abs
            quotient = 0

            while result > 0:
                acc = acc - denominator_abs
                result = acc
                quotient += 1

            if result < 0:
                return quotient - 1

            if (numerator > 0 and denominator > 0) or (numerator < 0 and denominator < 0):
                return quotient

            if numerator_abs % denominator_abs == 0 and ((numerator > 0 and denominator < 0) \
                or (numerator < 0 and denominator > 0)):
                return -quotient

            if numerator_abs % denominator_abs > 0 and ((numerator > 0 and denominator < 0) \
                or (numerator < 0 and denominator > 0)):
                return -quotient - 1
        #case 2
        if denominator_abs > numerator_abs:

            if (numerator > 0 and denominator > 0) or (numerator < 0 and denominator < 0):
                return 0

            if (numerator > 0 and denominator < 0) or (numerator < 0 and denominator > 0):
                return -1
        #case 3
        if numerator_abs == denominator_abs:

            if (numerator > 0 and denominator > 0) or (numerator < 0 and denominator < 0):
                return 1

            if (numerator > 0 and denominator < 0) or (numerator < 0 and denominator > 0):
                return -1


def display_output(numerator, denominator, quotient):
    print("\nThe quotient of", numerator, "and", denominator, "is:", quotient)

main()

Upvotes: 1

Views: 64

Answers (1)

PM 2Ring
PM 2Ring

Reputation: 55469

Your logic is a little bit tangled up. There's no need to pass num_of_inputs to the calc_quotient function. Instead, you need to create a for loop that loops num_of_inputs times. Inside the loop you get a new numerator and denominator, call calc_quotient, and output the results.

In the code below I've simplified the calc_quotient function.

def calc_quotient(numerator, denominator):
    if denominator == 0:
        raise ValueError("denominator can't be zero!")

    sign = -1 if numerator * denominator < 0 else 1
    numerator = abs(numerator)
    denominator = abs(denominator)

    quotient = 0
    while numerator >= denominator:
        numerator -= denominator
        quotient += 1
    return sign * quotient

def get_num_of_inputs():
    return int(input("What is the number of inputs?: "))

def get_input():
    numerator = int(input("\nEnter the numerator: "))
    denominator = int(input("Enter the denominator (must not be zero): "))
    return numerator, denominator

def display_output(numerator, denominator, quotient):
    print("\nThe quotient of", numerator, "and", denominator, "is:", quotient)

def main():
    num_of_inputs = get_num_of_inputs()
    for i in range(num_of_inputs):
        numerator, denominator = get_input()
        quotient = calc_quotient(numerator, denominator)
        display_output(numerator, denominator, quotient)


if __name__ == '__main__':
    main()

Upvotes: 1

Related Questions