LogoMark.png

データサイエンス/06 のバックアップ(No.8)


第6回 Python プログラミング2

データサイエンス/2023?受講生一覧汎用シート

CONTENTS




制御文

ブロックとインデント

if 文や for 文などの制御では複合文の記載が必要になります。JavaScript や PHP では { から } までが複合文が書かれる「ブロック」となりますが、Pythonでは、囲み記号を使わず、同じインデント(字下げ)がなされている文をブロックとして扱います。

if 条件式:
    ブロック内の処理1
    ブロック内の処理2

インデントの位置をさらにずらすことでブロックの「入れ子」が実現します。

if 条件式:
    ブロック内の処理1
    ブロック内の処理2
    if 条件式:
        ブロック内の処理1
        ブロック内の処理2


比較演算子

Python でよく用いる比較演算子は以下。結果は True または False です。

演算子意味
x == yx と y が等しい
x != yx と y が等しくない
x > yx は y よりも大きい
x < yx は y よりも小さい
x >= yx は y と等しいか大きい
x <= yx は y と等しいか小さい


条件分岐|if

if 条件式1:
    条件式1が真の時に実行する文
    ...
elif 条件式2:
    条件式1が偽で条件式2が真の時に実行する文
    ...
else:
    すべての条件式が偽のときに実行する文
     ...


繰り返し| for

繰り返し|while

モジュールの import について

Python には、様々な既存の機能が「ライブラリ」というかたちで用意されています。例えば、乱数を発生する機能もその一つで、みなさんがその機能を実現させるためのコードを一から書く必要はありません。

import math        # 数学関数を利用する場合に読み込みます。
import random    # 乱数を利用する場合に読み込みます。




演習6:MonteCarloMethod

モンテカルロ法とは

計算機を使った数値計算手法の一つで、乱数を用いた試行を繰り返すことによって確率論的に近似的に求める解を得る手法です。名称の由来はカジノで有名なモナコ公国のモンテカルロ地区・・と言われています。

πの値を求める手法の解説

Montecarlo_pi2.PNG

Wikimediacommons File:Montecarlo pi2.PNG

開発準備

ソースコード

以下のコードをまるごとコードセルにコピー&ペーストして下さい。

実行

学科サイトにリンク掲載

「モンテカルロ法で π の近似値を求める」プログラムのノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

関数について

プログラムの基本は 入力 > 処理 > 出力 です。プログラムのことを関数と呼ぶことがありますが、関数は英語で function つまり「何らかの機能を持ったもの」という意味で、世の中のあらゆるアプリケーションは、function の集合体と捉えることができます。

中学・高校の数学で登場する「関数」を思い出して下さい。例えば・・

y = 2x + 1 ・・・ y = f ( x ) と書いたりします  

は、入力データ x を受け入れて、これに処理 f ( ) つまり「2倍して1加える」を施して、その結果を y として返す・・・つまり、入力>処理>出力の機能を数式で表現したものと言えます。

データサイエンスの演習では、その大半理を、各種ライブラリーに定義された関数を利用するだけで実現させていますが、自分自身でオリジナルの関数を作って利用することもできます。以下のように記述します。

# 自作関数の定義
def myFunc(x):  # 入力:引数(ひきすう)として x を受け取る
  y = 2*x+1        # 処理
  return y           # 出力:戻り値として y を返す

# 自作関数を利用したプログラム
s = input("数を入力して下さい >>>")   # 入力
x = float(s)                                             # 処理(文字列を数値に変換)
y = myFunc(x)                                       # 処理(計算)
print("計算結果:", y)                            # 出力

--- 実行結果 ---
数字を入力して下さい >>> 2.5
計算結果: 6

この事例は、演習の最初に作成した PythonBasics.ipnbに追記しておくことをおすすめします。
def は define(定義)という意味の英語の略です。

付記
プログラマーは、世界のあらゆる現象を関数(入力・処理・出力)として捉える思考を身につけることで、問題を効率的に解決しています。プログラミング教育の目的は、特定の言語によるコーディングの技術を身につけることではなく、プログラマー的思考を身につけることにあります。




オブジェクト指向プログラミングについて

データの集合体(プロパティ)と、それを操作する手続き(メソッド)を、ひとまとめにしたものをオブジェクトと言います。オブジェクト指向プログラミング(OOP)とは、このオブジェクトを要素単位として、それらの関係を記述するプログラミング手法です。

プロパティやメソッドを利用する際は、以下のように [ . ] 接続で記述します。

ObjectOrientedProgramming



APPENDIX|プログラミングとデザイン思考

オブジェクト指向と現代社会

人間と道具は「共進化」するものです。今日の社会は、オブジェクト指向でプログラミングされたアプリケーションがその基盤を支えていることから、私たち自身、日常の様々な手続きや情報交換を通して、無意識のうちに、その思考的枠組の影響を受けていると言えます。逆に言えば、それを意識化することができれば、我々をとりまく社会システムをクリアに捉えることができます。
 

コンピュータの設計と人間の活動は、共に進化しなければならない

Apple Computer, 1987, Human Interface Guidelines
 

道具の使い方を学ぶことが私たち自身を変える・・
という点に人間と道具の関係の本質がある。

アラン・ケイ, 1994, 人間のためのコンピュータ, Addison Wesley Publisher JP

従来型のプログラミングとオブジェクト指向の違い

従来の「手続き型プログラミング」では、「データ」と「処理」はバラバラに捉えられていて、プログラマーは、処理を担う「関数(引数>処理>戻り値)」を、いかに独立性の高いものに仕立てるか・・ということに関心を集中させていましたが、機能、手続きを中心に構成されたプログラムには、以下のような問題がありました。

オブジェクト指向プログラミングでは「データ(プロパティ)」と「処理(メソッド)」をセットにした「オブジェクト」を構成単位と見なすとともに「オブジェクトのデータは、オブジェクトが持つメソッドによって処理される」と考えることで、プログラマーは、それがいかに単品としてうまく動くかということに専念できるようになりました。これは、画期的な意識改革です。

オブジェクトを具体的な「モノ・コト」に例えみましょう。例えば「車」は以下のようなデータと処理機能を持ったオブジェクトであると言えます。

我々が使っている自然言語で例えると・・・

身近な事例をオブジェクト指向で記述すると・・

ObjectOrientedProgramming