programing sisters 姉

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

独学プログラマー9章読んでみた:ファイル

 

水曜日に書いた記事上げ忘れてました。。

 

今日は一人でカメラを止めるな

をみてきました。めっちゃ面白かった!!!

平日のど真ん中の昼間なのに

すごい人多くて、ほぼ満席だったので

しょうがなく間の空いてる席取ったら

嫌な予感的中で両隣カップルでした。。。

けどめげずに一人でビアセット持って

映画を楽しみました。。。

 

もう一回見にいきたい!

 

8章はモジュールの話で短く

まとめておくことなさそうだったので

飛ばしま〜〜〜す!

 

ファイル操作

 

流れとしては

  1. ファイルを開ける
  2. 書き出す or 読み込む
  3. ファイルを閉じる

という流れです。

扉を開けたら締めなければいけないのと

おんなじですね。開けっ放しだときちんと

動作しなくなる危険性があるらしい。

 

そしてファイルを開けるときに

指定しなければいけないのが操作内容です。

 

  • "r":読み込み専用
  • "w":書き出し専用
  • "w+":読み書き両方

 

書き出す時は

 

変数名 = open( "ファイル名.txt" , "w" , encording = "utf-8" )

変数名 . wirte( "Pythonからこんにちは" )

変数名 . close

 

 

というように書きます。

encording = "utf-8"と指定しているのは

日本語文字列が含まれている場合にも

きちんと動作するようにするためです。

英語文字列だけとわかっている時は書く必要なし。

上では書き出し専用の"w"を指定しています。

 

 

with関数:ファイルを自動的に閉じる

 

上でごちゃごちゃ言いましたが

ファイルを自動的に閉じてくれるのが

with関数です。優秀。

これをファイルのオープンに使うと

with関数を抜けるときに自動でファイルを

閉じてくれるというものです。

 

上で書いた例と同じ動作をするコードを書くと

 

with open( "ファイル名.txt" , "w" , encording = "utf-8" ) as 変数名 :

    変数名 . write("Pythonからこんにちは" )

 

 

となります。2行で書けちゃいました。

これだけで先に書いたコードと同じ

動きをしてくれます。こっちを使おう。

 

 

CSVファイル

 

CSVファイルはデータが区切られていてExcelなどの

スプレッドシートで扱い、このデータは

スプレッドシート上ではセルと言われる単位です。

 

CSVファイルを開く時もwith関数を使えます!

この時CSVモジュールをimportして

便利なメソッドを使います。

 

  • writerメソッド  :ファイルオブジェクトとデリミタ(区切り文字)
               を受け取ってCSVオブジェクトを返す
  • writerowメソッド:引数としてリストを受け取り
             CSVファイルに書き出す
  • readerメソッド   :ファイルオブジェクトとデリミタに使用する
              文字列を指定し1行単位で返す

 

本では、この2つが紹介されていました。

writerowメソッドは1回の呼び出しで1行書き出すので

数行書き出したい場合はその回数分呼び出す

必要があります。

 

コードのはじめに"import csv"と書き

csvモジュールを使えるようにします。

 

 

  • 書き出す時のコード例

 

   with open( "ファイル名.csv" , "w" ) as 変数名1 :

       変数名2 = csv.writer( 変数名1 , delimiter = ",")

       変数名2.writerow( ["one" , "two" , "three" ] )

       変数名2.writerow( ["four" , "five" , "six"] )

 

  • 読み込み時のコード例

 

   with open( "ファイル名.csv" , "r" ) as 変数名1 :

       変数名2 = csv.reader( 変数名1 , delimiter = ",")

       for row in 変数名2:

           print( ",". join ( row ) )

 

という感じです。

6章の文字列操作で使ったjoinメソッドがここでも

役に立ってる!!

 

 

終わり

 

まだチャレンジ問題やってないので

明日にでもコード書いて動作を確認したい〜

 

もっと進んでるはずなのに院試終わってから

グータラしすぎて全然進んでない。。。

 

あ!けど大学院第一志望の研究室に

ギリギリ無事受かりました〜やっぴ〜〜

頑張って数学勉強した甲斐がありました。

もう内容はほとんど忘れました。

 

 

 

独学プログラマー7章読んでみた:ループ

 

明日から富士山に登る予定が

台風21号の影響でキャンセルになってしまって

悲しみにくれています。

 

だから早く寝る必要もなくなったので更新します。

 

今回はループの説明でした。

ループはおそらくすごい使うと思うので

ちゃんと使えるようにならなきゃなと、、、。

 

forループ

 

forループはイテラブルを繰り返し処理

するときに使われます。

 

for 変数名 in イテラブル  :

    処理する文

 

というように書きます。

  

また、

 

for インデックス変数名,変数名 in enumerate( イテラブル ) :

    処理する文

 

と書くことで、イテラブルをenumerate関数に渡すことで

インデックス値を作ることもできます。

 

組み込み関数rangeを使えば整数を順番に生成することができます。

 

for  i  in  range( 1 , 11 ) :

    処理する文

 

と書けば i が1から10まで動きます。

1以上11未満ですね!

 

 

whileループ

 

while 式 :

    処理する文

 

と書き、式がTrueの間ループが回ります。

ずっと式がTrueでループが回り続けることを

無限ループと呼び、Control+Cで止めることができます。

 

break文はループを終了するための文でこれを書くと

コンピュータがbreak文をみた瞬間ループが止まります。

 

これと似たもので、continue文というのもあり

これは実行中の反復処理を途中で終了して

次の反復処理を開始する文です。

 

 

終わりに

 

読んでるとふーんなるほど

って感じだったので実際に手を動かして

チャレンジ問題でコードを書いてみたいと思います。

 

最後にこないだ靴慣らしで登った

金時山の山頂で見えた景色を載せときます。

本来なら富士山が見えるはずだったんですけど

終始霧がすごくてまーーじで何にも

見えませんでした。。。

絶対雨女か雨男がいる笑。

 

f:id:yoshinon444:20180903191816j:plain

 

 

 

 

 

 

 

独学プログラマー6章読んでみた:文字列操作

 

こんにちわ!!

昨日は山登りしてきて疲れて珍しく早く寝たので

早く起きれましたーーー!!

けど結局研究室にくるのは昼ってゆう。なんで。

 

この子下書きにずっといたのにアップするの忘れてました。

 

この章は文字列についていろいろ

書いてありました。便利なメソッドとか。

 

基本的な文字列の扱い方

 

  • 三重クォート文字列:"""

文字列を複数行書きたいときに使用するものです。

f:id:yoshinon444:20180830115220p:plain

" \n "は改行の意。

 

 

  • インデックス・マイナスインデックス

文字列はインデックスで指定することができて

0 ~ (文字数-1)の範囲できます。

またpythonはマイナスインデックスが使えます!

マイナスインデックスって初めて聞いた~

また一つ賢くなってしまった~いぇ~

f:id:yoshinon444:20180830115250p:plain

 こんな感じですね。

-1を指定すると一番後ろの文字が対応していますね。

 

 

  • 文字列の演算

足し算と掛け算ができます!

文字列の演算Cではなかった気がする。よね?

とりあえずこれもやってみた。

f:id:yoshinon444:20180830115313p:plain

第二外国語でドイツ語取ってたので

ドイツ語でビールくださいと書いてみた。

(全然しゃべれない)

(落としまくって2個下の子たちと受けて単位取得)

(単位もらえればこっちのもん)

 

 

文字列にもin演算子が使えます。

f:id:yoshinon444:20180830115327p:plain

True / Falseで出力されます。

 

 

  • スライス

コンテナ名 [ 開始インデックス:終了インデックス ]

と書くことで文字列の一部分を抜き出すことができます。

f:id:yoshinon444:20180830120627p:plain

文字列だけでなくリストもスライスすることが

できるのでどっちかというとそっちの方が使いそう。

 

 

 

文字列の便利なメソッド

 

  • 大文字小文字変換

upperメソッド:すべてを大文字に変換

lowerメソッド:すべてを小文字に変換

capitalizeメソッド:文字列の先頭だけを大文字に変換

f:id:yoshinon444:20180830121311p:plain

便利そう。

 

 

  • 書式化

formetメソッド:一部の文字列を置き換える

f:id:yoshinon444:20180830121653p:plain

inputで利用者に入力してもらってってゆうのに

よく使われそうだなー。

 

 

  • 分割

splitメソッド:文字列を複数の文字列に分割する 

f:id:yoshinon444:20180830122233p:plain

分割する間の文字を引数で与えれば勝手に分割してくれます。

"I wish i could, but i can't. "は人生でいつか男性に

行ってみたいセリフの一つです。

せめていい女振りたい。

まずは英語圏に行くことから始めなければ。

 

 

  • 結合

joinメソッド:すべての文字列の間に新たな文字を追加

f:id:yoshinon444:20180830122627p:plain

これもリストに使う方が多そう。

ということでリストにも使ってみた。

"間に入れたい文字".join(元の文字列 or リスト)

なんですね。順番間違えそう。

 

 

  • 空白除去

stripメソッド:最初と最後の空白を取り除く

これは日本語文字の全角スペースも取り除けます。

Cやってた時に全角スペース入り込んじゃって

エラー祭りになった思い出があるので

全角スペースめっちゃ嫌いです。

f:id:yoshinon444:20180830122916p:plain

こんな感じで前後の空白は取り除かれるけど

文字間の空白はそのままです。

 

 

  • 置換

replaceメソッド:ある文字を別の文字に置き換える

f:id:yoshinon444:20180830123320p:plain

間違いがあったり、変更が生じたときに

使うのかな?多分。

 

 

  • 文字を探す

indexメソッド:最初にある文字が現れる位置を返す 

f:id:yoshinon444:20180830123539p:plain

in演算子はある文字が入っているかどうか知れますが

これは位置まで知ることができます。

けど最初に出てくる場所しかわからないので

したい処理に応じて使い分ける必要がありそう。

 

 

終わり

文字列に関してこんなにたくさんの

メソッドが用意されているのがびっくりでした。

使いこなせればいろいろなことが

楽にできそう!がんばろー!

 

 

 

 

 

 

 

独学プログラマー5章チャレンジ問題やってみた:コンテナ

 

1日1記事書こうと思ってたのですが

gossip girlにはまり一気に見ていました。

 

あんなセレブに生まれて

パーティー三昧の日々に

専属ドライバー、お手伝いさんがいる

生活にあこがれますね。。

絶対お金持ちになりたーーーーい!

ということでpythonの勉強に

戻ってきました。

 

今回のチャレンジ問題は結構簡単でした。

 

1,2,3問目は前回やったリスト、タプル、

辞書をそれぞれ自分で定義してみる問題でした。

そのままなので省略!

 

4.キーを入力させてバリューを表示する

 

f:id:yoshinon444:20180825151921p:plain

 

こんな感じですね。

体重は載せませんでした。

入力させるinputは使い慣れてなくて

本をカンニングしてしまいました。。

まだまだ慣れが必要ですね。

まぁけど問題なしかな!

 

 

5.ミュージシャンと曲名

 

f:id:yoshinon444:20180825152450p:plain

 

これは時間がかかった~。

とゆうのもせっかくだから私が好きな曲で

あんまりみんなが知らなさそうな曲を

紹介しようと思って自分の音楽漁って

何がいいかな~って考えながらやってたら

懐かしい曲いっぱい見つけちゃって

いろいろ聞いてました。

 

邦楽縛りです!!

 

アイドルからラップまで入れてみた!

もうどうしても暇で暇でしょうがない!って人は

聞いてみてください。

私は当たり前だけど全部好きです。

 

5章これだけでした。。。

なんか短い記事になっちゃったけど

まぁいいか。

 

まだ時間あるので今日このまま6章に突入します。

ばいばい。

独学プログラマー5章読んでみた:コンテナ

 

ご無沙汰しております。

ブログ書くの飽きたわけではないのです!

 

院試の勉強の為、平成最後の夏に白目を向きながら

研究室にこもって微積・線形などの勉強をしておりました。

 

大学受験以来、数学など触ってなかったので

理解するのに時間がかかるし、「あーこれか!」と

思っても「こんなに忘れてるのか、、」と

悲しくなりながら勉強していました。。。

 

昨日院試が終わったのでやっと記事がかける〜!!

ということで今日からまたpythonの勉強に戻ります。

 

今日は5章を読みました。

この本の私が個人的に好きなところなのですが

章のはじめに名言みたいなのが書いてあるのです!!

 

5章には「愚者はいつまでも悩み、賢者は尋ねる」とありました。

わかってはいるんですよ!わかってるんだけどなかなか

環境によってはこの尋ねるって行為がハードル高かったりしますよね。。

けど私は「わからないことはわかってる人に聞く」という

今後の人生の目標を立てています。

そしたらこの言葉を見つけて、なんてタイムリー!目指せ賢者!

と思いました。以上です。

 

この章はオブジェクトをコンテナに保存する方法、

具体的にはリスト・タプル・辞書について書いてありました。

 

 

 

リスト:好きな順番でオブジェクトを保存できるコンテナ

 

リストの特徴としてあげられるのは、繰り返し可能(イテラブル)

かつ、変更可能(ミュータブル)であることです。

また同じ型でなくても1つのリストに入れられます。

 

定義の仕方:[ ] を使用

f:id:yoshinon444:20180822173256p:plain

 

追加・削除の仕方:append / popメソッド

f:id:yoshinon444:20180822173318p:plain

 

こんな感じです。"mom","dad"を追加しようと思ったのですが

appendメソッドは1つのアーギュメントしか取らないので

一気には無理と言われたので、やむなくパパは諦めました笑。

popメソッドは後ろから要素を取り除くメソッドらしい。

そしてリスト同士は足すこともできるとありました。

 

 

要素の検索:in演算子

f:id:yoshinon444:20180822174118p:plain

 

 "検索要素" in コンテナ名

と書くことで"○○"がfamilyというリストの要素

であるかどうかを調べることもできます。

これは他のコンテナでも使えます!便利!

 

 

 

タプル:好きな順番でオブジェクトを保存できるコンテナ

 

タプルはほぼリストと同じですが

違う点は変更不可能(イミュータブル)であるところです。

 

定義の仕方:( ) を使用

f:id:yoshinon444:20180822175006p:plain

こんな感じですね。

気をつけたいところは要素の数が1つだけの時は

その後に" , "をつけなければなりません。

これリストあればそれででよくね?と思ったのですが

絶対的に変わらないということを保証しているから

逆に地点の座標など不変の値を使う時に

便利らしいです。使う時いつかくるのかな、、不明、、

 

 

 

辞書:2つのオブジェクトを関連付けて保持するコンテナ

 

これは片方を"キー"、もう片方を"バリュー"としてマッピングします。

辞書は変更可能(ミュータブル)でのちにキーバリューペアを

追加・削除することができます。

 

定義の仕方:{ } を使用

f:id:yoshinon444:20180822180355p:plain

 

追加・削除の仕方:delキーワード

f:id:yoshinon444:20180822181312p:plain

 

このように追加の時は、[ 辞書名 ] [ [ キー ] ] = [ バリュー ]と書き

削除の時はdelキーワードを使用します。

キーとバリューがセットになっています。

 

ただ、辞書のキーは変更不可能(イミュータブル)なので

文字列かタプルならキーに使用できますが

リストや辞書はキーには使用できません!!

そして、in演算子で検索をかける時はキーしか

検索できないのでここでも少し注意が必要そうです。

 

 

 

5章はこんな感じでした!

明日は練習問題をやりたいな!

 

今日はこれ書く前、今度富士山に登るので

何を買えばいいのか調べてたんですけど

通販では服の生地の厚さとかわかんないし

記事によって持ち物違ってよくわかんなくなってきたから

ちかぢか山登りの用具売ってるお店に行きたいと思います。

 

死なないようにお金かけようと思います。

わからないことは人に聞く。

 

以上。

 

 

 

 

 

 

 

 

 

 

 

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

 

前回の記事は長くなってしまったので

続きの問題をこの記事に書きます~!

Part2です~!!いぇ~!!

 

あ!あと、前回わからなかったこといろんな人に

教えてもらってわかったので更新しました!

ぜひ見てください~!!

 

更新の部分書き終わってちょっとCSSいじろって思って

いじって戻ったら追加の部分全部消えてしまって

キレそうになったけど、誰に怒っていいのか

わからなかったのでやめました。

(先に更新ボタンを押さなかった自分)

 

これからは消えちゃう前にすぐさま更新ボタンを

押すことにします!一つ勉強になりました。

 

では続きいきま~~~す!

 

 

 

4. 2つの関数

 

f:id:yoshinon444:20180730151402p:plain

これは、1つ目の関数で7を2で割って求められる整数を求め

2つ目の関数でそれを4倍にして出力しています。

 

問題なし!!!!

特にトラブル&疑問なく平和にできました。

 

 

 

5. 文字列をfloat型に変換する関数

 

f:id:yoshinon444:20180730151905p:plain

こんな感じです。

これも初めは型の定義のことで戸惑ったけど

" 例外をキャッチする "という響きの良い言葉

を実際に動かすべく頑張って理解しました。

 

これ、"ddd"を与えた場合、float型に変換できないので

exceptの方に行ってキャッチしてくれるんですね。

"123"などを与えた場合は変換可能なので

"123.0"というように出力してくれます。

 

個人的なあれですけど、pythonは型をはじめに

定義しなくて良いから便利だけど

後から見たときにわからなくならないように

string型の変数は変数の名前自体をstringと

することで頭がごっちゃにならないように

しているのかなと思いました。

 

今書いてて思ったんですけど、わかりやすいように

変数の名前を付けてあげるのは他の言語でも

おんなじことですね。てへぺろ

これからややこしくなるだろうからx,yとかじゃなく

もっといい感じの名前を付けれるようになりたいです。

 

 

 

6. 今までの関数にdocstringを書く

 

f:id:yoshinon444:20180730152818p:plain

これは前回の記事の2つめのやつに

docstring書いた画像です。

まだまだ簡単な関数しか作ってないので

すごい短いですね!

 

これは本に書いてあったように自分で

書いてみたのですが、ネットで調べてみると

いろんな書き方があるみたいですね!

日本人のチームだから日本語で書いてるみたいな

記事もあったんですけど、なんか英語で

書いた方がかっこよさげだから英語で

いい感じに書けるように自分の

docstringの書き方を見つけたいです。

 

これからなんか関数を書くときは

docstringも合わせて書いていこうと

おもいます。

 

 

 

終わりに

 

以上で一応4章終了です~!!

なかなか進まないですね!!!!!

まぁ少しづつやります。

 

今日は院試のために数学の勉強してたんですけど

意味不明だし疲れたしで記事書こーと思って書きました。

日本語へたくそってよく言われるけど

(多分語彙力が少ないって意味だと思う)

文章書くのは楽しいですね。

パソコンだと手が黒くなる必要もないし。

 

あー数学わかんないなーー。

院試までに間に合うのかなー。

わかんないけどもうひと頑張りしてきます。

ばいばい!

 

 

独学プログラマー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=(数字)と入れればいいですね! 

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

ということで、

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

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

安心してください。

 

 

終わりに

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

 

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

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

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

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