個々のブログでPythonについて触れているので、Pythonについてのおさらいをしようかなと思います。
P ythonと言うプログラミング言語
Pythonはインタプリタ型のプログラミング言語でPythonのインストールされた環境だとそのままコードを実行できる仕様になっています。
■ Python
Pythonをインストールすると、IDLEが使用できるのですが、そのままだと対話型のターミナルのような物が出て来ます。
何も解らずに使おうとするとどうすればコードが記述できるのか解らない場合もありますが、
のようにメニューから新規作成を選択するとコードエディタが開きます。
この状態になるとコードをそのまま書けるので、
のように打ち込んでいくと、
の世に関数部分と変数部分などで色が変わる仕様になっています。また、記述中に 【 TABキー 】 を押すと、
のように候補を表示してくれるので、頭文字だけ打ち込んで 【TAB】 キーを使って入力を軽減する事もできます。
これが、ターミナルとエディタの違いですが、
■ ターミナル : 対話型で処理が出来る
■ エディタ : コードを全て記述する事が出来る
と言う違いがあります。
■ Pythonでプログラムを実行する
Pythonで、エディタを使ってコードを書いただけだと実行されないので、保存するようなメッセージが出てきます。その為、保存後に実行と言う流れになっています。作業の流れからすると、
■ 新規作成でエディタを立ち上げる
■ コードを書く
■ フェイルで保存
■ 実行
と言う流れになります。ファイルの保存は、メニューの
から行えますが、
■ 名前を付けて保存
■ 【 CTRL 】 + 【 SHIFT 】 + 【 S 】
■ 保存
■ 【 CTRL 】 + 【 S 】
と言うWINDOWS環境だと馴染みのあるショートカットで操作できるようになっています。保存したファイルは 【 Recent File 】 のメニューから選択できるようになっており、最近記録したファイルから順番に並んだ状態で表示されているので、そこからファイルを開いて作業をする事もできます。
この状態で、
のファイルを実行する際に
のメニューから実行できますが、これも
■ プログラムの実行
■ 【 F5 】
で行えるようになっています。実際に実行すると、
のように実行されます。ここでの表示はデバッグの為のような物なので、実際にファイルを実行した場合とは異なる事があります。
例えば、このプログラムですが、状態が維持されているのはターミナルと同じように表示が常に行われておりウインドウ自体が閉じない商になっている為で、コードの処理が終わるとウインドウが閉じてしまう通常のプログラムの実行時とは結果が違います。
なので、コードを書いてどう動いてくれるのかを見る為には便利ですが、実際に作った物がどう動くのか?は、少し違う実行方法を用いる事になります。この場合、 【 Python ファイル名 】 のような形で行う事になりますが、この場合、 【 ファイルのある場所 】 に移動してその場所で実行する事になるので少し煩雑な感じがしますから、Pythonを始めたばかりの場合だと、そのまま作成したPythonファイルをダブルクリックで実行してみる方が確認しやすいと思います。
先ほどのコードを書いて実行すると、一瞬だけウインドウが出て消えてしまうと思いますが、これが、表示をしてプログラムが終わるまでにかかる時間になります。コンピューターで一つの処理インタプリタを使って実行してもそれくらいの速度で実行できる仕様になっています。
では、これを常に表示させてウインドウを維持させるにはどうすればいいのか?と言うと、 【 処理が継続される状態を作る 】 事になります。
■ ウインドウを表示させ続ける
ウイン同を表示させ続ける方法としては、
■ ループの実装
■ 入力待ちを入れる
と言う2つの方法があります。前者については、アプリケーションのように一通りの処理が用意されており、それを繰り返す事で挙動が成立している物だと、ループによる制御で画面の表示も維持してあります。
後者の入力待ちですが、これは、input()を使った処理になります。input()を使うと一時的にプログラムが止まるので、画面が消えるのを止める事が出来ます。今回は、簡単に行る後者を使ってみる事にします。
のようにprint()の後にimput()を使う事で、処理を止める事が出来ます。この関数ですが、
■ print()
■ 画面上に文字を表示する
print(変数) のように変数を格納して使用する
■ 文字列 : print('文字')のように[']で囲む
■ 数 値 : print(10)のように()内に記述する
■ 変 値 : print(a)のように()内に記述する
■ 保存
■ 文字の入力を受け付ける
a = input('内容') のように変数に格納して使用する
のような仕様になっています。この状態で実行をすると、
のように表示の後に入力待ち委なるので、画面が消えないようにすることができます。画面のレイアウトを決めて状態を確認する場合には、ウインドウが消えないようにする必要がありますが、この時に簡単なコードでウインドウが消えないようにする場合だと、input()で入力待ちを追加するとウインドウの維持が出来るので、iput()文の前に記述した物がどう言った状態で動いているのか?を確認する事ができます。
input()は、 【 入力まで処理を止めている 】 のでinput()が実行されると入力が終わるまでプログラムの進行は止まります。
最初に学ぶ物になりますが、こう言った使い方をする事もできます。
■ 値のコントロール
先ほどのprint()を使った処理では、関数内に値を入れていました。
Print()は関数なので、()の中に値を入れて使用する事になりますから、関数の()の中に入れて使用する値の事を 【 引数 】(ひきすう) と言います。先程のコードでは、Print()関数に引数を直接入れていたわけですが、この引数をそのまま文字で入力すると、変更できない値になるので、 【 定数 】 になってしまいます。
その為、アプリメーションのメニュー名とかゲームのパラメーターの名称のように 【 変化してもらうと困る物 】 については、定数でもいいのですが、ゲームのパラメーターの値やスコアのように変化する物だと、定数ではありませんから、 【 変数 】 を用いて制御をすることになります。定数と変数は中学校1年生の数学で出てきますが、この時に
■ 定数項 : アラビア数字
■ 変数項 : アルファベット
として登場します。その後の数学ではこの2つを使った式を多く目にすることになりますが、高校になると、法則性を格納した物を記号でまとめた物がギリシア文字で登場し、変数項や法則性を実装した状態で動作するようなアルゴリズムが実装された物が登場しますが、変数の記述では対応できない物を文字列やギリシア文字を使って拡張した物が出てきますが、変数については、中学校以降の数学では常に登場する物になります。変数については、 【 変化する値を格納できる物 】 なので、プログラミングを行う場合にも 【 変化 】 を指せる場所には変数を使用します。
print()関数についても文字列を変数として独立させた場合、print()関数の引数を変数名を格納する事で、変数の変化で表示内容を変更する事が出来るようになります。その為、
のようにすると、 【 変数 text1 】 の内容を変更すると表示する内容を変更する事ができます。これは、文字列なのでピンとこないと思いますが、 【 RPGのHPの計算結果 】 のように攻撃や回復によって増減が発生する場合だと、定数だと処理をするのが難しくなるので、初期値は指定しておくとしても、処理を行う上では、変化を入れやすいように変数を用いる事になります。
その為、値を使う場合には、
■ 定数 : レイアウトのように固定された値
■ 変数 : キャラクターの座標のように変化する値
の二種類がありますが、これを使い分けて使用する事になります。
現在はBASICのように行番号を打ち込むような言語は見かけなくなりましたが、Pythonでは行番号自体を表示させる個tもできます。
のようにメニューから 【 Show Line Number 】 を選択すると、
のように行番業が表示されます。
■ ループ処理
ループ処理ですが、
■ 数値指定型ループ
■ 永続ループが可能な物
の2つがあります。この二者ですが、
■ 数値指定型ループ : forループ
■ 永続ループが可能な物 : do ~ while
になるので、用途で使い分ける事になります。つまり、ループ回数を決めておいて、それを超えると違う処理に移行するような物を作る場合だと、Pythonの場合、同じ量の処理だと、forループの方が高速になるので、永続処理ではなく数値指定型の処理だとforループを使って行く事になります。そうでない場合はdo ~ wiileでループ処理をさせる事になるので、この2つを使い分ける事になります。
■ for()を使った場合
forの場合ですが、範囲を決めると処理が出来るので、数値を巨大にしておけばその回数分だけ高速にループをしてくれます。つまり、巨大な数値を入れておいて、その間にターンエンドや処理の終了になる値で判定を入れると速度のあるループ処理を使う事が出来ます。
この場合だと、
のように 【 for 変数名 in range(回数) 】 のようになりますが、これをwhileのように使いたい場合だと、rangeの数値を巨大にしておいて、目的の数値までループさせるような使い方をする方法もありますが、基本的には 【 指定した回数で止まる 】 と言う特性があります。
実際に実行してみると、
のような感じで、入力待ちの後に実行されて、入力待ちが来るような感じの処理になりますが、回数を超える事は出来ません。
■ do ~ wileを使った場合
do ~ wihileの場合だと、Trueで判定を入れると永続ループが可能なので、
のような感じのコードになります。永続ループの場合だと、終了処理を入れる必要があるので、
■ ループ : do ~ while
■ 分 岐 : if
を組み合あせて使う事になります。コードの終盤にはifで変数の内容に判定を入れていますが、この時の文字列の状態でループを止めるような処理を実装しています。この状態だとループするので、
のようにウインドウ上でも実行可能で、
のように連続して実行されます。その為、コンソールを使った時にループを行うと、こんな感じで上から下に文字列流れがて行くような状態になります。
組 み込み関数と標準ライブラリ
ここまでのコードを見てもらうと、特に何かを用意する事もなく、そのままコードを書いていますが、世に出回っているPythonのコードを見た場合、
■ import ○○
■ from ■■ inport ○○
のようなのが最初に来ていて、
■ class ●●()
■ def ●●()
のような表記があって、記述が並んでいる物だと思います。どの言語でも同じですが、何も学ばずに解るような構造ではありませんし、プログラミングの知識がBASICしかない場合だと、Pythonもそうですが、C#やJavaScriptも解らないと思います。手続き型の言語だと、F#もありますが、これもどちらかと言うとSmallBASICをコーディングに寄せたような記述なので、 【 BASICとは似ても似つかないような記述 】 になっています。なので、 【 何が何をする物なのか解らない 】 と思います。使った事のない機材や知らない言語を理解する時に所有している知識だけで対応すると全く分からなくなるのと同じで、プログラミング言語も同様に学習する必要がありますが、最初の記述が、 【 不足した機能の追加 】 で、後の2つが、 【 処理をまとめた物を作る手段 】 になります。
■ 組み込み関数
Pythonの学習だと、IronPythonで.NETに関連した機能を使えるものを学習する場合もあるようですが、通常のPythonの学習を行うと、前述のコードのように 【 コードをそのまま書いて動く物 】 を学習します。基本的にな処理だとこの部分だけでも動くのですが、こうした機能は何かを呼び出さなくても使えます。C言語やC++の場合だと、使途を明確にする必要があるので、関数の中に関数を入れて使用する事になりますし、表示をする場合についても、 【 表示をするための道具 】 としてその実行が出来る物を格納したヘッダーファイルを呼び出さなければ、動作しません。C++のHello,Worldでは、IOStream.hを読み込みますが、これも 【 機能を使用する為の物の呼び出し 】 を行う準備になります。そして、処理についてもそれをどう言った状態で使用するのか?などの記述もするので、 【 細かい設定が出来る仕様 】 になっていますが、こうした 【 厳格な設定 】 が可能なので、記述が複雑になる傾向があります。
Pythonの場合だと、頻繁に使う関数については特に何かを呼び出さなくても使える仕様になっているのですが、そうした関数の事を組み込み関数と言います。
変数の型の変更をする時に使う
■ int() : 整数型
■ str() : 文字列型
■ chr() : UNICODE
■ bin() : バイナリー(0bで始まる二進数)
■ oct() : 八進数(0oで始まる八進数)
■ hex() : 十六進数(0xで始まる十六進数)
などもありますし、先程の、
■ print()
■ input
■ for
■ while
■ if
なども表jん実装されているので使用できます。その為、特に外部から読み込まなくても動作する物は複数ありますが、データについては、
■ タプル
■ 辞書
■ リスト
のような一つの変数に複数のデータの塊を書くの付出来るような仕様の物も標準の機能になります。特に外部から読み込みをしなくても、
■ クラスの宣言
■ 関数の宣言
はできますから、これも標準的な機能になりますし、外部モジュールやライブラリが読み込めるのも 【 import 】 が使用できるためですから、Pythonを立ち上げて外部の読み込みなしで動く部分も結構あります。
しかし、Pythonには豊富な標準ライブラリがあるので、様々な事が出来るようになっています。
ちなみに、open()のようなファイル管理もできるので、かなり自由度の高いアプリケーsyン開発が出来るようになっています。
■ 標準ライブラリ
Pythonをそのまま使うと、コンソールアプリしか作れないので、
■ imput()の入力で”■”を動かすプログラム
のような感じの処理しか出来ないのですが、標準ライブラリを使うと色居rな事が出来るようになります。
Pythonもtkinterが標準ライブラリとして用意されているので、それを使うと、デスクトップアプリを作る事尾できますし、オーディオについてもライブラリ用意されているので、デスクトップアプリを作る際にウィジェットと画像と音声を使ったも物を作れるようになっています。
あと、コンソールアプリの場合も、Cursesがあるので、レイアウトをコントロールでき、ウインドウの制御もできるようになっています。
os()を使うと、コンソール上でBASICのCLS相当の事が出来るのですが、キャラの移動のような処理は組み込み関数と標準機能だけでは難しいのですが、cursesを使うと移動や制御だけでなく、キー判定なども実装できるようになるので、相当自由度の高い操作を実装できるようになります。その為、cursesをinportで読み込んで必要な機能を関数やクラスで固めておいて、アプリケーション側で使えるようにしておくとキー判定用の機能を関数やメソッドの実行で再現できるので、キープレスイベントなどを実装して動かすアプリケーションを開発しやすくなります。
ちなみに、リアルタイムイベントのキープレスやマウスアクションなどの操作系はGUIを使用したアプリケーション開発で発生するのですが、Pythonでこうした機能を使おうと思うと、Tkinterを使う事になりますが、コンソールアプリで同じような事をしようと思うと、cursesを使う事になります。
なので、コンソールアプリを使ってウインドウ管理をしてウインドウ内にウインドウを表示するマルチウインドウシステムなどを用意して、そのウインドウ内に必要な情報を記述して運用するような作り方をする場合だと、cursesを使う事になります。この場合、リフレッシュノートなども調整できるのでかなり自由度の高いコンソールのコントロールが出来るのようになっています。
その為標準ライブラリだと映像の制御や3Dの処理の関連する物がないので、そう言った物は別途用意する事になりますが、仮想環境の構築までできるライブラリまであるので、標準ライブラリを見ただけでも相当いろいろな事が出来る仕様になっています。
P ythonの使用例
Pythonと言うとAI関連で使われているイメージが強そうですが、3DCGツールでスクリプトを書く際にもPythonは使用されています。
対応しているツールも多いので、Pythonの使い方を覚えてから、ソフトウェアで用意されている機能を覚えていくと、コードを書けるようになりますが、
■ Blender
では、アドオンとスクリプトの両方をPythonで記述する事ができます。BlenderベースのゲームエンジンだったBGEのフォークの
■ UPBGE
でも処理についてはPythonで行えるようになっています。動画編集だと、
■ DavinciResolve
https://www.blackmagicdesign.com/jp/products/
のスクリプトでもPythonが使用できます。その為、アプリケーションを使う際に自動処理をした買ったり、動きをコードで制御したい場合にもスクリプトによる制御を行う事が出来るようになっていますが、Pythonが使える環境も結構あります。
ちなみに、画像処理ソフトの
■ Gimp
では、Script Fuと言う記述でスクリプトを追加できていましたが、Python Fuと言う機能があり、Pythonでスクリプトを追加できるようになっています。
用途に応じて使うプログラミング言語が違ってきますが、OSSや無償で使えるツールでPCのソフト環境を構築してみると、Pythonで拡張できるツールが多い事が解ります。
■ オーディオ関連
Pythonには、標準ライブラリにwinsoundがあり、
のような記述で対応できるようになっているので、ライブラリをinportで呼び出した後は、
windows.PlaySound('ファイル名', winsound,SND_FILENAME)
の記述でオーディオファイルの再生が出来るようになっています。この機能については、オプションが複数あり、ループ再生もできるようになっています。公式サイトを見てみると、
を同時に実行すると記述されています。
この場合、 【 | : バーティカルバー 】 を使う事になりますが、これについては、C言語とかだとパイプと言う名称でなじみがある物になりますが、これで処理をつないで実行する事になります。
その為、
の3つを繋ぐことになりますから、
のような感じの記述にするとLOOP再生が可能になります。ただし、音声の同時再生は出来ないようで、
のように片方の音を関数に入れてコメントアウトして再生するとループになりますが、
のようにすると関数の方が優先されます。その為、ゲームのようにSEとBGMを同時にならす事は出来ないようです。ちなみに、このきのうについても、YouTubeに動画をアップしているのですが、
■ 標準ライブラリで音を鳴らす
のような感じになっています。
■ GUIを使う
Pythonでは、Tkinterを使うと、GUIを使ったプログラミングが行えます。これについては、
■ PythonでのGUIプログラミング 【 Python 】
野中で触れていますが、画像の表示やクリックイベントにも対応しています。Pythonの組み込み関数では、キープレスやマウスアクションには非対応になっていますが、GUIを使うとそうした、挙動に対するリアクションを返すようなアプリケーションを作る事ができます。
tkinterはGTKなので現在は3.0以降の物も使えるので、公式を見て最新版を使う事もできますが、これも標準ライブラリに収録されています。
不 足した機能の拡張
標準ライブラリだと不足した機能も幾つかありますが、メーカーが新規にリリースしたデバイスを使う場合、SDKが配布されることが多いです。これを元に開発を進める事になりますが、デバイス制御をする場合には、そういった外部参照をする物を使用する事があります。
Pythonでは、
■ 自作の外部ファイル
■ 自作の外部関数
■ 自作の外部クラス
を参照して使用できるので、同一フォルダー内にあるファイルからクラスや関数をインポートして使用できるようになっていますが、外部ライブラリなどもそれに該当します。
Pythonと言うとAI関連で使用されていますが、これに関連したライブラリは外部ライブラリなので、それを読み込んで使う事になりますが、
■ TensorFlow
■ Pythorch
などは別途インストールする必要がありますし、それに関連した数学のモジュールなども別途インストールする必要があります。
オンラインの環境だとライブラリが最初から用意されている物もあるのでそう言った環境を使う方法もありますが、存在しないライブラリは外部から読み込む必要があります。
画像処理をする場合だと、Tkinterだけでなく、
■ Open-CV
■ Pillow
をインストールする事になりますが、これを使うと、Pillowではレイヤーの概念やマスク処理や透過が出来るので、かなり自由度の高い重ね合わせが出来るようになりますし、Open-CVの場合動画を扱えるので、画像解析だけではなく、カメラの映像や動画ファイルを解析することもできるようになります。
また、3DCG系のライブラリがないので、GL系のライブラリを追加する方法もありますが、
■ vPython
と言うライブラリもあります。また、有償になりますが、
■ Vizard
を使うと、VRコンテンツも作れるようになります。
現在のプログラミング言語は、 【 機能を外部に出す 】 こともできますが、標準ライブラリでサポートしていない物でも作成したり、追加する事で対応させることが出来るようになっています。