programing sisters 姉

プログラミングを学習するブログです

独学プログラマー4章チャレンジ問題やってみたPart1

 

お久しぶりです。

前回あんだけ翌日に書く言い切ったのに

さぼってしまいました。

 

 

というのも、前回記事書いた翌日に

大学の授業の期末テストが金曜日に

3つもあることに気が付き、普段へーって感じで

しか授業受けてなかったので

必死にテスト勉強していました。

時間がなかったので統計学的な内容の

授業のテストを暗記で乗り切るという

奇策?にでました。

 

けど今後深層学習するなら統計学は大事

らしいのでおいおいちゃんと理解できるように

ならないとなぁとは思っています。

 

テストの出来は微妙ですけど

今は先生が優しくて単位くれることを

願うしかないですね!!

大学生のみなさんテストお疲れさまでした!

自分もお疲れさまでした!!

 

ということで、やっと4章のチャレンジ問題

に手を付けることができました。

やはり自分で書いてみると「ん?」と

思うことが出てくるので、本読むだけでなく

手を動かすことって大切だなーと痛感します。

 

 

 

1.  2乗を返す関数

 

f:id:yoshinon444:20180729140102p:plain

こんな感じですね。

関数名の隣に引数を書くときにその引数の型を

定義しなくて良いということに違和感を覚えました。

実際に少数やマイナスの値を引数として渡しても

きちんと動きました。

 

ただ、"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に何も書かないと整数に丸め込む設定に

なっているみたいです。こんな感じです。

 

f:id:yoshinon444:20180730144102p:plain

 

これを使ってもう一回上の関数を動かしてみました。

f:id:yoshinon444:20180730144324p:plain

 

ちゃんと" 5.29 "とでましたぁぁぁぁぁぁぁ!!!!

やったぁぁぁぁぁぁぁ!!!!!!!

 

 

 

2.  文字列を出力する関数

 

f:id:yoshinon444:20180729140936p:plain

こんな感じです。

ここもstring型の引数ってどう書けばいいんだ?

と思いましたが、そもそもそこで定義する

必要がないからこれでいいのか!と思いました。

前回素直にCとの違いを受け入れられますと言ったけど

全然素直に受け入れられてない自分がいました笑。

理解はできるから練習あるのみですね!はい。

 

 

 

3.   3つの必須引数, 2つのオプション引数がある関数

 

f:id:yoshinon444:20180729141931p:plain

こんな感じです。

初めに「オプション引数の一つだけ

デフォルト値と変えたいときどうなるの?」と

思っていたのですが、いろいろやってみて

わかりました!

 

ここではa,b,cが必須引数でd,eがオプション引数です。

これは書く順番が大切で、

オプション引数をはじめに書いたり

必須引数とオプション引数をごちゃまぜに書いたら

動かないことがわかりました。

で、必須引数だけに値を与えるのが上の画像で

1つ与える引数を増やしたらdの値をデフォルト値から

変えることができ、もう1つ与えるとeもデフォルト値

から変えることができました。

 

とゆうことは、dは変えずeだけを変えることは

できないということ??

なので、オプション引数を複数書く場合は

変更する可能性が高いものを前に書くべき

なのかな??と思いました。

 

 

後でわかったこと

 

dは変えずeだけ変えたいときは、引数に

e=(数字)と入れればいいですね! 

書いたとき思いつかなくてすみません~!!

ということで、

" 先に必須引数、後ろにオプション引数 "

の順番だけちゃんと守っとけば大丈夫です。

安心してください。

 

 

終わりに

ちょっと長くなったので残りは次の記事に書きます~!

 

自分でやってみてこうなのかな?と

思ったことを書いているので、

「なにこいつトンチンカンなこと言ってるの?」

と思った方はぜひ教えてください~~!