Share
Embed
Pythonのキホン
イベント「Pythonのキホン」で使用した資料です。
動画と併せてご利用ください。
https://youtu.be/anArfXn-hj0
EngineerCafe
September 23, 2023
Transcript
66 slides
-
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 いずれも、キー操作の後はエンターキーで決定します。 -
先ほどからちょこちょこ出てきている () がついたもの。 これを「関数」と呼びます。 (厳密には違いますが今はざっくり覚えてください ) 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回 -
計算結果を求めるだけではただの電卓代わりですね。 しかも電卓の方が使いやすいくらいです。 プログラミングの必要性がある複雑な計算をしてみましょう。 複雑な計算をするには、「変数」を使用すると幅が広がります。 変数とは何か? 変数は「箱」のようなものを想像してみてください。 その箱には、1種類のものだけ入れることができます。 文字でも数字でも、1種類だけ入れることができます。 123 (数式・数列)
どちらか1つだけです。 最初に入れたものがあっても、消して (上書きして) 次に入れたものが残る箱です。 -
計算結果を求めるだけではただの電卓代わりですね。 しかも電卓の方が使いやすいくらいです。 プログラミングの必要性がある複雑な計算をしてみましょう。 複雑な計算をするには、「変数」を使用すると幅が広がります。 変数とは何か? 変数は「箱」のようなものを想像してみてください。 その箱には、1種類のものだけ入れることができます。 文字でも数字でも、1種類だけ入れることができます。 123 (数式・数列)
”こんにちは” (文字列) どちらか1つだけです。 最初に入れたものがあっても、消して (上書きして) 次に入れたものが残る箱です。 -
それでは「名前」、「年齢」の名前を付けた変数を用意します。 宣言は以下の通りに行います。 >>> 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つめの引数は挿入する内容です。 予め指示されている動きを行うものが塊として定義付けられたものをメソッドと呼びます。 -
変数やリストの使い方、なんとなく掴めてきたでしょうか? 変数はひとつだけ要素を入れられて、中身を書き換えたり計算に用いることで中身を変えていくことができて、リス トは要素を増やしたり減らしたり、取り出したりして使うもの、となんとなく分かっていれば それで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' -
ライブラリ(図書館)はパッケージ(本)をいくつも格納していて、 欲しいパッケージをダウンロードして使う仕組みです。 (モジュールはいわばパッケージの中身、つまり本に例えれば文章 ) ちなみに、ライブラリには標準ライブラリと外部ライブラリがあり、 標準ライブラリは最初から 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になる) -
昇順が降順になっていたでしょうか? それでは次はシャッフルしてみます。 シャッフルは標準ライブラリ内にある randomモジュールを使用します。 >>> import random これでランダムモジュールがインポートされましたので、シャッフルのための shuffle関数を使用します。 >>>
random.shuffle(A_list) 見た目では分かりませんので、 print関数で表示してみてください。 結果はどうなっていましたか? シャッフルされていれば成功です! -
たしかに運が左右する数値が出てきますが、これはおみくじとはちょっと言い難いですね。 私たちが想像するおみくじとは、「大吉」「中吉」「吉」「小吉」「末吉」「凶」「大凶」のどれかを ランダムに引くものですね。 この中から引けば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でその結果を表示する -
いかがでしたか? 簡単な内容ではありましたが、以上が定義のやり方となります。 今回、イベントでは ・基本的な数式の入力の仕方 ・print関数による出力 ・変数の概念とリストの使い方 ・変数とリストの命名ルールについて ・モジュールについて ・randomモジュールのインポートと、簡単な乱数の使い方 ・for文による条件付きの繰り返しについて
・おみくじのプログラムを組む ・定義の方法について をやってみました。 まだまだ入口に過ぎず、 if文やwhile文、ループ処理などなど、やってない事の方が多くあります。 Python自体はとっつきやすく、誰でもプログラムをキレイに組むことができる言語ですが、 他の言語同様、履修は容易ではありません。日々こつこつと覚えていく他ないのです。 千里の道も一歩から!頑張ってくださいね。 おさらい