2016-03-04 110 views
1

我正在爲類進行的任務是要求我們製作一個程序,通過重複減法計算整數除法(就像乘法等於重複加法一樣)。到目前爲止,除了用戶想要計算商的次數以外,所有的工作都很好。函數中迭代的問題

由於某些原因,程序總是運行一次,而不是我提示程序在for循環中執行的迭代次數/輸入次數。

我可以得到一些幫助嗎?我是新的函數,所以我確定該程序的可讀性不如它,但我需要確定的是我的get_num_of_inputs()函數和/或num_of_inputs變量有什麼問題。

謝謝! :)

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() 
+0

函數只能返回一次,這將結束循環。 – jonrsharpe

+0

我認爲它應該是'範圍(0,num_of_inputs)',我想你可能想保持胡椒括號,如果條件爲 – dvenkatsagar

+0

嗯..這似乎並不奏效。 –

回答

1

你的邏輯有點糾結。沒有必要將num_of_inputs傳遞給calc_quotient函數。相反,您需要創建一個for循環,循環num_of_inputs次。在循環內部,您會得到一個新分子和分母,請撥打calc_quotient,然後輸出結果。

在下面的代碼中,我簡化了calc_quotient函數。

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() 
+0

非常感謝!我在想這個問題可能在功能邏輯上。 –