Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Python】データ型の正解コードが解らない

解決したいこと

Python初心者で学習中ですが、正解のコードを自力で導くことができず
先に進むことができず困っています。
解答と解説をご教授頂きたいです。

発生している問題・エラー

【問題文】
BMIを計算しようと思い,次のような関数を作った。
関数のreturn文の前に一行追加し,小数点以下を切り捨てて整数値となるように書き換えたい。
追加すべき行を解答欄に入力しなさい。インデントを含め,本来あるべき空白は取り除いて入力しなさい。

def calculate_bmi(weight, height):
    bmi = weight/(height**2))
    return bmi

自分で試したこと

def calculate_bmi(weight, height):
    bmi = weight/(height**2))
    int(bmi)
    return bmi

return分の前に整数値となるようint(bmi)と入力、身長体重に実際に数値を代入し試しましたが、
戻り値が整数にならず、整数にならない理由もわかりません。

宜しくお願い致します。

0 likes

1Answer

int(bmi)

このコード片を口語訳するなら、「bmiint型に変換した値」でしょうか。
名詞句であることに気をつけてください。

int関数は、引数を整数化した結果を返値として返します。
これはint(bmi)という式が全体として取る値です。
呼び出しの副作用としてbmi変数そのものが変わるわけではありません。1

今回は、bmi変数の値を変える必要があるようなので、返値を再代入します。

bmi=int(bmi)

ちなみに問題文の時点で括弧の対応が合っていませんが(2行目)、解答方式からして問題ないみたいですね。

  1. 根本的なことを言えば、そもそもPythonの関数呼び出しの機構上、intに渡るのはbmiを評価した値であり、関数内の作用がbmi変数そのものに及ぶことはありません。
    この辺について興味があれば「値渡し」について調べてみてください。

2Like

Comments

  1. @eudika様

    丁寧にご解説頂きましてありがとうございます。
    返値を再度代入しないと`bmi`という変数が変わらないことに気づけていませんでした。
    言われてみるとなぜそこに気づけなかったのかと思いましたが、私の理解不足の為
    復習する必要があると改めて感じました。
    値渡しについてもありがとうございます。
    軽く見ましたが、参照渡しまではいいとしてミュータブルにイミュータブルと聞きなれない文言が出てきましたので、理解できるまで読み込みたいと思います。
    ありがとうございました。

Your answer might help someone💌