2014-02-18 39 views
0

我在我的程序中發現一個錯誤,指出finddiscount()缺少一個必需的位置參數。我似乎無法弄清楚如何正確編碼的查找折扣功能有人可以請幫忙嗎?林肯定這是一個簡單的錯誤,但我是新的python,特別是新功能。謝謝!函數缺少位置參數的錯誤

def finddiscount(discount): 
     if quantity >= 1 and quantity <= 9: 
      discount = "0%" 
     elif quantity >= 10 and quantity <= 19: 
      discount = "20%" 
     elif quantity >= 20 and quantity <= 49: 
      discount = "30%" 
     elif quantity >= 50 and quantity <= 99: 
      discount = "40%" 
     elif quantity >= 100: 
      discount = "50%" 
     print (discount)  
    def main(): 
     quantity = int(input("How many packages where purchased?")) 
     price = float(input("How much is each item?")) 
     finddiscount() 
     return 
    def finddiscount(quantity): 
     if quantity >= 1 and quantity <= 9: 
      discount = "0%" 
     elif quantity >= 10 and quantity <= 19: 
      discount = "20%" 
     elif quantity >= 20 and quantity <= 49: 
      discount = "30%" 
     elif quantity >= 50 and quantity <= 99: 
      discount = "40%" 
     elif quantity >= 100: 
      discount = "50%" 
     print (discount)  
    main() 
+0

以供將來參考,不要試圖去描述錯誤的消息,複製並粘貼實際的消息及其描述和回溯。在這樣一個非常簡單的情況下,人們可能能夠準確地猜出出錯的地方以及在哪裏,但總的來說,錯誤信息中的信息是有用的 - 即使它看起來像希臘文。 – abarnert

回答

0

你能避免的級聯的if語句(和意外的錯誤 - 如果給多少數量= 0或110?),就像這樣:

import bisect 
import sys 

inp = raw_input if sys.hexversion < 0x3000000 else input 

def type_getter(type_): 
    def getfn(prompt): 
     while True: 
      try: 
       return type_(inp(prompt)) 
      except ValueError: 
       pass 
    return getfn 
get_int = type_getter(int) 
get_float = type_getter(float) 

discount_points = [  0, 10, 20, 50, 100] 
discount_fractions = [.0, .0, .2, .3, .4, .5] 

def discount_fraction(qty): 
    ndx = bisect.bisect_right(discount_points, qty) 
    return discount_fractions[ndx] 

def main(): 
    qty = get_int("How many were purchased? ") 
    price = get_float("How much is each?") 

    frac = discount_fraction(qty) 
    total = price * (1. - frac) * qty 
    print("Final cost is ${:0.2f}.".format(total)) 

if __name__=="__main__": 
    main() 
3

要調用的函數這樣

finddiscount() 

但這樣定義

def finddiscount(quantity): 

所以,你應該傳遞價值,爲quantity參數。

finddiscount(quantity) 
1

您定義的功能以一個參數:

def finddiscount(discount): 

(後來重新定義它,但讓我們忽略了現在,由於第二個定義也需要一個參數)。

但你不帶參數調用它:

finddiscount() 

想必你想這樣的:

finddiscount(quantity) 

還有一些其他問題與您的代碼。你不應該在一個finddiscount函數定義中定義所有這些東西。而且你絕對不應該在同名全局函數中定義一個名爲finddiscount的本地函數。

另外,你通常希望你的函數實際上return的東西,而不僅僅是print一個值,然後什麼都不做。 (例如,您可能希望return了折扣,因此一些後來的代碼可以應用折讓price。)

但是,這將解決你問這個問題。