Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonのキホン

EngineerCafe
September 23, 2023

 Pythonのキホン

イベント「Pythonのキホン」で使用した資料です。
動画と併せてご利用ください。
https://youtu.be/anArfXn-hj0

EngineerCafe

September 23, 2023
Tweet

More Decks by EngineerCafe

Other Decks in Technology

Transcript

  1. コマンドプロンプト(ターミナル)の開き方 Windowsの場合→スタートメニュー     を開き、検索ボックスで「コマンドプロンプト」と入力 Macの場合→Launcherを開き、検索ボックスで「ターミナル」と検索するか、 「その他フォルダ」の中に格納されている「ターミナル」をクリック Linux の場合→Ctrl + Alt + F2

    キーを同時押し Pythonのインストール方法 コマンドプロンプトで「 python」と入力します。 エンターキーを押して確定すると、インストール済みの場合はインタラクティブシェルモードが起動しま す。 インストールしていない状態の場合、 MicrosoftStoreなどのアプリが開いてインストールを促す画面に なりますので、インストールします。 \ 簡単だね! /
  2. プログラミングの準備について プログラミングという言葉は、「あらかじめ書いておく」という意味で、ギリシャ語が元になった言葉です。 「書いておく」という言葉の通りに、なにか書くものが必要になりますね。 これを「開発環境」、別名 IDE(Integrated Development Environment:統合開発環境)と呼びます。 開発環境を整えることを「環境構築」と呼びます。 どんな言語を使う場合でも、開発環境は必須です。 「どの言語で」「何を作るのか」に応じて選ぶ必要があります。

    Pythonも多くの言語同様、自由に開発環境を選ぶことができますが、 Pythonのために開発された環境も多く存在しま す。それだけ世界中に Python愛用者がいるということですね。 そもそもPythonをインストールした際にも、実は開発環境がついてきます。 「IDEL」というもので、とにかく Pythonコードを簡単に今すぐ書きたいという時には重宝します。 同じくらい早いのがコマンドプロンプトです。 コマンドプロンプトで「 python」と入力してエンターキーを押すと、 「インタラクティブ(対話モード)シェル」というものが起動します。 今回はこの方法を使って Pythonを学んでいきます。
  3. コマンドプロンプトは今どのような画面でしょうか? ↑の画像のような画面になっていれば OKです。インタラクティブシェルが起動しています。 以降、この画面のことをインタラクティブシェルと呼称します。 ひとまず、表示に従って copyrightと入力してみましょう。 すると、著作権情報について表示されます。 (綴りを間違ってみても面白いかもしれません ) それでは次に、インタラクティブシェルの終了方法について。

    インタラクティブシェルを終了したい時には、 >>> quit() >>> exit() のどちらかを記述します。また、キー操作による終了方法もありますが、こちらは強制的な終了方法のた め、 実行中のプログラムが終了しないなどの問題がある時にのみ行う最終手段です。  キー操作:controlキー+Z、macの場合はcommand+D、Linaxの場合はcontrol+D  いずれも、キー操作の後はエンターキーで決定します。
  4. 先ほどからちょこちょこ出てきている  () がついたもの。 これを「関数」と呼びます。 (厳密には違いますが今はざっくり覚えてください ) pythonでは()が末尾に付いていることで「これは関数ですよ」という宣言のようなものになり、先頭の文章は 関数の名前です。 そして、中に入れる文章で内容を決めています。 よって、終了命令である関数 quitやexitには()の中身がないわけですね。

    そして、print関数においては、「print」は表示しなさい、という命令文であり、 ()の中に入れた文章を表示しま す。 ところが、()の中は本来は数式などを入れるものであるため、文字列の表示をしたい際には ’(シングルクォー テーション)で囲んであげる必要があります。 シングルクォーテーションで囲った文章は「文字列」扱いになります。 例え数列を入れても、それは「文字列」であり、計算などに用いることはできません。 正常 数式扱いの記述方法のためエラーが出ています
  5. それでは、次はこう記述してください。 >>> print(’7 + 8’) それでは、数列と文字列の違いを見てみましょう。 以下の関数を入力してください。 >>> print( 7

    + 8 ) どうでしょうか? 15 と表示が返ってくれば成功です。 この命令文を解説するとすれば、 「 7と8を足した数を表示しなさい」になります。 よって、返ってきた結果は 15というわけです。 どうでしょうか? 返ってきた結果は、「 7 + 8」ではないでしょうか。 これは、数式ではなく、「 ’」シングルクォーテーションを用いて囲み、文字列として出力した結果になります。スペー スまできっちりと反映されていると思います。
  6. 少し違いが分かってきたでしょうか。 それでは、少し形を変えてみます。 次はこんな風に記述してみてください。 >>> print(’Maker’s space’) どうでしょうか? エラーが出たと思います。 そうです、文字列の中にシングルクォーテーションが含まれていますね。 この場合、シングルクォーテーションが

    3つあるため、前半は ’Maker’ で区切られてしまい、 後半がspaceの後から始まっているように見えてしまうわけですね。 そしてその後にはもうひとつあるはずのシングルクォーテーションが見当たらないため、 「ひとつ足りてなくない?」とエラーが返ってきているわけです。 表示したい文章の中にシングルクォーテーションを使わなければいいのかもしれませんが、 そういうわけにもいかないですね。 こんな時には、次のように記述します。 >>> print(”Maker’s space”)
  7. それでは、出力結果を色々試してみましょう。 さきほど、(7 +8)のように、ちょっとした計算結果を求めましたね。 コンピューターの世界では数学とは切っても切れない関係にあります。 難しい数式を扱うこともありますが、徐々に覚えていきましょう。 ただし、今回のイベントでは難しいことは省きます。 今覚えることは代表的な演算子です。 よく使うものから紹介していきます。 以下の演算子を使って自由に結果を求めてみてください。 >>>

    print() ()の中に好きな数字を使って計算式を入力し、結果を確認してください。 演算子 意味 読み + 左辺に右辺を足す プラス ー 左辺から右辺を引く マイナス、ハイフン * 左辺を右辺で掛ける アスタリスク / 左辺を右辺で割る スラッシュ // 左辺を右辺で割り、余りは切り捨てる スラッシュ2回 % 左辺を右辺で割り、余りだけを丸めて求める パーセント ** 左辺を右辺乗で求める アスタリスク2回
  8. それでは「名前」、「年齢」の名前を付けた変数を用意します。 宣言は以下の通りに行います。 >>> name = ”福岡太郎” この記述では、「name」という箱に「福岡太郎」という文字列を格納します、という意味です。 文字列なのでダブルクォーテーションで囲みます。 これで、nameという変数には「福岡太郎」という名前が入りました。 それでは次は、年齢を入れる箱を用意して格納してみましょう。

    >>> age = 30 これで、ageという変数の中に「30」という数字が格納されました。 次に、その数字と文字列を取り出して表示してみましょう。変数の名前を print関数で表示します。 >>> print(name) 福岡太郎と表示されたでしょうか? 次は年齢を呼び出してください。呼び出し方は上記を参考に、自分で打ち込んでください。 30と表示されれば成功です。
  9. それでは次に、呼び出した変数を繋げて表示してみましょう。 >>> print(name,age) 福岡太郎 30 と表示されれば成功です。 なんだか味気ない表示ですね。 もう少し自然な呼び出し方にしてみましょう。 文字列や数字を繋げる時に、別の文字を入れ込むことができます。 >>>

    print(name,”さんは、”, age ,”歳です。”) どう表示されましたか? 福岡太郎さんは、30歳です。 と表示されていれば成功です! このように、呼び出した変数を繋げて表示することができます。 また、変数と変数を繋げて表示したい時、接続詞など別の言葉を入れ込むことができます。 変数や文字と繋ぐ時は ,(カンマ)で区切り、文字列を入力したい時は ””ダブルクォーテーションで囲みます。 >>> print(name,”さんは、”,age,”歳です”)
  10. 次は、変数を足して表示してみましょう。 >>> print(name, ”さんは、来年”, age + 1 ,”歳になります”) 福岡太郎さんは、来年 31歳になります

    と表示されれば成功です! このように、変数はプログラム中で計算が出来ます。 変数は、途中で上書きもできます。 >>> print(age) >>> age = 40 >>> print(age) と入力してみてください。 最初は 30 と表示されていたはずですが、上書きしたあとは  40 と表示されるはずです。
  11. ところが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の ここがスゴい!! 多くの言語では、変数に入れる中身の種類によって型を宣言する必要があります。 ~標準的な型の一覧~
  12. さきほど、変数には1つだけ入れられる、という話をしましたがあれは 嘘です。 といっても100%嘘ではありません。なので嘘というよりも、語弊があった、という感じです。 普通の変数でしたら、入れられるのは 1つだけです。 ただし、2つ以上のものを入れられる変数も存在します。 それがリストです。 たとえば、果物の名前を変数を使って格納するには、 fruit1 =

    りんご fruit2 = ぶどう fruit3 = みかん ・ ・ ・ というように、一つ一つの変数に一つ一つの果物の名前を格納しなくてはいけませんが、 fruit = [りんご,ぶどう,みかん,さくらんぼ,レモン,いちご] と、リストとしてひとつの変数名にいくつもの値を格納することができます。 Pythonで扱うリストは数列も文字列でも両方入れることができます。
  13. 変数のリストは、まるでロッカーのように順番に入れていきます。 0 1 2 3 4 1つのロッカーにつき1つの中身を入れることができます。 ロッカーは繋げて増やしていくことが可能で、数に限りはありません。 実際にリストを作って好きな中身を格納してみましょう。 >>>

    リストの名前 = [”中身1”,”中身2” ,”中身3” ,] リストの名前は半角アルファベット小文字で打ってください。何でもいいですよ。 中身については5つ入れてみてください。こちらも何でもいいですよ。 文字列はシングルかダブルクォーテーションで囲み、数列であればそのまま入力します。 りんご ぶどう みかん さくらんぼ レモン ・・・・・
  14. >>> fruit.insert(1,”みかん”) insertメソッドは1つめの引数で要素を追加する場所を指定し (選んだ数字の前)、 2つめの引数で指示した内容を挿入します。 この状況では、リストの 1番目の前に”みかん”を挿入しなさい、という意味になります。 引数とは? 関数は()がついていると話しました。 また()の中身は内容という風に表現していましたが、正確には「引数」と呼びます。

    関数では()で指定した引数に従って、予め指示されている動きを行います。 insertでは、引数は2つ取っています。 1つめの引数で場所を、 2つめの引数は挿入する内容です。 予め指示されている動きを行うものが塊として定義付けられたものをメソッドと呼びます。
  15. 変数やリストの使い方、なんとなく掴めてきたでしょうか? 変数はひとつだけ要素を入れられて、中身を書き換えたり計算に用いることで中身を変えていくことができて、リス トは要素を増やしたり減らしたり、取り出したりして使うもの、となんとなく分かっていれば それでOKです! ちなみにリストには、中身を書き換えられないようロックをかけたものも作れます。 取り出して使うけど絶対に中身を書き換えたくない!なくなったら困る!というものに使います。 ロックしたリストの書き方は >>> list =

    (10,20,30,・・・) という書き方です。 通常のリストが [ ] で要素を囲うのに対し、ロックをかけるリストでは ( ) を用いて囲います。 この、ロックをかけたリストを 「タプル型(tuple)」といいます。 タプル型のリストの中身を取り出す時は、通常と同じく [ ] を用います。 【例】   >>> engineercafe = (”スタッフ1”,”スタッフ2”,”スタッフ3”・・・) >>> print(engineercafe[2]) スタッフ3
  16. 変数の命名ルールについて 変数の名付け方にはルールがあります。これを守らないと、プログラムが正しく動きません。 ①アルファベットの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'
  17. リストは、ロッカーのように順番に入れていくと説明しましたね。 0 1 2 3 4 りんご ぶどう みかん さくらんぼ

    レモン ・・・・・ 普通のリストであれば、中身を取り出す時は入れた順番を指定します。 辞書型では、0から順番に入れるのではなく、キーを与えてキーに関連付けて値を格納します。 格納する中身に番号などの書かれたタグを付けておいて、あとでそれを索引する、というようなイメージで す。 辞書型について
  18. たとえばこのようなイメージです。 り ぶ み さ れ りんご ぶどう みかん さくらんぼ

    レモン 0から順に、という概念はなく、キー (key)と値(value)をセットで保存する、というようなイメージです。 キーは数字でも、文字列でも使用できます。 なので使い方によっては、キーを果物の名前、値には価格を入れておく、なども可能です。 (その逆もできます)ただし、キーの重複はできません。記述してもエラーは出ませんが、 上書きしていきますので、先に入力していた分は消えてしまいます。 後から索引する時はキーを指定します。 辞書型について②
  19. 辞書型について③ 辞書型の記述はこのように行います。 >>> fruit = {”り”:”りんご”,”み”:”みかん”,”ぶ”:”ぶどう”} >>> fruit = {100:”りんご”,398:”みかん”,598:”ぶどう”}

    {}で要素を足していきます。 キーを入力し、「 : 」コロンで繋ぎ、値を入力。 区切る時はカンマを付けていきます。 数字を入力する時は ””が必要ありません。 索引する時はキーを指定しますので以下のようになります。 画像では直接リストの名前で索引していますが、もちろん print関数 でも表示できます。 >>> print(fruit[”り”]) キーが文字列の場合は ””で囲むことなどには注意が必要です。
  20. セット型について② 仕組み的には、空っぽのセット型リストを用意し、その中へ要素を追加していきます。 >>> set_list = set() 上記の記述で空っぽのセット型リストが出来ます。 要素を追加する時は addメソッドを使用し、次のように記述します。 >>>

    set_list.add(1) >>> set_list.add(2) >>> set_list.add(3) 1つずつ追加していく形です。 また、リストの中身は重複しないようになっています。 なので、同じ要素を追加しようとしても、エラーは返ってきませんが追加もされません。 >>> set_list.add(3)  (3は既にリストにあるため追加をスルーする )
  21. セット型について③ セット型リストの中身を削除するには >>> set_list.remove(1) ※()内は削除したい要素 と記述します。重複するデータは存在しませんのでこれで削除できます。 追加したリストの中身を print関数で見ることはできますが、取り出して使うことはできません。 セット型のリストは「要素があるかないか」の真偽値を返すことで使うので、使い方としてはフラグを管理する リストとして使うのがいいかもしれません。 (セット型リストの中に

    1という要素があるかないかで分岐するプログラムを組む、など ) 真偽値の問い方は以下の通りです。 >>> 1 in set_list (set_listの中に1はあるか?という問い。返ってくるのは TrueかFalseです) 初心者のうちはリストの種類を覚えるのも大変なので、ひとまずは「こういう種類もあるんだな」程度で捉えて かまいません。
  22. リストにも種類があることを学びました。 次はせっかくなので、リストの中身を入れ替える動きを試してみましょう。 入れ替えると言っても、挿入や上書きではなくてソート (整理)です。 その為に、まずはリストを用意します。 今回は普通にリスト型で。 まずは空っぽのリストを作成してみます。 >>> 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])もあります。
  23. さぁ、それでは1から100までの数字を入れたリストを用意してください。 無茶言いましたね。 1から100までの数字が入ったリスト。 全部で100個の要素が入ったリストを作れと。 手動で入れますか?手間がかかりすぎますね。 こういう時は、自動で数字を格納する動きをプログラミングします。 やって欲しいことを書き出してみます。 A_listに、1~100までの数字を1つずつ格納し、合計100個の要素を格納したい こういう時に使う便利な文法があります。 for文です。

    for文とは、繰り返し命令です。意味は「~~までの間」というような感じです。 〇〇回繰り返す、あるいは〇〇まで繰り返す、など、 停止する条件を決めて 条件を満たすまで何度も繰り返して行うよう指示するものです。 今回でいえば、リストの中身が 100個になるまで、あるいは 100回繰り返す、でOKです。
  24. 繰り返すプログラムといっても、 1を100個入れられても困りますね。 こういう時は、変数を上手く使います。 変数に1という数字を入れておき、 1つずつ数字を増やしながら、増えたタイミングでリストにコピーする。 そうすると、1から100までの数字をリストの中にコピーできるというわけです。 そのための準備として、変数 intに1を代入して宣言しておきます。 >>> int

    = 1 それでは試してみます。 記述はとても簡単です。 for文では改行が必要になります。 その場合、 : コロンで「改行があるけどプログラムとしてひと塊だよ」という目印が必要になります。 この目印のあとにはスペースを 4つ入れて字下げを行いますが、それを「インデント」と呼びます。
  25. これは、解読するとすれば range関数で引数に指定した値 (1から始めて101)になるまで繰り返す、という文になります。 繰り返す内容は2行目の「A_listの中に変数intを追加する」。 101までとしているのは、 intに入れた数が101になると止まる、という意味になりますので、 101になった時には条件を満たしているため A_list.append(int)は行いません。 たとえば、ここを100としていると99回目で終わってしまうので、 101と指定して100回繰り返すように

    命令しています。 インタラクティブシェルではこの状態でエンターキーを押すとインデント扱いで・・・の表示がありますが、もう一度エン ターキーを押すことでプログラムの入力が終了したことを示します。 入力待ちの>>>の表示が出てきたら、 print関数で中身を表示してみましょう。 (~までの間) (変数int) (の中に) (range関数を使って1から101になる)
  26. 出る確率を決めたあとは、もちろんプログラミングします。 このくらいの簡単なものなら既存のものを駆使すればできるのですが、ここはあえて難しくして 自分で関数を作っ てみたいと思います。 仕上げにはもってこいですね! 関数を作るとは 関数は今まで組み込み型 (元から用意されているもの )を使用してきました。 この関数は、仕組みを理解すれば自分で作ることができます。

    これを「関数の定義」と呼びます。 独自のプログラムを組む時、一連の流れを定義しておくことで呼び出しが非常に楽になる仕組みです。 まずは、行いたい動きを確認し、必要な動きを洗い出します。 ・リストには「大吉」「中吉」「吉」「小吉」「末吉」「凶」「大凶」を格納する ・確率を設定し、乱数を使用してどれかを抽選する ・画面への表示(出力)を行う
  27. 確率の導入についてですが、さまざまな方法があります。 ・単純に、リストに%と同じ本数を増やす (大吉と大凶を5本ずつ、、、など) ・100までの数字を抽選した時の条件で振り分ける (1から5までを引いたら大吉、 6から15で中吉、、など) たぶんこの他にもありますが、パッと思いつくのはこの辺でしょうか。 今回は、単純にリストに%と同じだけの数をリストに追加して、シャッフルして、抽選します。 リストのシャッフルに実は意味はありません が、ちょっと定義らしく長くしたいだけです。

    定義を作る際には def という一文が必要です。 defはdefineの略で、定義するという意味です。 では、入力していきましょう。 def omikuji(kuji_list): defの次には関数の名前です。今回はおみくじの動きを定義しますので「 omikuji」としました。 ()内は引数です。定義の内容によって中身は数式だったり文字列だったりしますが、 今回はkuji_listを使っての動きになりますので、リストの名前を指定します。
  28. ひとまず全文を打ち込みます。 解説はのちほど。 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)
  29. 見慣れないリストの追加を行いました。 同じ要素を指定した数追加するやり方のひとつです。 kuji_list = ["大吉"] * 5 + ["中吉"] *

    10 + ["吉"] * 50 + ["小吉"] * 10 + ["末吉"] * 10 + ["凶"] * 10 + ["大凶"] * 5 kuji_listに“大吉”という要素を×5、中吉を10個…というように、要素をそのまま掛け算で増やしています。 また、繋げるために「 +」を使用します。 この場合の「+」は足し算ではなく、「~と」というような意味合いになります。
  30. 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でその結果を表示する
  31. いかがでしたか? 簡単な内容ではありましたが、以上が定義のやり方となります。 今回、イベントでは ・基本的な数式の入力の仕方 ・print関数による出力 ・変数の概念とリストの使い方 ・変数とリストの命名ルールについて ・モジュールについて ・randomモジュールのインポートと、簡単な乱数の使い方 ・for文による条件付きの繰り返しについて

    ・おみくじのプログラムを組む ・定義の方法について をやってみました。 まだまだ入口に過ぎず、 if文やwhile文、ループ処理などなど、やってない事の方が多くあります。 Python自体はとっつきやすく、誰でもプログラムをキレイに組むことができる言語ですが、 他の言語同様、履修は容易ではありません。日々こつこつと覚えていく他ないのです。 千里の道も一歩から!頑張ってくださいね。 おさらい