Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonのキホン
Search
EngineerCafe
September 23, 2023
Technology
0
180
Pythonのキホン
イベント「Pythonのキホン」で使用した資料です。
動画と併せてご利用ください。
https://youtu.be/anArfXn-hj0
EngineerCafe
September 23, 2023
Tweet
Share
More Decks by EngineerCafe
See All by EngineerCafe
git勉強会 (基本的なコマンドを覚えよう)
engineercafe
0
30
エンジニアのための論文ゆる輪読会 #1【 #ゆるりん 】
engineercafe
0
53
git勉強会(トラブルシューティングについて考えよう)
engineercafe
0
180
Unityの環境構築
engineercafe
0
29
git勉強会(ブランチを操作しよう)
engineercafe
0
210
GoogleツールでLINEBotを作ってみよう~GAS基礎編~
engineercafe
0
94
GoogleツールでLINEBotを作ってみよう~実践編~
engineercafe
0
140
アート×エンジニアMeeting(仮)#4 AI絵本 チーム1の絵本
engineercafe
0
46
アート×エンジニアMeeting(仮)#4 AI絵本 チーム2の絵本
engineercafe
0
44
Other Decks in Technology
See All in Technology
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
110
OS 標準のデザインシステムを超えて - より柔軟な Flutter テーマ管理 | FlutterKaigi 2024
ronnnnn
0
210
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
140
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
心が動くエンジニアリング ── 私が夢中になる理由
16bitidol
0
100
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
300
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
130
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
950
Engineer Career Talk
lycorp_recruit_jp
0
190
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
1.1k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Fireside Chat
paigeccino
34
3k
Thoughts on Productivity
jonyablonski
67
4.3k
For a Future-Friendly Web
brad_frost
175
9.4k
4 Signs Your Business is Dying
shpigford
180
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Adopting Sorbet at Scale
ufuk
73
9.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Transcript
Pythonのキホン エンジニアカフェ主催 中高生・初心者向けコーディングイベント エンジニアカフェスタッフ 永石 好
Pythonについて オランダ出身・アメリカ在住のプログラマー、 Guido van Rossum (グイド・ヴァンロッサム )が開発したスクリプト言 語。 バージョン0.9が公開されたのは1991年、1.0が公開されたのは1994年です。 非常に柔軟に出来ていて、簡潔な記述方法、誰が書いても読みやすいコード
(可読性に優れる)であり、 扱いやすい言語として幅広い支持を得ています。 代表的なところとして、 Amazon、Dropbox、Youtube、Netflixなど、重要なところで使われています。
何が簡潔なのか? プログラミング言語とは「こうしてほしい」「ああしてほしい」ということを命令にして コンピューターに処理をさせるための言語です。 そのため、記述のためのルールが厳しく、ひとつでも間違えばエラーが返ってきます。 このエラーの原因を探るのも一苦労です。 (開発環境にもよる) ところがPythonでは、限定的ですが多少の間違いがあっても見逃して実行してくれます。 つい他の言語のクセが出ても見逃してくれるため、非常に扱いやすいわけです。 また、記述方法がシンプルで独特なため、誰が見ても分かりやすいコードになるように設計されています。 それでは、早速Pythonをインストールしてみましょう!
まずはコマンドプロンプト (Macの場合はターミナル、 Linuxではシェルプロンプト )を起動します。
コマンドプロンプト(ターミナル)の開き方 Windowsの場合→スタートメニュー を開き、検索ボックスで「コマンドプロンプト」と入力 Macの場合→Launcherを開き、検索ボックスで「ターミナル」と検索するか、 「その他フォルダ」の中に格納されている「ターミナル」をクリック Linux の場合→Ctrl + Alt + F2
キーを同時押し Pythonのインストール方法 コマンドプロンプトで「 python」と入力します。 エンターキーを押して確定すると、インストール済みの場合はインタラクティブシェルモードが起動しま す。 インストールしていない状態の場合、 MicrosoftStoreなどのアプリが開いてインストールを促す画面に なりますので、インストールします。 \ 簡単だね! /
そもそもPCがMacであれば標準でインストール されていますが、 アップデートが必要になる場合がありますのでチェックしてください。 チェック方法 ターミナル起動 → python --version と入力しエンターキーを押します。 その下にPython〇.〇.〇と表示されますので、 そのバージョンが 3.0.0以上(3系)であることを確認してください。
もし、バージョンが 2系(2.0.0~)の場合はアップデートを行います。 ※バージョンは、特別な理由がなければ最新版を使用した方が良いでしょう。
プログラミングの準備について プログラミングという言葉は、「あらかじめ書いておく」という意味で、ギリシャ語が元になった言葉です。 「書いておく」という言葉の通りに、なにか書くものが必要になりますね。 これを「開発環境」、別名 IDE(Integrated Development Environment:統合開発環境)と呼びます。 開発環境を整えることを「環境構築」と呼びます。 どんな言語を使う場合でも、開発環境は必須です。 「どの言語で」「何を作るのか」に応じて選ぶ必要があります。
Pythonも多くの言語同様、自由に開発環境を選ぶことができますが、 Pythonのために開発された環境も多く存在しま す。それだけ世界中に Python愛用者がいるということですね。 そもそもPythonをインストールした際にも、実は開発環境がついてきます。 「IDEL」というもので、とにかく Pythonコードを簡単に今すぐ書きたいという時には重宝します。 同じくらい早いのがコマンドプロンプトです。 コマンドプロンプトで「 python」と入力してエンターキーを押すと、 「インタラクティブ(対話モード)シェル」というものが起動します。 今回はこの方法を使って Pythonを学んでいきます。
ちなみに… Pythonのための環境構築といえば、代表格は「 Anaconda」です。 とはいえ、Anacondaは開発環境とは少し違います。 インストール管理ソフトウェアという位置付けであり、 Pythonの開発環境を整えるのに必要なものを用意してくれる ものとなっています。 また、そのインストールは全て仮想環境内で構築するものとなっていますので、より手軽に導入できます。 ただし、AnacondaはMacと相性がよくなく、そのうえ pipという外部モジュールのインポートを行うコマンドが独自の
ものとなっているため、インターネット上にあるコードをそのまま参考にした場合、下手するとクラッシュする (壊れる) こともあるという大変なデメリットも潜んでいます。 そのため、よく調べたうえでの導入が必要となります。 他にもたくさんある開発環境、あなたなら何を選びますか?
コマンドプロンプトは今どのような画面でしょうか? ↑の画像のような画面になっていれば OKです。インタラクティブシェルが起動しています。 以降、この画面のことをインタラクティブシェルと呼称します。 ひとまず、表示に従って copyrightと入力してみましょう。 すると、著作権情報について表示されます。 (綴りを間違ってみても面白いかもしれません ) それでは次に、インタラクティブシェルの終了方法について。
インタラクティブシェルを終了したい時には、 >>> quit() >>> exit() のどちらかを記述します。また、キー操作による終了方法もありますが、こちらは強制的な終了方法のた め、 実行中のプログラムが終了しないなどの問題がある時にのみ行う最終手段です。 キー操作:controlキー+Z、macの場合はcommand+D、Linaxの場合はcontrol+D いずれも、キー操作の後はエンターキーで決定します。
それではプログラミングの第一歩目、文字列を表示してみます。 以下のように記述してください。 >>> print(’Hello World’) 画像と同じように結果が返されましたか? Pythonの世界へようこそ! 通過儀礼です。ご了承ください。
先ほどからちょこちょこ出てきている () がついたもの。 これを「関数」と呼びます。 (厳密には違いますが今はざっくり覚えてください ) pythonでは()が末尾に付いていることで「これは関数ですよ」という宣言のようなものになり、先頭の文章は 関数の名前です。 そして、中に入れる文章で内容を決めています。 よって、終了命令である関数 quitやexitには()の中身がないわけですね。
そして、print関数においては、「print」は表示しなさい、という命令文であり、 ()の中に入れた文章を表示しま す。 ところが、()の中は本来は数式などを入れるものであるため、文字列の表示をしたい際には ’(シングルクォー テーション)で囲んであげる必要があります。 シングルクォーテーションで囲った文章は「文字列」扱いになります。 例え数列を入れても、それは「文字列」であり、計算などに用いることはできません。 正常 数式扱いの記述方法のためエラーが出ています
それでは、次はこう記述してください。 >>> print(’7 + 8’) それでは、数列と文字列の違いを見てみましょう。 以下の関数を入力してください。 >>> print( 7
+ 8 ) どうでしょうか? 15 と表示が返ってくれば成功です。 この命令文を解説するとすれば、 「 7と8を足した数を表示しなさい」になります。 よって、返ってきた結果は 15というわけです。 どうでしょうか? 返ってきた結果は、「 7 + 8」ではないでしょうか。 これは、数式ではなく、「 ’」シングルクォーテーションを用いて囲み、文字列として出力した結果になります。スペー スまできっちりと反映されていると思います。
少し違いが分かってきたでしょうか。 それでは、少し形を変えてみます。 次はこんな風に記述してみてください。 >>> print(’Maker’s space’) どうでしょうか? エラーが出たと思います。 そうです、文字列の中にシングルクォーテーションが含まれていますね。 この場合、シングルクォーテーションが
3つあるため、前半は ’Maker’ で区切られてしまい、 後半がspaceの後から始まっているように見えてしまうわけですね。 そしてその後にはもうひとつあるはずのシングルクォーテーションが見当たらないため、 「ひとつ足りてなくない?」とエラーが返ってきているわけです。 表示したい文章の中にシングルクォーテーションを使わなければいいのかもしれませんが、 そういうわけにもいかないですね。 こんな時には、次のように記述します。 >>> print(”Maker’s space”)
どうでしょうか?今度はエラーなく表示できたのではないでしょうか。 このように、「’」を使う文章を出力したい時は、「 ”」ダブルクォーテーションで囲うとエラーなく記述できます。 また、表示したい文章の中にシングルクォーテーションがなくても、最初からダブルクォーテーションを使用しても普 通に出力できます。 「’」「”」どちらも使える言語は他にもありますが、 Pythonがとっつきやすい理由にはこれも挙げられます。 ちなみに、シングルクォーテーションとダブルクォーテーションを逆の組み合わせで使うこともできます。 【例】>>> print(’そういえば”あれ”はどうなりましたか?’)
表示させたい文字列の中にシングルクォーテーションやダブルクォーテーションがある場合は、 文字列の中にない方のクォーテーションを駆使してみましょう。
それでは、出力結果を色々試してみましょう。 さきほど、(7 +8)のように、ちょっとした計算結果を求めましたね。 コンピューターの世界では数学とは切っても切れない関係にあります。 難しい数式を扱うこともありますが、徐々に覚えていきましょう。 ただし、今回のイベントでは難しいことは省きます。 今覚えることは代表的な演算子です。 よく使うものから紹介していきます。 以下の演算子を使って自由に結果を求めてみてください。 >>>
print() ()の中に好きな数字を使って計算式を入力し、結果を確認してください。 演算子 意味 読み + 左辺に右辺を足す プラス ー 左辺から右辺を引く マイナス、ハイフン * 左辺を右辺で掛ける アスタリスク / 左辺を右辺で割る スラッシュ // 左辺を右辺で割り、余りは切り捨てる スラッシュ2回 % 左辺を右辺で割り、余りだけを丸めて求める パーセント ** 左辺を右辺乗で求める アスタリスク2回
優先順位について プログラムでは、複数の演算子を使った長い数式を用いることがあります。 その場合、演算子に優先順位が存在していて、優先順位に沿って計算するようになっています。 手元に配布している資料の、優先順位についての一覧表を確認してください。 今度は演算子を複数使用してなが~い数式を作り、結果を確認してください。 【例】5+2*3= この場合2*3を優先し、結果に5を加算します。 【例②】7+7+(2+5) この場合は(2+5)を優先し、その結果に 7+7を加算します。
計算結果を求めるだけではただの電卓代わりですね。 しかも電卓の方が使いやすいくらいです。 プログラミングの必要性がある複雑な計算をしてみましょう。 複雑な計算をするには、「変数」を使用すると幅が広がります。 変数とは何か? 変数は「箱」のようなものを想像してみてください。 その箱には、1種類のものだけ入れることができます。 文字でも数字でも、1種類だけ入れることができます。 123 (数式・数列)
どちらか1つだけです。 最初に入れたものがあっても、消して (上書きして) 次に入れたものが残る箱です。
計算結果を求めるだけではただの電卓代わりですね。 しかも電卓の方が使いやすいくらいです。 プログラミングの必要性がある複雑な計算をしてみましょう。 複雑な計算をするには、「変数」を使用すると幅が広がります。 変数とは何か? 変数は「箱」のようなものを想像してみてください。 その箱には、1種類のものだけ入れることができます。 文字でも数字でも、1種類だけ入れることができます。 123 (数式・数列)
”こんにちは” (文字列) どちらか1つだけです。 最初に入れたものがあっても、消して (上書きして) 次に入れたものが残る箱です。
そして、数字を入れた時は、その数字で計算もできます。 つまり、プログラム稼働中に、箱に入れた数字は変えられるというわけです。 「変えられる数字」で変数。と覚えてください。 プログラム中色んな種類の変数を扱いたいことがありますが、入れられる中身は 1個だけなので、 変数が100個ある、なんていうことも普通です。 全部同じ変数だと分かりづらいですよね。 そこで、変数の箱には名前を付けるわけです。 たとえば、「名前」「年齢」を記録しておくことにしましょう。 (変数の名前は必ず英数字で付けます
) name age 何を入れるのか分かりやすく箱に名前を付ける
それでは「名前」、「年齢」の名前を付けた変数を用意します。 宣言は以下の通りに行います。 >>> name = ”福岡太郎” この記述では、「name」という箱に「福岡太郎」という文字列を格納します、という意味です。 文字列なのでダブルクォーテーションで囲みます。 これで、nameという変数には「福岡太郎」という名前が入りました。 それでは次は、年齢を入れる箱を用意して格納してみましょう。
>>> age = 30 これで、ageという変数の中に「30」という数字が格納されました。 次に、その数字と文字列を取り出して表示してみましょう。変数の名前を print関数で表示します。 >>> print(name) 福岡太郎と表示されたでしょうか? 次は年齢を呼び出してください。呼び出し方は上記を参考に、自分で打ち込んでください。 30と表示されれば成功です。
それでは次に、呼び出した変数を繋げて表示してみましょう。 >>> print(name,age) 福岡太郎 30 と表示されれば成功です。 なんだか味気ない表示ですね。 もう少し自然な呼び出し方にしてみましょう。 文字列や数字を繋げる時に、別の文字を入れ込むことができます。 >>>
print(name,”さんは、”, age ,”歳です。”) どう表示されましたか? 福岡太郎さんは、30歳です。 と表示されていれば成功です! このように、呼び出した変数を繋げて表示することができます。 また、変数と変数を繋げて表示したい時、接続詞など別の言葉を入れ込むことができます。 変数や文字と繋ぐ時は ,(カンマ)で区切り、文字列を入力したい時は ””ダブルクォーテーションで囲みます。 >>> print(name,”さんは、”,age,”歳です”)
次は、変数を足して表示してみましょう。 >>> print(name, ”さんは、来年”, age + 1 ,”歳になります”) 福岡太郎さんは、来年 31歳になります
と表示されれば成功です! このように、変数はプログラム中で計算が出来ます。 変数は、途中で上書きもできます。 >>> print(age) >>> age = 40 >>> print(age) と入力してみてください。 最初は 30 と表示されていたはずですが、上書きしたあとは 40 と表示されるはずです。
ところがPythonでは、変数を宣言して中身を入れると、中身に応じて型を変更してくれます。 文字列を入れていた nameに、数字で上書きできるのです。 もちろん、その後計算に使う事もできます。 これを動的型付けと言います。 Python以外のプログラミング言語でもできるものが他にも あります。 1. int型(integer型) 小数を含まない値を扱うためのデータ型。
例:0、 1、 100、 999、 -123 2. float型、double型 小数を含む値を扱うためのデータ型。 例:1.23、3.14、 -99.9 3. char型 1文字を扱うためのデータ型。 シングルクォーテーション (‘)でくくります。 例:’A’、‘B’、’z’、 ‘あ’、’ア’ 4. str型(String型) 文字列を扱うためのデータ型。 ダブルクォーテーション (“)でくくります。 例:”ABC”、“TOKYO”、“プログラミング” 5. boolean型 「真」「偽」を扱うためのデータ型。 例:true false Pythonの ここがスゴい!! 多くの言語では、変数に入れる中身の種類によって型を宣言する必要があります。 ~標準的な型の一覧~
さきほど、変数には1つだけ入れられる、という話をしましたがあれは 嘘です。 といっても100%嘘ではありません。なので嘘というよりも、語弊があった、という感じです。 普通の変数でしたら、入れられるのは 1つだけです。 ただし、2つ以上のものを入れられる変数も存在します。 それがリストです。 たとえば、果物の名前を変数を使って格納するには、 fruit1 =
りんご fruit2 = ぶどう fruit3 = みかん ・ ・ ・ というように、一つ一つの変数に一つ一つの果物の名前を格納しなくてはいけませんが、 fruit = [りんご,ぶどう,みかん,さくらんぼ,レモン,いちご] と、リストとしてひとつの変数名にいくつもの値を格納することができます。 Pythonで扱うリストは数列も文字列でも両方入れることができます。
変数のリストは、まるでロッカーのように順番に入れていきます。 0 1 2 3 4 1つのロッカーにつき1つの中身を入れることができます。 ロッカーは繋げて増やしていくことが可能で、数に限りはありません。 実際にリストを作って好きな中身を格納してみましょう。 >>>
リストの名前 = [”中身1”,”中身2” ,”中身3” ,] リストの名前は半角アルファベット小文字で打ってください。何でもいいですよ。 中身については5つ入れてみてください。こちらも何でもいいですよ。 文字列はシングルかダブルクォーテーションで囲み、数列であればそのまま入力します。 りんご ぶどう みかん さくらんぼ レモン ・・・・・
リストに好きなものを入れたら、今度は中身を表示してみましょう。 >>> リストの名前 どうでしょうか?リストの中身がズラッと出てきましたか? パイナップルでした!! リストの中身を全部引き出さず、ひとつだけ取り出してみましょう。 指定して取り出す場合は、入れた順番の数字を指定します。 【例】 >>> fruit
= ['りんご', 'みかん', 'スイカ', 'パイナップル', 'バナナ'] >>> print(fruit[3]) この場合、何が表示されると思いますか?
リストの中に格納した要素は [0,1,2,3・・・]というように、0から格納していきます。 よって、指定して取り出す際も 0から数えて必要な中身を取り出します。 それでは次に、リストに入れた言葉を入れ替えてみます。 リストの中身全てが書き換わっていいなら最初から書き直しですが、一部の綴りを間違えた、など 理由があってひとつだけ変えたい …ということもありますよね。 そういう時はこうします。 【例】スイカをももに書き換えたい!
>>> fruit[2] = “もも” これは、fruitリスト2番に格納している「スイカ」を「もも」という文字列で上書きします、という 意味になります。 変更が終わったら出力してみます。 見事にスイカがももに変わりましたね!
他にも、リストに関わる便利な方法 (メソッド)があります。 【例】 >>> fruit.append(“ライチ”) (リスト名).append(要素名)はリストの最後に追加していくメソッドです。 >>> fruit.remove(”パイナップル”) (リスト名).remove(“要素名”)はリストの中から一致する値の中で最初にあたるものを 1つ削除します。
例の中ではパイナップルはひとつしかありませんが、 2つあったとしたら先頭のものが先に削除されます。
>>> fruit.pop() (リスト名).pop()は、リストの最後の要素を取り出して削除し、その中身を表示します。 なので中身の最後の要素である「ライチ」が返された後表示してみると、ライチがなくなっているのが 確認できます。 >>> del fruit[1] これはメソッドと違い del文ですが、リストの番号を指定して中身を削除するものです。
削除したあとに表示してみると、 1番目の要素だった「みかん」がなくなっているのが確認できます。
>>> fruit.insert(1,”みかん”) insertメソッドは1つめの引数で要素を追加する場所を指定し (選んだ数字の前)、 2つめの引数で指示した内容を挿入します。 この状況では、リストの 1番目の前に”みかん”を挿入しなさい、という意味になります。 引数とは? 関数は()がついていると話しました。 また()の中身は内容という風に表現していましたが、正確には「引数」と呼びます。
関数では()で指定した引数に従って、予め指示されている動きを行います。 insertでは、引数は2つ取っています。 1つめの引数で場所を、 2つめの引数は挿入する内容です。 予め指示されている動きを行うものが塊として定義付けられたものをメソッドと呼びます。
メソッドと関数の違いって何さ? メソッドとは、オブジェクト指向のプログラミング用語なのです。 関数はオブジェクトに関わらず計算結果を求める際などに使用します。 突き詰めればメソッドも関数で出来ていますが、呼び出し方に少し違いがあります。 メソッドとは明確な目的があって作られているものになりますので、呼び出す際には必ず値や変数に付けて呼び 出します。(fruit.insert(1,”みかん”)のように) その値や変数の型によって使えるメソッドが異なってきます。 .(ドット)と付いて何かを指示する …のがメソッド、と今は覚えて構いません。 正確には違うのですが、追々知識をアップデートしていきましょう。
変数やリストの使い方、なんとなく掴めてきたでしょうか? 変数はひとつだけ要素を入れられて、中身を書き換えたり計算に用いることで中身を変えていくことができて、リス トは要素を増やしたり減らしたり、取り出したりして使うもの、となんとなく分かっていれば それでOKです! ちなみにリストには、中身を書き換えられないようロックをかけたものも作れます。 取り出して使うけど絶対に中身を書き換えたくない!なくなったら困る!というものに使います。 ロックしたリストの書き方は >>> list =
(10,20,30,・・・) という書き方です。 通常のリストが [ ] で要素を囲うのに対し、ロックをかけるリストでは ( ) を用いて囲います。 この、ロックをかけたリストを 「タプル型(tuple)」といいます。 タプル型のリストの中身を取り出す時は、通常と同じく [ ] を用います。 【例】 >>> engineercafe = (”スタッフ1”,”スタッフ2”,”スタッフ3”・・・) >>> print(engineercafe[2]) スタッフ3
変数の命名ルールについて 変数の名付け方にはルールがあります。これを守らないと、プログラムが正しく動きません。 ①アルファベットのa~z、A~Z、0~9、_(アンダーバー、アンダースコア)を使用する 実は漢字などの全角文字も対応しているのですが、半角の演算子や関数と混在することになり 混乱の元となること、入力が面倒になることからオススメはできません。 また、アンダーバー以外の記号については使用することができません。 ②先頭文字が数字は× たとえば「1days」のように、数字から始まる変数はアウトです。 同じ理由から、「001」のように数字のみの命名も禁止されています。 ②予約語と同じ命名は×
予約語というのは、プログラミング中に使う事のある文字列で、 定義と混同するため禁止されています。予約語は以下の通り。 ただし、予約語に使われている文字列に何らかの文字を足す分には OKです。 【例】password, try_take1, など 'False' 'None' 'True' 'and' 'as' 'assert' 'async' 'await' 'break' 'class' 'continue' 'def' 'del' 'elif' 'else' 'except' 'finally' 'for' 'from' 'global' 'if' 'import' 'in' 'is' 'lambda' 'nonlocal' 'not' 'or' 'pass' 'raise' 'return' 'try' 'while' 'with' 'yield'
予約語一覧については、モジュールで読み込んで確認することができます。 >>> import keyword >>> keyword.kwlist 上記を記述して実行すると、現在使用しているバージョンで予約語として使われているものの一覧が表示されま す。分からなくなった時はこれを思い出すと便利です。 …モジュール? 聞きなれない言葉が出てきましたね。
Pythonではモジュールというのは欠かせない存在です。
Pythonはスクリプト言語ですがオブジェクト指向でもあります。 いくつもの関数をまとめて、動きが似た一連のセットを 「モジュール」と呼び、そのモジュールは誰でも利用できるようになっています。 また、そのモジュールがいくつか関連のあるものでセットになって配布されているものを「パッケージ」と呼びま す。 このパッケージが集まったものを更に「ライブラリ」と呼びます。 「ライブラリ」という言葉が示す通り、「図書館」のような場所を思い浮かべるとイメージしやすいと思います。 モジュールとは?
ライブラリ(図書館)はパッケージ(本)をいくつも格納していて、 欲しいパッケージをダウンロードして使う仕組みです。 (モジュールはいわばパッケージの中身、つまり本に例えれば文章 ) ちなみに、ライブラリには標準ライブラリと外部ライブラリがあり、 標準ライブラリは最初から Pythonにインストールされているものです。 外部ライブラリは開発者や有志が作成したもので、気軽に誰でも使えるよう GitHubのような場所でパッケージが公開 (アップロード)されています。
Pythonはこの外部ライブラリが非常に充実しているというわけです。 世界中にユーザーを数多く抱える Pythonならではなのです。
Pythonが非常に柔軟に、軽いコードで済むのはひとえにこのモジュールのおかげとも言えるでしょう。 Pythonは必要な機能をモジュールとして読み込んで使うことで、よりスリムに、より軽くスタイリッシュに 動けるよう設計されているのです。 Pythonは他の言語に比べて動作速度が劣るという性質があります。 つまり逆に言えば、必要なパーツをモジュールとして読み込んで使うことで、 なるべく軽く動かせるよう工夫しているとも言い換えられます。 さて、ちょっと寄り道をしてしまいましたが、もう少しリストについて学びましょう。 リストには通常のリスト (リスト型)と鍵のかかるタプル型があると説明しました。 この他にも、辞書型、セット型と呼ばれるリストがあります。
辞書型とは、リストの番号と中身を関連付けて格納することが出来るリスト です。 セット型とは、要素をばらばらに格納できるリスト のことです。 重いのキラーイ むずかしいのもキラーイ
リストは、ロッカーのように順番に入れていくと説明しましたね。 0 1 2 3 4 りんご ぶどう みかん さくらんぼ
レモン ・・・・・ 普通のリストであれば、中身を取り出す時は入れた順番を指定します。 辞書型では、0から順番に入れるのではなく、キーを与えてキーに関連付けて値を格納します。 格納する中身に番号などの書かれたタグを付けておいて、あとでそれを索引する、というようなイメージで す。 辞書型について
たとえばこのようなイメージです。 り ぶ み さ れ りんご ぶどう みかん さくらんぼ
レモン 0から順に、という概念はなく、キー (key)と値(value)をセットで保存する、というようなイメージです。 キーは数字でも、文字列でも使用できます。 なので使い方によっては、キーを果物の名前、値には価格を入れておく、なども可能です。 (その逆もできます)ただし、キーの重複はできません。記述してもエラーは出ませんが、 上書きしていきますので、先に入力していた分は消えてしまいます。 後から索引する時はキーを指定します。 辞書型について②
辞書型について③ 辞書型の記述はこのように行います。 >>> fruit = {”り”:”りんご”,”み”:”みかん”,”ぶ”:”ぶどう”} >>> fruit = {100:”りんご”,398:”みかん”,598:”ぶどう”}
{}で要素を足していきます。 キーを入力し、「 : 」コロンで繋ぎ、値を入力。 区切る時はカンマを付けていきます。 数字を入力する時は ””が必要ありません。 索引する時はキーを指定しますので以下のようになります。 画像では直接リストの名前で索引していますが、もちろん print関数 でも表示できます。 >>> print(fruit[”り”]) キーが文字列の場合は ””で囲むことなどには注意が必要です。
セット型について セット型には順番に入れていくという概念がありません。 とりあえずひとつのグループだよ、くらいの意味合いしかないので、 辞書型やリスト型に比べて出番は少ないかもしれません。 りんご ぶどう みかん さくらんぼ レモン
セット型について② 仕組み的には、空っぽのセット型リストを用意し、その中へ要素を追加していきます。 >>> set_list = set() 上記の記述で空っぽのセット型リストが出来ます。 要素を追加する時は addメソッドを使用し、次のように記述します。 >>>
set_list.add(1) >>> set_list.add(2) >>> set_list.add(3) 1つずつ追加していく形です。 また、リストの中身は重複しないようになっています。 なので、同じ要素を追加しようとしても、エラーは返ってきませんが追加もされません。 >>> set_list.add(3) (3は既にリストにあるため追加をスルーする )
セット型について③ セット型リストの中身を削除するには >>> set_list.remove(1) ※()内は削除したい要素 と記述します。重複するデータは存在しませんのでこれで削除できます。 追加したリストの中身を print関数で見ることはできますが、取り出して使うことはできません。 セット型のリストは「要素があるかないか」の真偽値を返すことで使うので、使い方としてはフラグを管理する リストとして使うのがいいかもしれません。 (セット型リストの中に
1という要素があるかないかで分岐するプログラムを組む、など ) 真偽値の問い方は以下の通りです。 >>> 1 in set_list (set_listの中に1はあるか?という問い。返ってくるのは TrueかFalseです) 初心者のうちはリストの種類を覚えるのも大変なので、ひとまずは「こういう種類もあるんだな」程度で捉えて かまいません。
リストにも種類があることを学びました。 次はせっかくなので、リストの中身を入れ替える動きを試してみましょう。 入れ替えると言っても、挿入や上書きではなくてソート (整理)です。 その為に、まずはリストを用意します。 今回は普通にリスト型で。 まずは空っぽのリストを作成してみます。 >>> A_list =
[] 「A_list」という名前の空っぽのリストができました。 要素を追加する時は >>> A_list.append(1) でひとつずつ追加できますし、最初から用意するやり方 >>> A_list = [1,2,3,4,5,6,7,8,9] もありますね。 それから、複数の要素を一気に後から追加するやり方 >>> A_list.extend = ([1,2,3,4,5,6,7,8,9])もあります。
さぁ、それでは1から100までの数字を入れたリストを用意してください。 無茶言いましたね。 1から100までの数字が入ったリスト。 全部で100個の要素が入ったリストを作れと。 手動で入れますか?手間がかかりすぎますね。 こういう時は、自動で数字を格納する動きをプログラミングします。 やって欲しいことを書き出してみます。 A_listに、1~100までの数字を1つずつ格納し、合計100個の要素を格納したい こういう時に使う便利な文法があります。 for文です。
for文とは、繰り返し命令です。意味は「~~までの間」というような感じです。 〇〇回繰り返す、あるいは〇〇まで繰り返す、など、 停止する条件を決めて 条件を満たすまで何度も繰り返して行うよう指示するものです。 今回でいえば、リストの中身が 100個になるまで、あるいは 100回繰り返す、でOKです。
繰り返すプログラムといっても、 1を100個入れられても困りますね。 こういう時は、変数を上手く使います。 変数に1という数字を入れておき、 1つずつ数字を増やしながら、増えたタイミングでリストにコピーする。 そうすると、1から100までの数字をリストの中にコピーできるというわけです。 そのための準備として、変数 intに1を代入して宣言しておきます。 >>> int
= 1 それでは試してみます。 記述はとても簡単です。 for文では改行が必要になります。 その場合、 : コロンで「改行があるけどプログラムとしてひと塊だよ」という目印が必要になります。 この目印のあとにはスペースを 4つ入れて字下げを行いますが、それを「インデント」と呼びます。
インデントとは? Pythonにおいて、インデントは非常に重要な役割を持ちます。 インデントとは、文字の前に「空白 (スペース)」を4つ入れて字下げを行う行為のこと。 空白を同じ数だけ与えた文章たちをグループと認めます というような意味になります。 ちなみにインデントは、スペースでも、タブでもどちらでも可能です。 ただし、スペース4つとタブのインデントでは意味が異なりますので、ひと塊の中では統一する必要がありま す。 ソースコードをコピペで利用した場合、混在することがありますので、コピペの際には それがスペース4つであるのか、タブキーで設定されたものか確認する必要も出てきます。
今回はグループ化もなにも、一行しかない中身なのであまり意味を強く持つようなことはありませんが、基本的 にこの形は多用することになります。 インデントには早いうちから慣れておくことに越したことはありません。 スペース4つで覚えておくと大体間違いはないでしょう。
これは、解読するとすれば range関数で引数に指定した値 (1から始めて101)になるまで繰り返す、という文になります。 繰り返す内容は2行目の「A_listの中に変数intを追加する」。 101までとしているのは、 intに入れた数が101になると止まる、という意味になりますので、 101になった時には条件を満たしているため A_list.append(int)は行いません。 たとえば、ここを100としていると99回目で終わってしまうので、 101と指定して100回繰り返すように
命令しています。 インタラクティブシェルではこの状態でエンターキーを押すとインデント扱いで・・・の表示がありますが、もう一度エン ターキーを押すことでプログラムの入力が終了したことを示します。 入力待ちの>>>の表示が出てきたら、 print関数で中身を表示してみましょう。 (~までの間) (変数int) (の中に) (range関数を使って1から101になる)
いとも簡単に1から100までの数字を入れる事ができましたね!! では、この数字をソートしてみたいと思います。 ソートと言っても1から昇順で順番に入ってますから、逆に 100から1までの降順に並べ替えてみましょう。 こういう時にはsortメソッドを使用します。 sortメソッドでは、デフォルトで昇順にソートしてしまいますので、逆に降順になるよう、引数 reverseに真偽値で指定 します。 >>> A_list.sort(reverse=True)
print関数で表示して、結果を確認してください。
昇順が降順になっていたでしょうか? それでは次はシャッフルしてみます。 シャッフルは標準ライブラリ内にある randomモジュールを使用します。 >>> import random これでランダムモジュールがインポートされましたので、シャッフルのための shuffle関数を使用します。 >>>
random.shuffle(A_list) 見た目では分かりませんので、 print関数で表示してみてください。 結果はどうなっていましたか? シャッフルされていれば成功です!
さて、そろそろ仕上げとして、おみくじプログラムを作ってみます。 しかし、インタラクティブシェルでプログラミングはできますが、保存には向いていません。 そこで今回は、Googleのサービスのひとつである「 Colaboratry」を使用してプログラミングしていくことにします。
導入について まずは、Google Chromeブラウザを立ち上げます。 自分のアカウントでログインし、「ドライブ」を開きます。 「新規」をクリックすると、ダイアログが表示されいくつかのアプリが見えますが「その他」を選びます。
既に追加したことのある人はここの一覧の中に「 Colaboratry」が表示されますが、 恐らくないはずなので、「アプリを追加」をクリックします。
検索ボックスに「Coraboratry」と入力して検索し、出てきたらインストールします。
権限のリクエストを求めるダイアログが表示されたあと、電話番号の入力を求められます。 アカウントで紐づいているスマートフォンの番号を入力し、スマートフォンに届いたパスワードを ダイアログ画面で入力します。
追加できていれば成功です! 早速開いてみましょう。
記述方法は今までと特に変わったことはありません。 実行する時はコード左端のマークを押すだけです。 最初の実行時に少し時間はかかりますが、一度読み込んだコードの実行は早くなります。 ためしにrandomモジュールを使ってこんなコードを書いてみましょう。 colaboratryではまだモジュールのインポートができてないので、インポートします。 randomモジュールはランダムな数字を出すためのモジュールでしたね。 randint関数は引数1と引数2の間の乱数を返します。
たしかに運が左右する数値が出てきますが、これはおみくじとはちょっと言い難いですね。 私たちが想像するおみくじとは、「大吉」「中吉」「吉」「小吉」「末吉」「凶」「大凶」のどれかを ランダムに引くものですね。 この中から引けば7分の1の確率です。 では、さきほど履修した「リスト型」を使い、 7分の1の確率でくじを引いてみます。 kuji_list = [”大吉”,”中吉”,”吉”,”小吉”,”末吉”,”凶”,”大凶”] リストの中におみくじの運勢を格納しました。
それではこのリストの中から、ランダムに引いてみます。 print(random.choice(kuji_list)) choice関数は「どれかひとつを選ぶ」関数です。 ()内のリストを指定することで、 格納された要素の中からひとつ選びます。 そしてprint関数で表示しています。
めちゃくちゃ簡単すぎて手ごたえがないですね。 しかも7本しかないおみくじとなると、ドキドキ感も少ない気がします (あくまで個人の感想です )。 もう少し難しくしてみましょう。 また、7本だけではなく、本数を増やしてみましょう。 いわゆるパーセンテージで、出る確率を操ってみます。 確率100%のうちで割り振り、大吉と大凶を出しにくくしてみます。 そして「吉」を最も多く引くよう設定してみます。 これを数値化してみると
… 大吉:5% 中吉:10% 吉:50% 小吉:10% 末吉:10% 凶:10% 大凶:5% ざっくりですがこのような形でどうでしょうか? もちろん、確率は好きに設定して大丈夫です!
出る確率を決めたあとは、もちろんプログラミングします。 このくらいの簡単なものなら既存のものを駆使すればできるのですが、ここはあえて難しくして 自分で関数を作っ てみたいと思います。 仕上げにはもってこいですね! 関数を作るとは 関数は今まで組み込み型 (元から用意されているもの )を使用してきました。 この関数は、仕組みを理解すれば自分で作ることができます。
これを「関数の定義」と呼びます。 独自のプログラムを組む時、一連の流れを定義しておくことで呼び出しが非常に楽になる仕組みです。 まずは、行いたい動きを確認し、必要な動きを洗い出します。 ・リストには「大吉」「中吉」「吉」「小吉」「末吉」「凶」「大凶」を格納する ・確率を設定し、乱数を使用してどれかを抽選する ・画面への表示(出力)を行う
確率の導入についてですが、さまざまな方法があります。 ・単純に、リストに%と同じ本数を増やす (大吉と大凶を5本ずつ、、、など) ・100までの数字を抽選した時の条件で振り分ける (1から5までを引いたら大吉、 6から15で中吉、、など) たぶんこの他にもありますが、パッと思いつくのはこの辺でしょうか。 今回は、単純にリストに%と同じだけの数をリストに追加して、シャッフルして、抽選します。 リストのシャッフルに実は意味はありません が、ちょっと定義らしく長くしたいだけです。
定義を作る際には def という一文が必要です。 defはdefineの略で、定義するという意味です。 では、入力していきましょう。 def omikuji(kuji_list): defの次には関数の名前です。今回はおみくじの動きを定義しますので「 omikuji」としました。 ()内は引数です。定義の内容によって中身は数式だったり文字列だったりしますが、 今回はkuji_listを使っての動きになりますので、リストの名前を指定します。
ひとまず全文を打ち込みます。 解説はのちほど。 import random kuji_list = ["大吉"] * 5 +
["中吉"] * 10 + ["吉"] * 50 + ["小吉"] * 10 + ["末吉"] * 10 + ["凶"] * 10 + ["大凶"] * 5 def omikuji(kuji_list): random.shuffle(kuji_list) result = random.choice(kuji_list) print(result)
見慣れないリストの追加を行いました。 同じ要素を指定した数追加するやり方のひとつです。 kuji_list = ["大吉"] * 5 + ["中吉"] *
10 + ["吉"] * 50 + ["小吉"] * 10 + ["末吉"] * 10 + ["凶"] * 10 + ["大凶"] * 5 kuji_listに“大吉”という要素を×5、中吉を10個…というように、要素をそのまま掛け算で増やしています。 また、繋げるために「 +」を使用します。 この場合の「+」は足し算ではなく、「~と」というような意味合いになります。
import random kuji_list = ["大吉"] * 5 + ["中吉"] *
10 + ["吉"] * 50 + ["小吉"] * 10 + ["末吉"] * 10 + ["凶"] * 10 + ["大凶"] * 5 def omikuji(kuji_list): random.shuffle(kuji_list) result = random.choice(kuji_list) print(result) 中身の解説です! randomモジュールのインポート →kuji_listへ大吉5個、中吉10個、吉50個、小吉と末吉、凶を10個、大凶を5個追加 random.shuffleでくじリストをシャッフル、 resultという変数に、ひとつ選んだ要素を格納 printでその結果を表示する
結果が確認できたら、今度は「+コード」を押してコードボックスを増やし、定義を呼び出してみます。 記述は以下の通り。 omikuji(kuji_list) ボックス横の実行ボタンを押して、何度か結果を試してください。 これで定義しましたので、あとは関数を呼び出すだけとなります。 ひとまず、 を押して実行してみましょう。
いかがでしたか? 簡単な内容ではありましたが、以上が定義のやり方となります。 今回、イベントでは ・基本的な数式の入力の仕方 ・print関数による出力 ・変数の概念とリストの使い方 ・変数とリストの命名ルールについて ・モジュールについて ・randomモジュールのインポートと、簡単な乱数の使い方 ・for文による条件付きの繰り返しについて
・おみくじのプログラムを組む ・定義の方法について をやってみました。 まだまだ入口に過ぎず、 if文やwhile文、ループ処理などなど、やってない事の方が多くあります。 Python自体はとっつきやすく、誰でもプログラムをキレイに組むことができる言語ですが、 他の言語同様、履修は容易ではありません。日々こつこつと覚えていく他ないのです。 千里の道も一歩から!頑張ってくださいね。 おさらい
1人では難しい勉強も、仲間がいると励みになりますね。 エンジニアカフェでは、コミュニティの活動も支援しています。 様々なコミュニティが存在していますので、自分に合ったコミュニティを探してみてください! エンジニアカフェにはコミュニティに強いコミュニティマネージャーもおります。 ぜひ相談してみてください。 今回の内容をベースにしたイベントを10/9に予定しています! ぜひご参加ください!! それでは、本日のイベント参加、お疲れ様でした!!!