single
位置引数とキーワード可変長引数の組み合わせ
メニューを表示するにはスワイプしてください
複数の商品の合計金額を計算し、任意の数の価格と、割引や税金などのオプションのキーワード設定を渡すことができる関数を考えます。
12345678910111213141516171819202122232425def calculate_total_cost(*prices, **settings): subtotal = sum(prices) discount = settings.get('discount', 0) tax = settings.get('tax', 0) discount_amount = subtotal * (discount / 100) taxed_amount = (subtotal - discount_amount) * (1 + tax / 100) print(f'Subtotal: ${subtotal:.2f}') if discount > 0: print(f'Discount: {discount}% (-${discount_amount:.2f})') else: print('No discount applied.') if tax > 0: print(f'Tax: {tax}% (+${taxed_amount - (subtotal - discount_amount):.2f})') print(f'Final total: ${taxed_amount:.2f}') print() # Examples of using the function calculate_total_cost(1000, 250, 50) calculate_total_cost(1200, 800, discount=10) calculate_total_cost(500, 750, 250, discount=5, tax=8)
上記のコードでは、settings.get('discount', 0) という行に注目してください。
settings はキーワード引数を標準のPython辞書として受け取るため、辞書の .get() メソッドを使って値を安全に取得します。
通常、辞書で存在しないキーを角括弧(例:settings['discount'])で参照しようとすると、Pythonはクラッシュして KeyError を発生させます。.get() メソッドを使うことで、フォールバックのデフォルト値を指定でき、この問題を防げます。
構文は次のようになります:
dictionary.get(key, default_value)
key:探したい設定名(例:'discount' や 'tax')。
default_value:そのキーが関数に渡されなかった場合に返す値。
可変長引数の組み合わせルール
位置可変長引数(*args)
*args は、すべての追加の位置引数をタプルとして受け取る。
この例では、関数は明示的に定義しなくても任意の数の商品の価格を受け取ることができる。
例:
calculate_total_cost(500, 250, 100)
ここで、*prices は (500, 250, 100) となる。
キーワード可変長引数(**kwargs)
**kwargs は、すべての名前付き(キーワード)引数を辞書として受け取る。
これにより、discount や tax など、事前に定義されていない追加の名前付き設定も関数で受け取ることができる。
例:
calculate_total_cost(1000, 500, discount=10, tax=5)
ここで、**settings は {'discount': 10, 'tax': 5} となる。
両方の組み合わせ
*args と **kwargs の両方を同じ関数で使用することで、最大限の柔軟性を実現できる。これにより、任意の数の位置引数と、任意の組み合わせの名前付き設定を扱うことが可能となる。
関数シグネチャでは、必ず *args を **kwargs より前に配置する必要があります。順序を逆にすると SyntaxError になります。
スワイプしてコーディングを開始
generate_report 関数を実装し、任意の数値スコアとオプションのキーワード設定を受け取ります。
-
*argsを使用してスコア(パラメータ名はscores)を収集し、**kwargsでオプション設定を収集します。 -
渡されたすべてのスコアの平均値を計算します。計算方法は、scores 内の値を合計し、その合計をスコア数で割ります:
Average=len(scores)sum(scores) -
'label'に**kwargsキーが存在する場合は、その値をレポートタイトルとして使用し、存在しない場合は'Report'を使用します。 -
**kwargsに'passing_score'キーが存在する場合、平均値がその値以上かどうかを判定します:- 条件を満たす場合は、レポートに
'Status: Pass'を追加します。 - 満たさない場合は
'Status: Fail'を追加します。
- 条件を満たす場合は、レポートに
-
結果はフォーマット済みの文字列で返します:
'{label} | Average: {avg:.2f} | {status}'。'passing_score'が指定されていない場合は、ステータス部分を省略します:'{label} | Average: {avg:.2f}'。
解答
フィードバックありがとうございます!
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください