しろちゃのプログラミング日記

プログラミング初心者が勉強したことを書き留めるブログ

Pythonコード紹介!!エラー処理try、expect

はじめに

この記事では、エラー処理に使われるPythonのコードを紹介します


関数紹介シリーズと一緒です

シリーズ名を変えただけです

色々考えたけど、関数紹介よりコード紹介の方が汎用性が高そうだなって…

汎用性も可読性も大事なのです

Pythonと同じ!

例外処理とは?

コードのタイプミスやらなんやらのおかげで、

一度くらいはエラーを起こしたことがあると思いますが(もしなかったとしても、きっとこの先にあるでしょう)


特にinput()を使うときなんか

数字だけだと言っているのにアルファベットを入力されたり、

エラーが起きやすいです


そういうときに重宝されるのが例外処理です

エラーについて、例外を変数に格納したり叱責を設定できます


例外処理の方法

例外処理は、tryブロックとexceptブロックで構成されます

tryブロックに処理を、expectブロックにエラーの場合行われる処理を書きます

>>> num = [1,2,3,4]    
>>> index = 7
>>> try:
..:     print(num[index])
..: except IndexError:
..:    print('Error!')

Error!

tryブロック

記述方法は以下の通り

>>> try:
..:     実行するコード

コードの内容はなんでも構いません

コンマを忘れないようにしてください

exceptブロック

このブロックは複数階層作ることが可能で、

処理は「elif」に似ています


最も単純なコードは下記の通りで

この処理は全てのエラーを拾います

>>> except:
..:     エラーの時に実行されるコード

引数を設定し、特定のエラーを指定することもできます

>>> expect IndexError:
..:     エラーの時に実行されるコード

上記のコードで引数として使われているIndexErrorは、

シーケンスに無効な位置を指定したときに返される例外型です

他にも色々あります

例外の保存

下記のようなコードで、

例外を任意の変数に代入し、保存することができます

except <i>exceptiontype</i> as <i>name</i>

exceptiontypeに例外の型を、

nameに変数名を記述します


先述したIndexErrorは、exceptiontypeの具体例の一つで、

Exceptionは全ての例外を表します


使い方は、for...asに近いものを感じます

>>> try:
..:    print('1' + 4)
>>> expect Exception as error:
..:    print(error)
can only concatenate str (not "int") to str

例外の内容が出力されました

数字と文字を同時に表示したから怒られたようですね

まとめ

適当にスプリクトモードで書いてみました

 num = [1, 2, 3, 4, 5] #numリストを作成
 while True:
    print('Please enter any number or q. ',\
              'Never enter anything else...OK?:') 
    x = input()
    if x=='q':
        break #プログラムの終了コマンド
    try:
        index = int(x) #入力されたデータ型をint型に変換
        print(num[index]) #numリストの値を表示する
    except IndexError:
        print('Bad index:', index)
    except Exception as other:
        print('エラーの原因:',other)

興味あったらコピペしてみてくださいねー

さいごに

ここまで読んで下さり、ありがとうございました!

参考文献の紹介記事を貼っておきますです

ai-shirocha.hatenablog.com

Python処理集!!反復処理 of for by for for イテレータ編

はじめに

この記事では、forによる反復処理とイテレータについて紹介します

なお、タイトルを直訳すると

「forのforによるイテレータのための反復処理」となります

深い意味はありません(`・ω・´)

イテレータ・イテラブルとは?

Pythonの入門書を読んで行くにあたって、

それなりに遭遇するこれらの語に悩まされた方も少なくないはず(ですよね?)


例えばしろちゃは適当に読み飛ばした挙句、

意味が分からなくなってばたんきゅーした覚えがあります


シーケンスだオブジェクトだと、

英語基準のPythonにはどうにも不可解なカタカナ語が多いのが厄介です…

そう思っているのはおばかなしろちゃだけかもしれませんが…小声

イテレータ

前置きが長くなってしまいましたが、

簡単に言うと、イテレータとは

イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。
イテレータ - Wikipedia

我らがWikipedia大百科様によれば上記が定義となります

要するに、

「要素の数だけ反復処理を行う」

ことだと思っておいておけばいいと思います


いくつか具体例を知り、扱っていけば

おばかなしろちゃでもそれなりに…理解できるようになるでしょう。きっと。いつか。


このイテレータという概念はPythonにとどまらず、

プログラミングの世界ではかなり色々な場面で用いられています

「イテラブル(な)オブジェクト」の意味

イテラブルなんだかイラテラブルなんだかイラテルブルなんだか、

なかなか判別が難しいところですね

簡単に言えば「イテレータに対応しているオブジェクト」の意となります

つまり、イテラブルオブジェクトはイテレータによる処理が可能というわけです


あとはイテレータの意味さえ分かれば簡単ですね!

イテラブルオブジェクトの例

具体例は挙げればきりがありませんが、代表的なものを羅列しておきます

  • 文字列
  • リスト
  • タプル
  • 辞書
  • 集合


あくまで一例ですが、これらはイテラブルオブジェクトとなります

また、そうでないデータ型ももちろんあります

例えば、int型はイテラブルオブジェクトではありません

for による反復処理

反復処理の基本、whileとは似て非なるforです


whileは「条件式」に当てはまる限りループを続けますが

forは指定された範囲(回数)内で処理を行います


条件を指定するか、範囲を指定するか

主となる違いはその点だと思います

forの基本

記述は以下の通り

>>> love = ['music', 'cat', 'mom', 'blood', 'pink']
>>> for thing in love:
             print(thing)

music
cat
mom
blood
pink
>||

<span style="font-size: 80%">病み期かな?</span>

loveの大きさだけ処理を繰り返していますね


ちなみに、辞書型を処理するとキーが繰り返されます

そんなの嫌だというなら、イテラブルなオブジェクトの後ろに

「.value」「.items」を使います

すると、それぞれ「値」と「値、キーのタプル」が処理されるようになるのです!


** break による終了

whileにも言えることですが、

breakによってループを中止させることができます

不健全なワードが表示されそうになったらループを脱出しましょう

>|python|
>>> for thing in love:
            if thing == 'blood':
                break
            print(thing)
music
cat
mom

continue による巻き戻し

continueの扱いもまた、whileと同じです

不健全なワードは消し去りつつ、

そのあとの素敵なワードは是非とも表示しましょう

>>> for thing in love:
           if thing == 'blood':
               continue
           print(thing)
music
cat
mom
pink

こうして少女の闇は最小限のキリトリで覆い隠されたのでした

まとめ

今回は、反復処理の基本となる

処理に使われるforを紹介しました


イテレータは汎用性が高く、頻繁に使われるみたいなので

確実にモノにしていきましょう!

さいごに

ここまで読んで下さってありがとうございます!

例のごとく、参考はオライリー・ジャパン出版の

「入門 Python 3」Bill Lubanovic著

それに加えて

引用は「Wikipedia」でした!


以下、参考書の紹介記事です!

↓↓↓
ai-shirocha.hatenablog.com

Python関数紹介!!並行した反復処理 zip編

はじめに

この記事では、Pythonの反復処理に使われるzip関数について紹介します

なお、今回からPythonインタラクティブモードを主に使用していこうと思います

微妙に違いますが、ほとんど一緒です

print使わなくても出力されたりするところが違いといえば違いかな…

zipの記述方法

以下のように記述します

zip(シーケンスA, シーケンスB)

シーケンスとは、連続した何かのことです

リスト、タプル、文字列、整数…etc.

連続してればなんでもオッケーってことですね


実行すると、シーケンスAとシーケンスBが並行処理されます

並行処理するシーケンスは、必要とするだけいくらでも増やせます

3つでも4つでも10000個でも好きなだけ並行処理してください

メモリが不足でクラッシュしたら自己責任でお願いします

>>>Japanese = '赤', '青', '黄色'
>>>English = 'red', 'blue', 'yellow'
>>>list(zip(Japanese,English))
[('赤', 'red'), ('青', 'blue'), ('黄色', 'yellow')]

こんな感じです


また、並行処理するシーケンスの大きさ(=値の数)が異なる場合は

最も小さいものが全て処理されたときに繰り返しが終了します

先ほどの変数Englishに、ピンク色を加えてみます

>>>English = 'red', 'blue', 'yellow', 'pink'
>>>list(zip(Japanese,English))
 [('赤', 'red'), ('青', 'blue'), ('黄色', 'yellow')]

zip関数のデータ型

>>>type(zip(Japanese, English))
zip

これで結論は出たようなものですが、

zip関数で作られる値のデータ型はzip型となります

また、zip型はイテラブル(イテレータ*1に対応している)な値で、

反復処理するか、リスト型や辞書型に変換する必要があります

反復処理for...inでの利用

zip関数で返された値を反復処理したい場合は、以下のように記述して下さい

先の英語と日本語で記述したzip型のオブジェクトを並行処理してみます

>>>for iro, color in zip(Japanese, English):
           print(iro,color)
赤 red
青 blue
黄色 yellow

何の面白みもないですね(え)

さいごに

参考にした参考書の紹介記事です
ai-shirocha.hatenablog.com

*1:リスト、辞書などから要素を1つずつ取り出して返すもの

Python関数紹介!!リストの並べ替え sort/sorted編

はじめに

この記事では、Pythonの並べ替えの関数「sort」「sorted」について紹介します


「sort」と「sorted」の違い

両者の違いは二点あります

記述の仕方と、

新しい変数を作成するか、元の変数を変更するのか、

です


汎用関数「sorted」

書き方としては「print」と同じです

シンプルですね

>>> color = ['red','blue','赤','あか','アカ','アオ','青']
>>> print(color)
['red', 'blue', '赤', 'あか', 'アカ', 'アオ', '青']
>>> sorted_color = sorted(color)
>>> print(sorted_color)
['blue', 'red', 'あか', 'アオ', 'アカ', '赤', '青']

sorted関数は元の関数を変更することなく

並び替え後の新たな関数を作成します


つまり、並び替えた関数は変更されません

手動で変数の値を更新するか

別の変数を用意することが必要です

>>> print(color)
['red', 'blue', '赤', 'あか', 'アカ', 'アオ', '青']

リスト関数「sort」

リスト型専用の関数「sort」では

「sorted」とは記述の仕方が異なります

>>> color = ['red','blue','赤','あか','アカ','アオ','青']
>>> color.sort()
>>> print(color)
['blue', 'red', 'あか', 'アオ', 'アカ', '赤', '青']
>||

上記の通り、記述の方法は

>|python|
color.sort()

「変数名ドットsort()」です

元の変数の値は更新されることに注意してください


順序の変更

引数「reverse = True」を追加すれば

順序を逆にすることができます

>>> color.sort(reverse = True)
>>> print(color)
['青', '赤', 'アカ', 'アオ', 'あか', 'red', 'blue']

並び替えの順序は?

両方の関数とも同じで、

並び替えの順序は次のようになります

アルファベットA~Z→平仮名あ~ん→片仮名ア~ン→漢字(追加した順)

なおint型とfloat型は混ぜても正常に動作しますが、

str型と数字を混ぜて実行しようとするとエラーになります


さいごに

読んで下さった方、本当にありがとうございます!

今回はPythonの関数を紹介しました

まとめを書くのがめんどくさかった大変だったので、今回はなしにしてみます


さいごに、私が今使っている参考書を紹介しておきますね

「入門 Python 3」Bill Lubanovic著

Pythonの参考書の中では、かなり王道の参考書です!

Python3の情報は大方網羅されているので、とてもおすすめですよ!

商品ページ↓

入門Python 3 [ ビル・ルバノビック ]

詳しい紹介記事↓
ai-shirocha.hatenablog.com

Spyder基本操作!コンソール編

はじめに

この記事では、Anacondaの中に入っているSpyderの基本操作について紹介します


今回はコンソールとかの操作を紹介していきます

レイアウト編はコチラ↓
ai-shirocha.hatenablog.com

起動~画面の見方編はコチラ↓
ai-shirocha.hatenablog.com


IPythonコンソールでできること

ここではPythonの対話モードが使用できます

つまり、一行ごとにコードが実行できるってことですね

>>> print('Hello world')
Hello world

なお、配色はスプリクトファイルのものが引き継がれます


入力と出力

ウィンドウをクリックして普通にキーを押すだけです

特別な操作は必要ありません

Enterキーを押せば実行されます

入力したコードによっては改行されますが

もう一度Enterキーを押すことで実行されます


コンソールの追加

Spyderでは、複数のコンソールをタブによって管理することができます

歯車マークをクリック→IPythonコンソールを開く
または

ショートカット「Ctrl + T」

で新しくコンソールが作成されます


作成には数秒かかります


コンソールのクリア

「cls」でのクリア

「cls」と入力し実行すると、それまでのコンソールがすべてクリアされ消えてなくなります

ヒストリログには残るので、履歴の確認は可能です


また、コンソールのウィンドウが消えてなくなるわけではなく、

設定された変数もすべて残っています

あくまで見えなくなるというだけです


変数のリセット

右上の歯車マークのお隣、

歪んだ消しゴムのアイコンから設定した変数をすべて削除することができます


コンソールタブの削除

コンソール名の右にある赤いxをクリックすると、

コンソールがタブごと消えてなくなります


タブが残り一つの時にタブを削除すると、自動で新しいタブが作成されます



切り替え

目的のタブをクリック、

または

ウィンドウ左上のファイルアイコンをクリック→目的のコンソール名をクリック

すると開きます

簡単ですね!


プログラムの中止

プログラム実行中には、歪んだ消しゴムマーク横の四角が

グレーの四角から色付きの四角にランクアップします

それをクリックすると、プログラムを強制的に停止させることができます

ループに入ってしまった時などに使用してください


まとめ

今回は、Spyderの基本操作

コンソール編!でした!!


シンプルに操作できるので、初心者の方にも簡単に使えるのです!

Pythonインタラクティブモードは一行ごとのコードの確認などに使うと便利だと思います


さいごに

読んでくださった方、ありがとうございますー!

嬉しいです(#^^#)


SpyderはAnacondaをインストールすると標準装備で付いてくるので

使いたい!と思った方はAnacondaをインストールしてみてくださいー

Anacondaについての記事はコチラです↓
ai-shirocha.hatenablog.com

Python関数紹介!!分割と結合split/join編

はじめに

この記事では、Pythonの関数

リスト型・str型に関わる「split」と「join」を紹介します


文字列を分割する「split」

組み込みの文字列関数split()を使えば、セパレータに基づいて文字列を分割し、部分文字列のリストを作ることができる。
引用元:Bill Lubanovic著「入門 Python 3」(オライリー・ジャパン発行)

セパレータとは文字を区切る合図のようなもののことです

データ型の変換で言うと、str(文字列)型→リスト型ですね

下記の通りに記述して下さい

>>> foods = 'りんご,apple みかん,orange レモン,Lemon'
>>> print(foods)
りんご,apple みかん,orange レモン,Lemon
>>> foods_list = foods.split(' ')
>>> print(foods_list)
['りんご,apple', 'みかん,orange', 'レモン,Lemon']

「変数名ドットsplit(引数)」の順に記述します


リストを連結する関数「join()」

join関数は、先のsplitの逆の作用を持っています

データ型はリスト型→文字列型って感じです

記述例は以下の通り

>>> flower = ','.join(flower_list)
>>> print(flower)
himawari,asagao,ajisai,yokuwakaranhana

joinの場合、splitとは記述の順番すら逆になります

殺意が湧きますね!

「セパレータドットjoin(変数名)」の順です


まとめ

今回の記事ではリスト型と文字列型の変換ができる関数を紹介しました!

どうにもややこしいのが多いですが、頑張らないとですね!


さいごに

さいごに、私が今使っている参考書を紹介します!

Pythonの参考書といえば、これ!ってやつ!

今回の関数もこの参考書で知りました


紹介記事です↓
ai-shirocha.hatenablog.com

購入サイト↓

入門Python 3 [ ビル・ルバノビック ]

Pythonの参考書紹介!!(入門Python3/Bill Lubanovic著)

はじめに

この記事では、オライリー・ジャパン出版のPython入門書「入門 Python 3」を紹介します

この前本屋さんで注文したのが届いたので、

とてもハッピーなしろちゃの感想とかも交えて紹介していきますー


この本です↓

入門Python 3 [ ビル・ルバノビック ]


基本情報

2015年12月1日 初版第1刷発行
2018年7月18日 初版第8刷発行

著者   Bill Lubanovic(ビル・ルバノビック)
監訳者  斎藤康毅(さいとうこうき)
訳者   長尾高弘(ながおたかひろ)
発行人 (ティム・オライリー
制作  (ビーンズ・ネットワークス)
(以下略)

入門 Python 3巻末より

サイズは文芸書くらいで、厚さは3cmくらいです

一般的な参考書よりちょっとコンパクトなイメージですね


カバーはハードではなくソフトなので、おそらく殴っても人は死なないでしょう

それは不慮の事故ではなく何らかの殺意が絡んでいると思います

か弱いしろちゃも片手で持てる重さです


レイアウト

外側

見た目はかなりスタイリッシュと言いますか、個性的というか、芸術的です

カバーを外しても蛇ちゃんはいなくならないので、爬虫類アレルギーの方はご注意ください

外のカバーと内側の柄は色も含めて全く同じです


かなりオシャレなので、持ってたら様になりそうですね

中身

こういった多くの理系参考書がそうであるように横書きです

色はカラーではなくモノクロで、文字も少々小さめ

読書嫌いの方には少しとっつきにくいかもしれません


構成はかなりシンプルで余計な情報も少ないのですが

それだけに大切な情報とそうでない情報を注意して見分ける必要があります


多いわけではありませんが、イラストなども諸所に使われており

たまに気を抜くこともできる感じです


章の構成は12章に加え

前書き、いくつかの付録がついています

もちろん巻末には索引もあるので、辞書のような使い方も可能です

f:id:ai_shirocha:20191124001313p:plain
鞄やアクセサリーのことではありません!

Pythonについての情報は、ほぼすべて網羅されています


各章の後ろには復習問題もついています

もちろん回答も!


内容

基本情報からも分かるように、著者は日本人ではありません

コードの例文にも英語が出てくることが多いです

というかほぼ英語です

(私が読んだところにはやたらとDackが出てきました

これはアヒルということでいいんでしょうか)

ここも難しいところは日本語で訳が出てくるので、安心ですね!


本文にも外国語独特の言い回しやジョーク、比喩表現などが使われている部分があります

しかしそういうのにはちゃんと解説が入っていて、割と楽しめます


前書きにも書かれているのですが、著者はかなりユニークな人物らしく

結構頻繁にジョークを入れてきます

Strong typing(強い型付け)と言っても、キーを強く押せという意味ではない(日本語ではピンとこないだじゃれ)

私たちは一般に手の指、足の指とも10本ある(私の猫のなかには、指の数が少し多いものが一匹いるが、彼は数を数えるために指を使うことはまずない)。

すべてのマシンにPython 3がプレインストールされるようになる頃には、トースターは毎日スプリンクルの乗ったドーナツを作ってくれる3Dプリンターに置き換わっているだろう。

このほかにも色々あります

しろちゃのセンスには大きな問題があると思いますが

それでも「これ好き」って思ってくださった方は絶対楽しんで読めると思います


我らがGoogle先生を愚弄するわけではないのですが、

やっぱりGoogle先生にはできないユニークな訳が読めるのもすごく魅力ですよね

最初の方に、他言語とPythonを比較しているところがあるのですが

その訳がまた秀逸で、面白いです

f:id:ai_shirocha:20191124005340p:plain
小説みたいに読めるのです!!


Pythonの情報については、ほぼほぼ網羅されています

それだけに難しいのですが、用語については各々説明があるので注意深く読んでいけば大丈夫です


入門書を一冊終わった方でも、得るものがあると思います

また、別の言語を習得している方にもおすすめです


こんな人におすすめ!

  • シンプルな本がいい!
  • 読書が好き!
  • 辞書のように使いたい!
  • 長い間使える本がいい!
  • 一冊を通してPythonの情報を網羅したい!
  • 知っている言語にPythonを加えたい!
  • 有名な本で勉強したい!

さいごに

今回はPythonの参考書を紹介しました!

自分に合った本を見つけてくださいー!


入門Python 3 [ ビル・ルバノビック ]