Reputation: 13
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
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