独学プログラマー4章チャレンジ問題やってみたPart1
お久しぶりです。
前回あんだけ翌日に書く言い切ったのに
さぼってしまいました。
というのも、前回記事書いた翌日に
大学の授業の期末テストが金曜日に
3つもあることに気が付き、普段へーって感じで
しか授業受けてなかったので
必死にテスト勉強していました。
時間がなかったので統計学的な内容の
授業のテストを暗記で乗り切るという
奇策?にでました。
けど今後深層学習するなら統計学は大事
らしいのでおいおいちゃんと理解できるように
ならないとなぁとは思っています。
テストの出来は微妙ですけど
今は先生が優しくて単位くれることを
願うしかないですね!!
大学生のみなさんテストお疲れさまでした!
自分もお疲れさまでした!!
ということで、やっと4章のチャレンジ問題
に手を付けることができました。
やはり自分で書いてみると「ん?」と
思うことが出てくるので、本読むだけでなく
手を動かすことって大切だなーと痛感します。
1. 2乗を返す関数
こんな感じですね。
関数名の隣に引数を書くときにその引数の型を
定義しなくて良いということに違和感を覚えました。
実際に少数やマイナスの値を引数として渡しても
きちんと動きました。
ただ、"2.3"を引数として与えたときに
"5.289999999999999"と出てきてなんで"5.29"では
ないのかなと思いました。
調べてみたのですが、私の調べ方が
悪いのか理由が出てこなくてわかりません。
知ってる人教えてください。
原因と解決策:round関数
教えてもらって原因がわかりました!
ありがとうございます。
コンピュータは二進数に直して計算するんですけど
2.3はきれいに二進数にすることができないので
近似して計算してはるらしいです。
なので上のような結果になってしまったみたいです。
解決策としてpythonの組み込み関数である
round関数が使えるみたいです!
round関数は小数点を丸めこむことができます。
丸め込むというのはほぼ四捨五入と同じなんですが
〇.5の時は偶数になるように処理するらしいです。
例を見た方が早いと思うので下に例を書いておきます。
- 2.3 → 2
- 2.7 → 3
- 2.5 → 2
- 3.5 → 4
round関数の使い方は調べたらたくさん
丁寧に解説しているページがありました。
" round(引数1, 引数2) "
と書くのですが、引数1には丸めたい数字や変数を書き
引数2には希望の小数点以下桁数を書きます。
引数2に何も書かないと整数に丸め込む設定に
なっているみたいです。こんな感じです。
これを使ってもう一回上の関数を動かしてみました。
ちゃんと" 5.29 "とでましたぁぁぁぁぁぁぁ!!!!
やったぁぁぁぁぁぁぁ!!!!!!!
2. 文字列を出力する関数
こんな感じです。
ここもstring型の引数ってどう書けばいいんだ?
と思いましたが、そもそもそこで定義する
必要がないからこれでいいのか!と思いました。
前回素直にCとの違いを受け入れられますと言ったけど
全然素直に受け入れられてない自分がいました笑。
理解はできるから練習あるのみですね!はい。
3. 3つの必須引数, 2つのオプション引数がある関数
こんな感じです。
初めに「オプション引数の一つだけ
デフォルト値と変えたいときどうなるの?」と
思っていたのですが、いろいろやってみて
わかりました!
ここではa,b,cが必須引数でd,eがオプション引数です。
これは書く順番が大切で、
オプション引数をはじめに書いたり
必須引数とオプション引数をごちゃまぜに書いたら
動かないことがわかりました。
で、必須引数だけに値を与えるのが上の画像で
1つ与える引数を増やしたらdの値をデフォルト値から
変えることができ、もう1つ与えるとeもデフォルト値
から変えることができました。
とゆうことは、dは変えずeだけを変えることは
できないということ??
なので、オプション引数を複数書く場合は
変更する可能性が高いものを前に書くべき
なのかな??と思いました。
後でわかったこと
dは変えずeだけ変えたいときは、引数に
e=(数字)と入れればいいですね!
書いたとき思いつかなくてすみません~!!
ということで、
" 先に必須引数、後ろにオプション引数 "
の順番だけちゃんと守っとけば大丈夫です。
安心してください。
終わりに
ちょっと長くなったので残りは次の記事に書きます~!
自分でやってみてこうなのかな?と
思ったことを書いているので、
「なにこいつトンチンカンなこと言ってるの?」
と思った方はぜひ教えてください~~!