2017-12-03 219 views
-1

我想申請什麼我已經瞭解的功能和參數,所以我想出了可以計算的學費(純屬假設)我的函數和參數代碼有什麼問題?

def renting_1(laptop, weeks): 
      laptop = 5 * weeks 
      if weeks > 10: 
        laptop -= 120 
      elif weeks > 5: 
        laptop -= 50 
      return laptop 

def renting_2(textbooks, number_of_textbooks, weeks): 
     textbooks = number_of_textbooks * 20 + (10 * weeks) 
     if weeks >= 26: 
       textbooks -= (5 * (weeks - 26)) 
     return textbooks 

def school_cost(cost, weeks): 
     cost = 200 * weeks 
     return cost 

def total_cost(weeks, number_of_textbooks): 
     return renting_1(weeks) + renting_2(number_of_textbooks, weeks) + school_cost(weeks) 

print total_cost(22, 4) 

,當我運行它,我收到此

代碼
Traceback (most recent call last): 
    File "python", line 22, in <module> 
    File "python", line 20, in total_cost 
TypeError: renting_1() takes exactly 2 arguments (1 given) 

有人可以解釋,也許修復代碼,所以我可以分析什麼是錯的?

+1

爲什麼'laptop'的功能位置參數'renting_1'?它不應該在那裏嗎?因爲你正在函數中重新定義'laptop'。 – abccd

+2

你在這裏給出了一個參數......'renting_1(weeks)'閱讀錯誤。 –

+0

對於您的函數'renting_1','renting_2'和'school_cost',您添加了第一個參數,該參數不應該在那裏。從參數中分別刪除'laptop','textbooks'和'cost'。這可能是一個錯字,或者你不太理解論證如何工作。還要閱讀錯誤信息,那個很清楚。 –

回答

3

從你得到的錯誤來看,你的用例似乎有些參數不是強制性的。您可以刪除這些參數,也可以發送None作爲附加參數或使用可選參數。

通過爲它們設置默認值,可以在最後添加可選參數,如下所示。

參考:http://www.diveintopython.net/power_of_introspection/optional_arguments.html

def renting_1(weeks, laptop=None): 
    laptop = 5 * weeks 
    if weeks > 10: 
      laptop -= 120 
    elif weeks > 5: 
      laptop -= 50 
    return laptop 

def renting_2(number_of_textbooks, weeks, textbooks=None): 
    textbooks = number_of_textbooks * 20 + (10 * weeks) 
    if weeks >= 26: 
      textbooks -= (5 * (weeks - 26)) 
    return textbooks 

def school_cost(weeks, cost=None): 
    cost = 200 * weeks 
    return cost 

def total_cost(weeks, number_of_textbooks): 
    return renting_1(weeks) + renting_2(number_of_textbooks, weeks) + school_cost(weeks) 

print total_cost(22, 4) 
+1

雖然它的工作原理,你不需要這些參數 –

+0

我不知道OPs使用什麼情況是。所以,加上這個以防萬一。 –

+1

即使通過了一個值,它也會被覆蓋 –

-1

在代碼中的這一部分,renting_1(laptop, weeks)需要兩個參數,你只給一個。

def total_cost(weeks, number_of_textbooks): 
     return renting_1(weeks) + renting_2(number_of_textbooks, weeks) + school_cost(weeks) 
+0

這解釋了問題,而不是解決方案 –

0

正是它說「renting_1()到底需要2個參數(1給出)」

所以你建的renting_1函數接受2個參數,(筆記本&周),但你只把它稱爲租用1(周)的一個論據。您需要爲筆記本電腦的函數調用參數添加另一個值。

0

renting_1被定義爲接收2個參數laptopweeks

當您在total_cost中使用它時,可以這樣稱呼它:renting_1(weeks) 您傳遞了一個參數。

所有調用都有此問題。有些事你不瞭解。

0

您不需要在參數中定義返回值。

您尤應不會覆蓋與計算其它值

例如傳入的參數,def renting_1(weeks)是所有你需要