2017-12-03 4 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'を再定義しています。 – abccd

+2

ここに1つのパラメータを指定しました... 'renting_1(weeks)'エラーを読みます。 –

+0

あなたの関数 'renting_1'、' renting_2'、 'school_cost'には、そこにあるべきではない最初の引数を追加しました。 'ラップトップ'、 '教科書'と 'コスト'をそれぞれ引数から削除します。これはタイプミスか、議論の仕方が分かりません。また、エラーメッセージも読んでください。 –

答えて

3

エラーから、いくつかの引数が使用例に必須ではないようです。いずれかの引数を削除するか、追加の引数としてNoneを送信するか、オプションの引数を使用できます。

省略可能な引数は、以下のようにデフォルト値を設定することで最後に追加できます。

REFERENCE: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

OPが何を使用しているのかわかりませんケースはです。したがって、これをちょうど追加しました。 –

+1

値が渡されても上書きされます –

-1

コードのこの部分では、renting_1(laptop, weeks)は2つの引数をとり、1つしか与えません。それが言うまさに

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が与えられた)かかり、」それで、あなたは2つの引数、(ラップトップ&週間)を受け入れるようにrenting_1機能を内蔵していますがだけでそれと呼ばれます1つの議論はrenting_1(週)です。ラップトップ用の関数呼び出しの引数に別の値を追加する必要があります。

0

renting_1は2つの引数laptopweeksを受け取るように定義されています。

total_costで使用すると、次のようになります。renting_1(weeks) ここで引数を1つ渡します。

すべてのコールでこの問題が発生しています。あなたが理解していないことがあります。

0

パラメータに戻り値を定義する必要はありません。

あなたが特に他の値例えば

上の計算で渡されるパラメータを上書きすべきではありません、 def renting_1(weeks)は `関数の位置引数をlaptop`れるなぜあなたは` renting_1`

関連する問題