python version 1
python
python メイン学習
スコープ・・・変数の有効範囲
定義した変数を使うことのできる範囲
グローバルスコープとローカルスコープがある。
グローバルスコープにある変数をグローバル変数
ローカルスコープにある変数をローカル変数という
グローバル変数は、その変数があるPythonファイル(モジュール)のどこからでも使える。
一方、ローカル変数は定義されている関数内でのみ使える。
➡ローカル変数を関数の外で使うとnameErrorになる。
様々なスコープと名前空間を参照。
global文を使うことでスコープの外側に変数を参照できる。
名前空間・・・変数や関数の名前が所属している場所
変数や関数が所属する場所==モジュールやクラスが名前空間になる
異なる名前空間にある同じ名前のオブジェクトには何の関係もない。
インデント・・・4文字分のスペース
ブロック・・・ :で終わる分の次の行から行頭にインデントが入っている
連続した処理をブロックという。
トランザクション・・・アプリの仕様上、それ以上分割することができない
一連の処理。
AさんからBさんに10000円を振り込む
〇Aさんの口座から10000円を差し引く
〇Bさんの口座に10000円を加算する。
重要なことは、この2つの処理は同時に処理され、
成立しなければならない。
Aさんの口座を差し引いた後で、何かしらシステムに障害が
発生してBさんの口座の残高が増えないと大変なことになる。
こういった場合に備えて全ての処理が正常に終了しない場合、
全て取り消して元の状態に戻す。
Aさんの口座からN円差し引く・Bさんの口座にN円加算するは
分割できない処理。==これがトランザクション
エラーが発生したらトランザクションを開始する前に必ず戻す。
このことを「ロールバック(roll back)という」巻き戻す。
トランザクションで記述した処理を確定させることを「コミット(commit)という」
<組み込み型>
シーケンス・・オブジェクトを順番(シーケンシャル)に処理するための
データ構造。
基本的なシーケンス型はリスト、タプル、rangeオブジェクトの3つ。
[共通のシーケンス演算]
リスト、タプル、文字列で共通の操作を行える
x in s : sの中にxと同じ要素があればtrue,なければfalse。
x not in s : sの中にxと同じ要素があればfalse なければtrue
s + t : sとtの結合
s * n : s自身をn回足す
s[i] :sの0から数えてi番目の要素
s[i:j] : sのiからjまでのスライス
s[i:j:k] : sのiからjまでk毎のスライス
len(s) : sの長さ
min(s) sの最小の要素
max(s) sの最大の要素
s.index(x[,i[,j]]): sの中でxが最初に出現するインデックス
s。count(x) : s中にxが出現する回数
イミュータブル・・・作成後にその状態を変えることができないオブジェクト
タプルなど。
ミュータブル・・・作成後にその状態を変更できるオブジェクト
リストなど。
テキストシーケンス・・・文字列はイミュータブルなシーケンス
<文字列>
’か”で囲む。
三重引用符’’’で囲むと複数行に分けられる。
<スライス>
[]を用いて、文字列の一部を抽出できる。
これを「スライス」と呼ぶ
例:'山田太郎ものがたり'
print(a[0])
0番目の文字==山
print(a[7:]) == 7
7番目から最後まで==たり
print(a[2:4])「
3文字から4文字目まで ==郎も
<文字列の結合>
プラス記号 (+)
join利用
','.join ([文字列])
format利用
’{},{}'.format(文字列、文字列)
繰り返し
文字列*3 繰り返し文字列を出力できる。
<二項演算子>
計算を行う演算子
足し算、割り算など
割り算➡/ = 割り算(小数点あり)
// = 割り算(小数点以下切り捨て)
% = 余り
べき乗 **
変数に利用できる。
変数に何らかの計算を行い、結果を元の変数に代入する式を省略して
x += 1と記述できる。
<比較演算子>
右辺と左辺の値を比較する演算
== 等しい
!= 等しくない
>= 以上
<= 以下
> より大きい
<より小さい
is 同一のオブジェクト
isnot 同一のオブジェクトではない。
<論理演算>
論理型(ブール型):true、false
真偽値:真または偽と判断されるもの。
真:True、非ゼロの数値、空でない文字列、空でないタプル、
空でないリスト、空でない辞書、NONEでないオブジェクト
偽:false、ゼロ、空文字列、空のタプル、リスト、空の辞書、None
論理積 AND
A と B
A 真 B真 真
A真 B偽 偽
論理和 or
AまたはB
A真 B偽 真
A偽 B偽 偽
辞書を利用した集計
数値の合計を計算することを集計という
制御フロー
if文
条件式を書ける。
for文 繰り返し
☆冗長性の排除 プログラミングをするときは同じことを何度も書かない。
繰り返しはブロックで書かれた処理が何度も繰り返し実行される。
for文はブロックの処理を何度も繰り返す。
while文・・・式の値が真である間実行を繰り返す。
式を判断して、結果が真の場合は次の行以降のブロックの処理を繰り返す。
<関数>
処理に名前をつけたもの。 値を渡すと結果を返す。
①引数と呼ばれるデータを受け取る
②定められた処理を行う
③結果を返す
〇関数の定義
関数はいくつかのステートメント(処理)を一つのまとまりにして
名前をつけたもの。
関数はdefで定義する。
巻子に値を渡せる ➡ 渡す値を引数と呼ぶ。
関数は呼び出されたときに実行される。 関数名の後ろにカッコをつける
〇戻り値
関数の処理結果を呼び出し元で利用できる。
戻ってくる処理結果を戻り値と呼ぶ。
return文を実行すると、関数の呼び出し元に指定した値を戻す。
return文に複数の値を指定すると。複数の戻り値を戻せる。
<モジュールの関数呼び出し>
モジュールに存在する自作の関数を呼び出して利用できる。
モジュールはPythonの定義や文が入ったファイル。
ファイル名はモジュール名に接尾語「py」をつける
from ファイル名 import モジュール名
最初にPythonには実行されるときに最初から値が代入されている
特別な変数がある。
例えば_name__
何が代入されているかというと
モジュール名が入っている。だがモジュールとしてimportされる訳ではなく
直接記述のあるファイルを実行した場合だけ特別に_main__という文字列が
代入される。
これでファイルがimportされて使われているのか
直接実行されているのかを見分けられる。
なぜこのような機能があるか。
それはプログラムを書いた時点では、importされて使われているのか
直接実行されるのかがわからないから。
関数は後で呼び出して利用する場合がある。
そんな時、元々ファイルに書いてある関係ない処理が実行されると
使いづらいので、importされたときは、処理が実行されないように
if ・・・・を書いておく。
<無名関数 ラムダ式>
ラムダ式を用いて名前のない関数をかける。
名前のない関数を無名関数という。
名前が必要ない小さな関数を作る為の機能。
<モジュール>
呼び出すだけで便利に使える処理を集めたもの。
import モジュール名と書いて呼び出すと利用できるようになる。
<ファイル出入力>
ファイルを利用するには、ファイルを利用できる状態にする必要がある。
これを「ファイルを開く」という
終わったら閉じる。
open('ファイルパス')で開いてプログラム中でファイルオブジェクトとして
利用する。
file = open('furuit.txt',encoding='utf-8')
print(file.read()))
file.close()
[ファイルの読み込み]
ファイルの内容を読み込む。
readを利用するとファイルの全内容を読み込める。
readline()を利用するとファイルの一行分を読み込む。
readlines()はファイルの全行のリストを返す。
ループを利用すると、ファイルを一行ずつ読み込める。
rstrip()は改行を削除する
[ファイルの書き込み]
開くときにモードを指定する。
r 読み込み専用。省略可能。
w 書き込みする時に指定。ファイルが存在しない場合、新しいファイルが作られる。
x ファイルが存在しない場合のみ、ファイルを作成して、
書き込む。 ファイルが存在する場合は何もしない。
a 末尾に書き込み。ファイルが存在しない場合はファイルを作成して
書き込む。
f.write(書き込む文字列でファイルに文字列を書き込む。
<標準ライブラリ>
input()
プログラムの外部からの入力を受け付ける。
ユーザが実行画面で入力した文字をプログラム中で利用できる。
<ソート>
リストに格納されているデータを並べ替えられることをいう
sorted()関数
小さい順に並ぶ。
list.sort()
引数にreverse = Trueを指定すると
降順に並べ替えられる。
<エラー>
エラーには構文エラーと例外の2種類がある。
構文エラー
実行前に発生するエラー
例外
実行中に発生するエラー
例外処理
実行時に例外が発生した場合の処理をかける。
構文エラー・・・コードの書き方が間違っている。
〇syntaxエラー
例外エラー
〇nameerror
定義されていない変数名を利用した場合に発生する。
このエラーが発生したら変数名を打ち間違えていないか
変数を定義し忘れていないかチェック。
〇indexerror
シーケンスの添え字が範囲外の場合に発生する。
〇indentationError
プログラムの前に不要な空白があったり必要な空白がないというエラー。
行の先頭に余計な空白がある。
unexpected indent = 期待されていないインデント
expected an indented block = 期待されるインデントがない
〇import Error
import文でモジュール定義を見つけられなかった場合や
from・・・・import文で指定した名前を
インポート出来なかった場合、発生する。
〇typeError
関数などで適切でない型のオブジェクトが利用された場合に発生する。
データ処理用ライブラリ・・・
ジュピターノートブック:OSSのwebアプリケーションで
プログラミングコードを含むドキュメント。
対話式にコードを実行できて、ノートブック形式のドキュメントを
作成できる。
このドキュメントにはPythonコードとその実行結果を合わせて
保存できる。
作成したドキュメントはEメールに添付したり、dropbox、Githubなどで共有できる。
pandas: 強力なPython製のデータ分析ツール。
主なデータ構造であるSeries(一次元:リストのような形式)とDataframe
(2次元:表のような形式)は財務、統計、その他多くの工学分野での
データ処理に利用されている。
pandasが提供している表形式のデータをサポートするデータフレームクラス
(pandas.Dataframe)を利用して、表形式のデータに対して、
SQLのような問い合わせ、データを加工して新しい列を追加、
複数のDataframeを結合するなどできます。
pandasはファイルフォーマットやデータベースから
データを取り込み、DataFrameに変換でき、
様々な形式で出力できる。
pandasを利用するとpythonのfor文を用いて1行ずつ処理するより
シンプルにテーブルのデータを追加、変更、分析できる。
<pythonとデータ分析>
科学計算、統計解析、機械学習などのライブラリが
豊富で、容易に使える。
作業が自動化できる。
汎用プログラミング言語なのでシステム化などもできる。
データ分析以外でも数値計算、行列計算、
統計解析、回帰分析、多変量解析や
機械学習、ディープラーニング、クラスタリング、
分析結果の可視化など多くのことができる。
<もう一度基本から>
書きやすく読みやすいように設計されている。
人工知能、機械学習に最も使われている。
pythonの統合開発環境としては、
ジュピターノートブック、パイチャーム、アトム、サブライムテキストなどが
良く使われている。
ジュピターノートブックは、起動中にデータをメモリに保持して、
更にデータ加工のログを残すことができるため、
データの前処理に適している。
またフレームワーク(汎用的な機能をまとめた基盤となるソフトウェア)も
数多く用意されており、webアプリ制作であれDJANGO(ジャンゴ)FLASK(フラスク)などが
有名。
<クラス・オブジェクト指向>
クラス・・・設計図
クラスは「コンストラクタ、メンバ、メソッド」の
3つで定義される。
コンストラクタ・・・クラスを呼び出した際に
最初に実行される「初期化用の特殊なメソッド」
インスタンスを生成するときに、
一度だけ呼び出される。
メンバ・・クラス内で使用する変数。
他のオブジェクト指向言語では「プライべート(クラス外からアクセスできない)」と
パブリック(クラス外からもアクセスできる)の2種類があるが、
pythonでは、全てパブリックになる。
ただしプロパティという手法を使うことで
アクセス制限も可能。
クラスで生成するオブジェクトをインスタンスという。
☆一つしかインスタンスを生成しないときは
モジュール。
複数のインスタンスを生成する場合はクラスを定義することが
推薦されている。
時間を計算するためのtimeモジュールは
プログラム内に一つあれば十分かもしれないが
複数のインスタンスを生成することが多いので
クラスで定義しておいたほうが、無難。
<Pythonの標準ライブラリ>
datetime・・・日付や時刻の取得。
文字列⇔日付の変換、n日後、n日前の
日付データを取得等。
shutil・・・高水準なファイル操作を提供する
モジュール。 ファイルのコピーやディレクトリに対する操作を非常に
簡単に書くことができる。
collections・・・appendやpopを高速に行う、
OrderedDict(順序付き辞書)、defaultdict(デフォルト値のある辞書)、
Counter(カウンター付き辞書)等がある。
効率的なアルゴリズムの実装や
プログラミングコンテスト等ではお世話になる。
pdb・・・ブレークポイントの設定や、
ソース行レベルでのシングルステップ実行等の
機能を提供するデバッガ。
インタラクティブシェルでの実行や、
pyなどのScriptファイルとして実行することも出来る。
timeit・・・pythonプログラムの実行時間を
計測するモジュール。
コード1つ1つに対して時間を測ることができる。
細かいパフォーマンスを計れる。
NumPy・・・科学技術計算などで配列や行列の演算を高速で行うための
研究などで数学的な計算をしたいときに、非常に有効なライブラリとなっている
matplotlib・・・pythonでデータをグラフにプロットできるようになる。
グラフの表示にはmatplotlib.pyplotモジュールのplotおよび
showを使用する。
scipy・・・numpyで行える配列や行列の演算を行うことができ、
加えてさらに、信号処理や統計といった計算ができるようになる。
<外部ライブラリ>
tqdm・・・ループの進捗を確認したいときに、以下のような進捗バーを簡単に作成することが
できる。
py2exe・・・pythonScriptをウィンドウズ用のexeへ変換するライブラリ。
simplejson・・JSONのエンコード、デコードライブラリ。
標準ライブラリにJSONがあるがそれと同じように使用することができて、
更に高速に動作するのが特徴。
reguests・・・使いやすいhttpライブラリ。
標準ライブラリにurllibがある。
requestsは非常に使いやすく、最近の書籍でもよく薦められている。
pep8・・・ソースコードのチェックツール。
pythonのスタイルガイド。
使うとどこが違反しているかを教えてくれる。
<python開発環境>
Anaconda・・・python自体の他にscipyやNumpyなどのデータサイエンス系の
必要パッケージもまとめられたパッケージのこと。
pycham・・・・pythonの統合開発環境であり、
OS限らず、Python開発でIDE使うなら実質これ一択。
<python基本用語>
=代入演算子
input = キーボードからの入力を受け取る関数。
andとor 論理演算子
and : 〇〇および〇〇
or : 〇〇あるいは〇〇
=比較演算子
> より大きい
<より小さい
>= 以上
<= 以下
!= 左辺と右辺が違う値
== 左辺と右辺が同じ値
複合代入演算子
+= 左辺の値に右辺の値を加算して代入する
-= 左辺の値に右辺の値を減算して代入する
*= 左辺の値に右辺の値を乗算して代入する
/= 左辺の値に右辺の値を除算して代入する
//=左辺の値に右辺の値を除算して代入する(整数にして)
ミュータブル == 変更可能
イミュータブル == 変更不可能
appendメソッド・・・末尾に要素を追加する
popメソッド・・・任意の位置の要素を取り除き、それを返す。
イテレート・・・繰り返し処理する。
イテレーション・・・すべての要素に順番に何らかの処理をすること
インデックス・・各要素にアクセスする。
ネガティブインデックス・・・最後の要素から-1、-2・・・・
スライス・・・インデックスを2つ指定することで特定の範囲の要素を参照できる。
len関数・・・・文字列の文字数を数えて返す。例えばWebページで
200文字までというのがよくあるが、そのような場合に、
文字数をチェックする用途で使える。
splitメソッド・・・文字列に含まれる任意の文字を区切り文字として、
指定することで、文字列を切り分けることができる。
例えば、1,2,3の「,」を区切り文字として指定すれば
「1」「2」「3」だけを取り出すことができる。
「,」だけではなく、「-」や「.」、さらにはスペースで区切られた文字列から
文字列の部分だけを取り出すといった用途で使える。
セパレーター・・区切り文字
文字列と関数名の間にある「.」・・・関数が操作の対象の文字列を参照するために
つける。 ドット演算子とかメンバー演算子などと呼ぶ。
joinメソッド・・・リストの中に格納された個々の文字列を連結して
一つの文字列にまとめる。
さっきのsplitは、セパレーターで文字列を分割して、それをリストの中に
一つずつ格納した。
Joinはリストの中の個々の文字列を連結して一つにする。
replaceメソッド・・・文字列の一部を置き換える
指定した文字列を別の文字列に書き換える。
formatメソッド・・・文字列を自動作成
文字列の中に別の文字を持ってきて、埋め込むことができる。
例えば「さん、こんにちは」という、文字列を作っておいて、
プログラムの実行中に入力された名前を埋め込み、
「〇〇さん、こんにちは」と表示することができる。
➡プログラムの実行中に文字列を作りたい場合にformatメソッドを使う。
●formatの引数に設定した文字列が順番に埋め込まれる。
なお、引数として設定する文字列が複雑になるので、[,]で区切って
書く。
文字列を埋め込む位置も設定できる。
指定した文字列を埋め込みたい場合、
{}の中に引数番号を書く。
引数の番号は、最初が{0}、次が{1}・・・・のように
並び順に応じて増えていく。
もうひとつの機能が、小数点以下の桁数を指定できる。
先頭の文字列が特定の文字から始まっているか。
➡例えばメールアドレスで 「」から始まっているか
・・・・startswith関数
該当すればTrue 未該当はFalseが返される。
➡末尾の文字列が特定の文字で終わっているか
➡end swith関数
上記と同じ。
この文字は何番目に出てくる?
➡find関数
指定した文字列のインデックスを返す。
この文字はいくつあるか
➡count関数
指定した文字列が何回出てくるのか返す。
文字列が全て英数字かどうか調べる
◎パスワードの確認の時などに使われる。
➡isalnum関数
小文字→大文字にアッパー(アップー)
➡upper関数
全てのアルファベットを大文字に変換する。
➡lower関数
大文字→小文字にロワー(ロー)
全てのアルファベットを小文字に変換する。
英語の羅列で出てくる効果・・・
\n 改行(エスケープシーケンス)
\b バックスペース(エスケープシーケンス)
%= 余り
%s = 文字列フォーマット
for文について
繰り返す・・・
for 変数 in range(回数):
print() ←繰り返す(処理)
=文字列の場合・・・10回繰り返す
forとifを使った文
for c in range(10):
if c %2 ==0:
print(変数) ←もし2で割った余りが0ならこの処理をする。
(1,2,3,4,5、・・・・で繰り返す)
else:
print(変数) ←そうじゃないならこっちの処理をする。
rangeオブジェクト:
range(start,stop[,step])
start・・・countを開始する値
stop ・・・・countを終了する値
step・・・countする際のステップ(省略すると1ずづカウントアップする)
for文の注意点・・・0からカウントされる。
while文・・・条件式がTRUEである限り、処理を繰り返す。
while 条件式:
繰り返す処理
シーケンス・・・データが順番に並んでいて、並んでいる順番で
処理が行えることを指す。
対義語==ランダム
str(文字列) = 1つ1つの文字が順番に並んでいる。= シーケンス
pythonにはシーケンス型で利用できる関数やメソッドがある。
pythonに組み込まれている関数
➡「ビルドイン関数」・「ビルドインメソッド」という。
<リスト自体を要素化>
リスト自体を要素できる。
インデックスで参照すると要素そのものが参照される。
☆ リストの要素を参照する場合はダブルインデックスを使う。
まずリストのインデックス
(何番目のリスト?)
そのあとにその中の要素のインデックス
(何番目の要素)
共通するのは0から始まるということ。
<リストの操作>
●結合・・・2つのリストを1つにする。
extendメソッド。
extendは「+=」演算子に置き換えられる。
●指定した位置に要素を追加
insertメソッド
●インデックスで指定した要素を削除する
delキーワード
メソッドと違いdel.変数で書く。(delで始まる)
●位置が分からない要素を削除する
removeメソッド
値をはっきり指定して削除できる。
●要素のインデックスを知る
indexメソッド
値を指定してそのインデックスを知れる。
●その値はあるかどうか知る
in演算子
値 in 変数
あればTRUE、なければfalseを返す。
●その値はリストにいくつあるのか知る
countメソッド
特定の値がいくつ含まれているかカウントする。
●要素の並び替え
sortメソッド
アルファベット、ひらがな、カタカナ・・・昇順(あいうえお順)
●リストのコピー
リストはオブジェクトなので、リスト変数をほかの変数に代入すると
オブジェクトの参照が代入される。
<リストの中に要素製造装置を入れる>
内包表記のこと。
簡単に書ける式。
変数 = [変数 for 変数(あ)in range(数値)]
ifステートメントを入れると特定のものだけをリストに追加できる。
・・・・・if 変数 %2 == 1
2で割ったものが1になるもの➡奇数だけリストに格納される。
<定数リスト>
リストには一度セットした要素を書き換えられないイミュータブルなリストがある。
これをタプルという。
タプルの使い方: 一個以上の要素を持つタプルは
個々の要素をカンマで区切っていく。
タプルを使うと一度に複数の変数に代入できる。
<辞書>
キー(名前)と値のペアが集まった順序を持たないオブジェクト。
イミュータブルな型なら何でも(文字列や数字)キーとして
使える。
⦿辞書型を作るときには、{}で囲んで
キー:値と書く。
〇辞書に格納されているものを取り出すときには[]でキーを囲んで
アクセスする。
変数 = 辞書[キー]
<要素の重複を許さない集合>
集合(set型)はリストやタプルと同様で
複数のデータを1つにまとめるものだが、重複した要素を持たないという
違いがある。
集合は辞書と同じで{}で囲んで要素をカンマで区切る。
ただ辞書のキーだけを残したものが集合。
集合の重複した値を持たないので、
リストから重複した要素を取り除くような場面で
使える。
リストを集合に変換しただけで、重複した値がなくなるので
これをもう一度リストに戻せば
重複した要素を簡単にのぞける。
<リスト要素をランダムに抽出する>
randomモジュールの中にchoiceメソッドがある
これはリストからランダムに1つの要素を取り出す。
辞書(dict型)・・・リストやタプルが順序を持ったオブジェクトの並びで
整数値のインデックスでアクセスするのに対して、
辞書型はキー(名前)と値のペアがごちゃっと集まった順序を持たない
集合で、イミュータブル(書き換え不可)な値なら何でも
(文字列、数値など)使える
つまりキーだけを変更することはできないので、
変更する場合は、キー/値のペアを変更(追加・削除)することになる。
辞書そのものはミュータブル(書き換え可能)。
◎キーを指定して値を変更
➡変数[キー] = ’変更後の値’
◎キー/値の追加
変数[キー] = '値'
◎for文ですべてのキーをイテレートできる(反復処理)
・・・・イテレーションアクセスという。
values()メソッドで値をイテレートできる。
さらにitems()メソッドでキーと値をイテレートできる。
<辞書の操作>
●2要素のシーケンスを辞書に変換する。
dict()関数
●辞書に要素を追加する
updateメソッド
辞書のキーと値を別の辞書にコピーできる。
なお、追加する辞書と同じキーがある場合は
追加した辞書の値で上書きされる。
●辞書の要素をまるごとコピーする
copy()メソッド
辞書の要素をまとめてコピーできます
参照ではなくオブジェクトそのものがコピーされる。
●値だけを取得する
valuesメソッド
●要素の削除
del演算子
キーを指定すると対象の要素が削除される。
●すべての要素を削除する
clearメソッドを使う。
辞書からすべての値とキーを削除する。
<関数>名前の付いたコードで任意の場所にかける。
メソッドとの違い
オブジェクトを参照する変数.メソッド名
関数
関数名()で実行できる
関数もメソッドも何らかのオブジェクトに対して実行する。
関数はほかのコードから切り離されているものなので、「内部でオブジェクトが用意されている」という
違いがある。
オブジェクトを定義する「クラス」の内部で書かれたものをメソッド、それ以外の場所、ソースファイル(モジュール)に
直接書かれたものを関数と呼んで区別している。
書式: def 関数名(パラメーター1,パラメーター2,・・・):
処理
return 戻り値
パラメーター・・・関数の呼び出し元から値を受け取るためのもので、
変数と同じように任意の名前を付けられる。
パラメータが必要なければ()を空にする。
関数で処理した結果を呼び出し元に渡したい場合は、戻り値として返すようにする。
return 戻り値 と書いて戻り値にはTrueやfalseのようなリテラルや変数を指定できる。
関数名(引数)と書いてよび出すと、引数に指定した値が関数側のパラメーターにコピーされる。
関数内部の処理が順次、実行されて最後にreturn文で指定した戻り値が呼び出し元に返される。
パラメーターは必要な数だけ設定できる。
➡呼び出し側の引数と関数のパラメータの順番は同じである必要がある。
??順番を気にせずにパラメーターに渡したい
➡この場合はパラメーター名を指定することで引数の値を渡すことができる。
これを「キーワード引数」という。
デフォルトパラメーター・・・
必ずしも引数を渡さなくてはならないわけではない。
関数側でパラメーターの値を設定しておけば、
引数がない場合に設定した値が使用されるようになる。
これを「デフォルトパラメーター」という。
デフォルトパラメーターはデフォルト値を持たないパラメーターの後に書く必要がある。
例では引数が1つなのでこの値がパラメーターaに渡される。
引数を2つ指定したらパラメーターbのデフォルト値が上書きされる。
<人口無脳>・・・人間とおしゃべりをしてくれるプログラム(会話プログラム)
人工知能が目指しているのは知能そのもの。
人工知能は、その知的活動の結果として会話を行うので相手が言ったことの意味を理解しなければいけないし、
人工知能自身も自分が何を言ってるのか分かったうえで発言する。
人工知能にとって重要なのは会話という行為ではなく、意味のりかいや想像(推論)、感情認識などの会話を支える「目に見えない」知的活動。
人口無脳は会話の行為を目指す。
「愉快な会話」、「楽しませる会話」➡知的活動はない
〇GUIにする方法。
①kivy クロスプラットフォームに対応したGUIライブラリ。
IOSやAndroidでも動くようなGUIアプリを作れる。
ただ日本語文献が少なく、トラブルシューティングが難しい
※クロスプラットフォームとは・・異なるプラットフォーム(OSの基礎部分)ウィンドウとmacのように、
仕様が全く異なる機械(ハードウェア)またはOS上で
同じ仕様の物を動かすことができるプログラム(ソフトウェア)のこと。
同様の呼称にマルチプラットフォームがある
kivy最大の特徴はopenGLという3Dも扱えるグラフィクスライブラリを使うことが
できる➡簡単なゲームであれば作れる。
②tkinter
標準GUIライブラリで日本語の文献も豊富にある。
標準でインストールされているため、
追加でインストールする必要はないので
環境構築が楽。
tkinterが動くマシンであればクロスプラットフォームに対応している。
③PyQt
安定性も高く企業が開発している点でも安心。
GUI・・・グラフィックユーザインタフェース
ユーザーからの入力やシステムの状態変化など、ある出来事をきっかけに
プログラムが実行される。
この出来事をイベントといい、イベントをきっかけにして、
プログラムが起動されることをイベントドリブン(イベント駆動)という。
イベントドリブン型のアプリケーションは一般的に次のようなメインルーチンを
持っている。
1初期化
2イベントを取得する
3イベントの種類に応じて処理を振り分ける
4 2に戻る。
2から4をイベントループと呼び、アプリケーションは、
ユーザーからの入力などのイベントを待つ。
そして3の処理に対応する機能がバインディング。
バインディング☞ウインドウでイベントが発生した時に、それに応じて定義した
プログラムを実行する。
このプログラムをイベントハンドラ・コールバック関数という。
tkinterの手順
①メインウインドウを作る
②ウィジェットを追加してウインドウに配置する。
③イベントループを開始してユーザーからの要求(イベント)を処理する。
画面のサイズを拡大したときにウィジェットが崩れる☞「stickyを使う」
sticky ☞粘着するとかそんな意味。
⦿ウィジェットをどこに貼り付けるのかの指定。
➡north(北), south(南),east(東),west(西)
pythonライブラリ
Django ☞全部乗せのフレームワーク
Numpy ☞データ処理、数値計算用ライブラリ
pandas ☞時系列データの扱いが楽。楽にデータ操作をするための機能が豊富。
matplotlib ☞ Numpy向けのグラフ描画ライブラリ。
scipy ☞科学計算などに使われる。
Jupyter ☞ pythonで分析をしたときの記録用ツール
コードやコメント、データなどをひとまとめに残しておけるツール。
kivy ☞ UIライブラリ。スマホとかマルチタッチ対応もできる。
cocos2d ゲームライブラリ。
requests ☞ httpでウェブサイトのデータを取れる。
もう一度基本構文
演算子
// 切り捨て除算
% 除算の余り
代入演算子
value = 10
value += 5
10 + 5 = value = 15
value -= 5
5-5 = value = 0
value *= 5
5 * 5 = value = 25
value /= 5
5 / 5 = value = 1
value // = 2
5 / 2 = と同じ
コメントは「#」か["""]で記述できる。
文字列
ただの文字列でも配列みたいな扱いができる。
str = "apples"
str[0] ☞ A
"test"[2] ☞ s
"ex = "Apples"
ex[:3] ☞ App
ex[1:4] ☞ ppl
ex[3:] ☞ les
比較演算子
a == b aとbが等しい
a != b aとbが異なる
a < b aがbよりも小さい
a > b aがbよりも大きい
a <= b aがb以下である
a >= b aがb以上である
a <> b aがbと異なる
a is b aがbと等しい
a is not b aがbと異なる(notする)
a in b aがbに含まれる(bにinしている)
a not in b aがbに含まれない(not in している)
分岐
if 条件:
処理
elif 条件:
処理
else:
処理
関数
def 関数名(引数, ...):
処理
呼び出しは関数名(引数)のように記述する。
def ex(value):
print(value)
()を出力する関数
ex(テスト) ➡テスト と出力される
モジュール
import モジュール import random
import random.randint
from random import randint
from random import *
配列
list = ["a","b","c"]
☆追加するには・・・list.append("d") [末尾に追加]
list = ["a","b","c","d"]になる
list = ["a","b","c"]
list.insert(1,"x") [指定した位置に追加]この場合(位置,"要素")と記述する
list = ["a","x","b","c"]になる
☆切り出し
list = [5,6,7,8,9]
s = list[:2] s = [5,6]
s = list[2:4] s = [7,8]
s = list[1:] s = [6,7,8,9]
削除
①要素を指定
list = ["a","b","c","d"] list = ["a","b","d"]
list.remove("c") remove(要素)でその要素を削除
②indexを指定
list = ["a","b","c","d"] 「結果は上記と同じ」
list.pop(2) popで指定したインデックスの要素を削除
③list = ["a","b","c","d"] list = ["a","b","c"]
list.pop() 指定なしだと末尾が削除される。
☆タプル
tuple = (1,"A",true)
for 繰り返し
for 変数 in リスト変数:
print(変数)
for 変数 in タプル変数:
print(変数)
while 変数 比較演算子 数値: 条件が成立している間
print(文字列) この文字列を繰り返す。
変数 + 1 1つずつ上がる。
☞「○○の値になるまで」「○○を越したら終了」など。
辞書(変数) = {キー : 値,・・・で記述}
print(辞書変数[キー]) ☞そのキーとセットになっている値が出力される。
⦿削除
del 辞書変数[キー] ☞そのキーと値が両方削除される。
with構文
所定の機能をより安全かつ簡潔に使う構文。
例えば、通常ならファイルをオープンした後、
クローズしなければならないところが、
withを使うと、ファイルのオープン後のクローズが不要になる。
◎例外が発生しても必ずcloseされたり、closeを忘れずに済む。
with構文が使える関数は、必ず例外処理やcloseなどの終了処理の
記述が必須となる。
pythonで使えるデータは基本的に「文字列」と「数値」
インデントはスペース4つ。
☆変数と定義。
関数の外で作った変数 ➡グローバル変数
関数の中で作った変数 ☞ローカル変数
変数だけの宣言はできない。
color エラー
変数 = 値 の式は絶対!!
☆クラス
クラスもオブジェクト。
クラスからオブジェクトを作ることを「インスタンス化」という
そのオブジェクトを「インスタンス」という。
インスタンスメソッドの第一引数にはインスタンス自身を表すselfを必ず指定。
コンストラクタは初期化メソッド__init__を使う。
コンストラクタ・・・クラスを定義する場合、そのクラスのインストラクタが
生成されるときに呼び出される初期化メソッドを定義できる。
これを「コンストラクタ」という。
記述の仕方☆
def __init__(self,src1,src2,・・・):
※クラス文中に記述する。
python メイン学習
スコープ・・・変数の有効範囲
定義した変数を使うことのできる範囲
グローバルスコープとローカルスコープがある。
グローバルスコープにある変数をグローバル変数
ローカルスコープにある変数をローカル変数という
グローバル変数は、その変数があるPythonファイル(モジュール)のどこからでも使える。
一方、ローカル変数は定義されている関数内でのみ使える。
➡ローカル変数を関数の外で使うとnameErrorになる。
様々なスコープと名前空間を参照。
global文を使うことでスコープの外側に変数を参照できる。
名前空間・・・変数や関数の名前が所属している場所
変数や関数が所属する場所==モジュールやクラスが名前空間になる
異なる名前空間にある同じ名前のオブジェクトには何の関係もない。
インデント・・・4文字分のスペース
ブロック・・・ :で終わる分の次の行から行頭にインデントが入っている
連続した処理をブロックという。
トランザクション・・・アプリの仕様上、それ以上分割することができない
一連の処理。
AさんからBさんに10000円を振り込む
〇Aさんの口座から10000円を差し引く
〇Bさんの口座に10000円を加算する。
重要なことは、この2つの処理は同時に処理され、
成立しなければならない。
Aさんの口座を差し引いた後で、何かしらシステムに障害が
発生してBさんの口座の残高が増えないと大変なことになる。
こういった場合に備えて全ての処理が正常に終了しない場合、
全て取り消して元の状態に戻す。
Aさんの口座からN円差し引く・Bさんの口座にN円加算するは
分割できない処理。==これがトランザクション
エラーが発生したらトランザクションを開始する前に必ず戻す。
このことを「ロールバック(roll back)という」巻き戻す。
トランザクションで記述した処理を確定させることを「コミット(commit)という」
<組み込み型>
シーケンス・・オブジェクトを順番(シーケンシャル)に処理するための
データ構造。
基本的なシーケンス型はリスト、タプル、rangeオブジェクトの3つ。
[共通のシーケンス演算]
リスト、タプル、文字列で共通の操作を行える
x in s : sの中にxと同じ要素があればtrue,なければfalse。
x not in s : sの中にxと同じ要素があればfalse なければtrue
s + t : sとtの結合
s * n : s自身をn回足す
s[i] :sの0から数えてi番目の要素
s[i:j] : sのiからjまでのスライス
s[i:j:k] : sのiからjまでk毎のスライス
len(s) : sの長さ
min(s) sの最小の要素
max(s) sの最大の要素
s.index(x[,i[,j]]): sの中でxが最初に出現するインデックス
s。count(x) : s中にxが出現する回数
イミュータブル・・・作成後にその状態を変えることができないオブジェクト
タプルなど。
ミュータブル・・・作成後にその状態を変更できるオブジェクト
リストなど。
テキストシーケンス・・・文字列はイミュータブルなシーケンス
<文字列>
’か”で囲む。
三重引用符’’’で囲むと複数行に分けられる。
<スライス>
[]を用いて、文字列の一部を抽出できる。
これを「スライス」と呼ぶ
例:'山田太郎ものがたり'
print(a[0])
0番目の文字==山
print(a[7:]) == 7
7番目から最後まで==たり
print(a[2:4])「
3文字から4文字目まで ==郎も
<文字列の結合>
プラス記号 (+)
join利用
','.join ([文字列])
format利用
’{},{}'.format(文字列、文字列)
繰り返し
文字列*3 繰り返し文字列を出力できる。
<二項演算子>
計算を行う演算子
足し算、割り算など
割り算➡/ = 割り算(小数点あり)
// = 割り算(小数点以下切り捨て)
% = 余り
べき乗 **
変数に利用できる。
変数に何らかの計算を行い、結果を元の変数に代入する式を省略して
x += 1と記述できる。
<比較演算子>
右辺と左辺の値を比較する演算
== 等しい
!= 等しくない
>= 以上
<= 以下
> より大きい
<より小さい
is 同一のオブジェクト
isnot 同一のオブジェクトではない。
<論理演算>
論理型(ブール型):true、false
真偽値:真または偽と判断されるもの。
真:True、非ゼロの数値、空でない文字列、空でないタプル、
空でないリスト、空でない辞書、NONEでないオブジェクト
偽:false、ゼロ、空文字列、空のタプル、リスト、空の辞書、None
論理積 AND
A と B
A 真 B真 真
A真 B偽 偽
論理和 or
AまたはB
A真 B偽 真
A偽 B偽 偽
辞書を利用した集計
数値の合計を計算することを集計という
制御フロー
if文
条件式を書ける。
for文 繰り返し
☆冗長性の排除 プログラミングをするときは同じことを何度も書かない。
繰り返しはブロックで書かれた処理が何度も繰り返し実行される。
for文はブロックの処理を何度も繰り返す。
while文・・・式の値が真である間実行を繰り返す。
式を判断して、結果が真の場合は次の行以降のブロックの処理を繰り返す。
<関数>
処理に名前をつけたもの。 値を渡すと結果を返す。
①引数と呼ばれるデータを受け取る
②定められた処理を行う
③結果を返す
〇関数の定義
関数はいくつかのステートメント(処理)を一つのまとまりにして
名前をつけたもの。
関数はdefで定義する。
巻子に値を渡せる ➡ 渡す値を引数と呼ぶ。
関数は呼び出されたときに実行される。 関数名の後ろにカッコをつける
〇戻り値
関数の処理結果を呼び出し元で利用できる。
戻ってくる処理結果を戻り値と呼ぶ。
return文を実行すると、関数の呼び出し元に指定した値を戻す。
return文に複数の値を指定すると。複数の戻り値を戻せる。
<モジュールの関数呼び出し>
モジュールに存在する自作の関数を呼び出して利用できる。
モジュールはPythonの定義や文が入ったファイル。
ファイル名はモジュール名に接尾語「py」をつける
from ファイル名 import モジュール名
最初にPythonには実行されるときに最初から値が代入されている
特別な変数がある。
例えば_name__
何が代入されているかというと
モジュール名が入っている。だがモジュールとしてimportされる訳ではなく
直接記述のあるファイルを実行した場合だけ特別に_main__という文字列が
代入される。
これでファイルがimportされて使われているのか
直接実行されているのかを見分けられる。
なぜこのような機能があるか。
それはプログラムを書いた時点では、importされて使われているのか
直接実行されるのかがわからないから。
関数は後で呼び出して利用する場合がある。
そんな時、元々ファイルに書いてある関係ない処理が実行されると
使いづらいので、importされたときは、処理が実行されないように
if ・・・・を書いておく。
<無名関数 ラムダ式>
ラムダ式を用いて名前のない関数をかける。
名前のない関数を無名関数という。
名前が必要ない小さな関数を作る為の機能。
<モジュール>
呼び出すだけで便利に使える処理を集めたもの。
import モジュール名と書いて呼び出すと利用できるようになる。
<ファイル出入力>
ファイルを利用するには、ファイルを利用できる状態にする必要がある。
これを「ファイルを開く」という
終わったら閉じる。
open('ファイルパス')で開いてプログラム中でファイルオブジェクトとして
利用する。
file = open('furuit.txt',encoding='utf-8')
print(file.read()))
file.close()
[ファイルの読み込み]
ファイルの内容を読み込む。
readを利用するとファイルの全内容を読み込める。
readline()を利用するとファイルの一行分を読み込む。
readlines()はファイルの全行のリストを返す。
ループを利用すると、ファイルを一行ずつ読み込める。
rstrip()は改行を削除する
[ファイルの書き込み]
開くときにモードを指定する。
r 読み込み専用。省略可能。
w 書き込みする時に指定。ファイルが存在しない場合、新しいファイルが作られる。
x ファイルが存在しない場合のみ、ファイルを作成して、
書き込む。 ファイルが存在する場合は何もしない。
a 末尾に書き込み。ファイルが存在しない場合はファイルを作成して
書き込む。
f.write(書き込む文字列でファイルに文字列を書き込む。
<標準ライブラリ>
input()
プログラムの外部からの入力を受け付ける。
ユーザが実行画面で入力した文字をプログラム中で利用できる。
<ソート>
リストに格納されているデータを並べ替えられることをいう
sorted()関数
小さい順に並ぶ。
list.sort()
引数にreverse = Trueを指定すると
降順に並べ替えられる。
<エラー>
エラーには構文エラーと例外の2種類がある。
構文エラー
実行前に発生するエラー
例外
実行中に発生するエラー
例外処理
実行時に例外が発生した場合の処理をかける。
構文エラー・・・コードの書き方が間違っている。
〇syntaxエラー
例外エラー
〇nameerror
定義されていない変数名を利用した場合に発生する。
このエラーが発生したら変数名を打ち間違えていないか
変数を定義し忘れていないかチェック。
〇indexerror
シーケンスの添え字が範囲外の場合に発生する。
〇indentationError
プログラムの前に不要な空白があったり必要な空白がないというエラー。
行の先頭に余計な空白がある。
unexpected indent = 期待されていないインデント
expected an indented block = 期待されるインデントがない
〇import Error
import文でモジュール定義を見つけられなかった場合や
from・・・・import文で指定した名前を
インポート出来なかった場合、発生する。
〇typeError
関数などで適切でない型のオブジェクトが利用された場合に発生する。
データ処理用ライブラリ・・・
ジュピターノートブック:OSSのwebアプリケーションで
プログラミングコードを含むドキュメント。
対話式にコードを実行できて、ノートブック形式のドキュメントを
作成できる。
このドキュメントにはPythonコードとその実行結果を合わせて
保存できる。
作成したドキュメントはEメールに添付したり、dropbox、Githubなどで共有できる。
pandas: 強力なPython製のデータ分析ツール。
主なデータ構造であるSeries(一次元:リストのような形式)とDataframe
(2次元:表のような形式)は財務、統計、その他多くの工学分野での
データ処理に利用されている。
pandasが提供している表形式のデータをサポートするデータフレームクラス
(pandas.Dataframe)を利用して、表形式のデータに対して、
SQLのような問い合わせ、データを加工して新しい列を追加、
複数のDataframeを結合するなどできます。
pandasはファイルフォーマットやデータベースから
データを取り込み、DataFrameに変換でき、
様々な形式で出力できる。
pandasを利用するとpythonのfor文を用いて1行ずつ処理するより
シンプルにテーブルのデータを追加、変更、分析できる。
<pythonとデータ分析>
科学計算、統計解析、機械学習などのライブラリが
豊富で、容易に使える。
作業が自動化できる。
汎用プログラミング言語なのでシステム化などもできる。
データ分析以外でも数値計算、行列計算、
統計解析、回帰分析、多変量解析や
機械学習、ディープラーニング、クラスタリング、
分析結果の可視化など多くのことができる。
<もう一度基本から>
書きやすく読みやすいように設計されている。
人工知能、機械学習に最も使われている。
pythonの統合開発環境としては、
ジュピターノートブック、パイチャーム、アトム、サブライムテキストなどが
良く使われている。
ジュピターノートブックは、起動中にデータをメモリに保持して、
更にデータ加工のログを残すことができるため、
データの前処理に適している。
またフレームワーク(汎用的な機能をまとめた基盤となるソフトウェア)も
数多く用意されており、webアプリ制作であれDJANGO(ジャンゴ)FLASK(フラスク)などが
有名。
<クラス・オブジェクト指向>
クラス・・・設計図
クラスは「コンストラクタ、メンバ、メソッド」の
3つで定義される。
コンストラクタ・・・クラスを呼び出した際に
最初に実行される「初期化用の特殊なメソッド」
インスタンスを生成するときに、
一度だけ呼び出される。
メンバ・・クラス内で使用する変数。
他のオブジェクト指向言語では「プライべート(クラス外からアクセスできない)」と
パブリック(クラス外からもアクセスできる)の2種類があるが、
pythonでは、全てパブリックになる。
ただしプロパティという手法を使うことで
アクセス制限も可能。
クラスで生成するオブジェクトをインスタンスという。
☆一つしかインスタンスを生成しないときは
モジュール。
複数のインスタンスを生成する場合はクラスを定義することが
推薦されている。
時間を計算するためのtimeモジュールは
プログラム内に一つあれば十分かもしれないが
複数のインスタンスを生成することが多いので
クラスで定義しておいたほうが、無難。
<Pythonの標準ライブラリ>
datetime・・・日付や時刻の取得。
文字列⇔日付の変換、n日後、n日前の
日付データを取得等。
shutil・・・高水準なファイル操作を提供する
モジュール。 ファイルのコピーやディレクトリに対する操作を非常に
簡単に書くことができる。
collections・・・appendやpopを高速に行う、
OrderedDict(順序付き辞書)、defaultdict(デフォルト値のある辞書)、
Counter(カウンター付き辞書)等がある。
効率的なアルゴリズムの実装や
プログラミングコンテスト等ではお世話になる。
pdb・・・ブレークポイントの設定や、
ソース行レベルでのシングルステップ実行等の
機能を提供するデバッガ。
インタラクティブシェルでの実行や、
pyなどのScriptファイルとして実行することも出来る。
timeit・・・pythonプログラムの実行時間を
計測するモジュール。
コード1つ1つに対して時間を測ることができる。
細かいパフォーマンスを計れる。
NumPy・・・科学技術計算などで配列や行列の演算を高速で行うための
研究などで数学的な計算をしたいときに、非常に有効なライブラリとなっている
matplotlib・・・pythonでデータをグラフにプロットできるようになる。
グラフの表示にはmatplotlib.pyplotモジュールのplotおよび
showを使用する。
scipy・・・numpyで行える配列や行列の演算を行うことができ、
加えてさらに、信号処理や統計といった計算ができるようになる。
<外部ライブラリ>
tqdm・・・ループの進捗を確認したいときに、以下のような進捗バーを簡単に作成することが
できる。
py2exe・・・pythonScriptをウィンドウズ用のexeへ変換するライブラリ。
simplejson・・JSONのエンコード、デコードライブラリ。
標準ライブラリにJSONがあるがそれと同じように使用することができて、
更に高速に動作するのが特徴。
reguests・・・使いやすいhttpライブラリ。
標準ライブラリにurllibがある。
requestsは非常に使いやすく、最近の書籍でもよく薦められている。
pep8・・・ソースコードのチェックツール。
pythonのスタイルガイド。
使うとどこが違反しているかを教えてくれる。
<python開発環境>
Anaconda・・・python自体の他にscipyやNumpyなどのデータサイエンス系の
必要パッケージもまとめられたパッケージのこと。
pycham・・・・pythonの統合開発環境であり、
OS限らず、Python開発でIDE使うなら実質これ一択。
<python基本用語>
=代入演算子
input = キーボードからの入力を受け取る関数。
andとor 論理演算子
and : 〇〇および〇〇
or : 〇〇あるいは〇〇
=比較演算子
> より大きい
<より小さい
>= 以上
<= 以下
!= 左辺と右辺が違う値
== 左辺と右辺が同じ値
複合代入演算子
+= 左辺の値に右辺の値を加算して代入する
-= 左辺の値に右辺の値を減算して代入する
*= 左辺の値に右辺の値を乗算して代入する
/= 左辺の値に右辺の値を除算して代入する
//=左辺の値に右辺の値を除算して代入する(整数にして)
ミュータブル == 変更可能
イミュータブル == 変更不可能
appendメソッド・・・末尾に要素を追加する
popメソッド・・・任意の位置の要素を取り除き、それを返す。
イテレート・・・繰り返し処理する。
イテレーション・・・すべての要素に順番に何らかの処理をすること
インデックス・・各要素にアクセスする。
ネガティブインデックス・・・最後の要素から-1、-2・・・・
スライス・・・インデックスを2つ指定することで特定の範囲の要素を参照できる。
len関数・・・・文字列の文字数を数えて返す。例えばWebページで
200文字までというのがよくあるが、そのような場合に、
文字数をチェックする用途で使える。
splitメソッド・・・文字列に含まれる任意の文字を区切り文字として、
指定することで、文字列を切り分けることができる。
例えば、1,2,3の「,」を区切り文字として指定すれば
「1」「2」「3」だけを取り出すことができる。
「,」だけではなく、「-」や「.」、さらにはスペースで区切られた文字列から
文字列の部分だけを取り出すといった用途で使える。
セパレーター・・区切り文字
文字列と関数名の間にある「.」・・・関数が操作の対象の文字列を参照するために
つける。 ドット演算子とかメンバー演算子などと呼ぶ。
joinメソッド・・・リストの中に格納された個々の文字列を連結して
一つの文字列にまとめる。
さっきのsplitは、セパレーターで文字列を分割して、それをリストの中に
一つずつ格納した。
Joinはリストの中の個々の文字列を連結して一つにする。
replaceメソッド・・・文字列の一部を置き換える
指定した文字列を別の文字列に書き換える。
formatメソッド・・・文字列を自動作成
文字列の中に別の文字を持ってきて、埋め込むことができる。
例えば「さん、こんにちは」という、文字列を作っておいて、
プログラムの実行中に入力された名前を埋め込み、
「〇〇さん、こんにちは」と表示することができる。
➡プログラムの実行中に文字列を作りたい場合にformatメソッドを使う。
●formatの引数に設定した文字列が順番に埋め込まれる。
なお、引数として設定する文字列が複雑になるので、[,]で区切って
書く。
文字列を埋め込む位置も設定できる。
指定した文字列を埋め込みたい場合、
{}の中に引数番号を書く。
引数の番号は、最初が{0}、次が{1}・・・・のように
並び順に応じて増えていく。
もうひとつの機能が、小数点以下の桁数を指定できる。
先頭の文字列が特定の文字から始まっているか。
➡例えばメールアドレスで 「」から始まっているか
・・・・startswith関数
該当すればTrue 未該当はFalseが返される。
➡末尾の文字列が特定の文字で終わっているか
➡end swith関数
上記と同じ。
この文字は何番目に出てくる?
➡find関数
指定した文字列のインデックスを返す。
この文字はいくつあるか
➡count関数
指定した文字列が何回出てくるのか返す。
文字列が全て英数字かどうか調べる
◎パスワードの確認の時などに使われる。
➡isalnum関数
小文字→大文字にアッパー(アップー)
➡upper関数
全てのアルファベットを大文字に変換する。
➡lower関数
大文字→小文字にロワー(ロー)
全てのアルファベットを小文字に変換する。
英語の羅列で出てくる効果・・・
\n 改行(エスケープシーケンス)
\b バックスペース(エスケープシーケンス)
%= 余り
%s = 文字列フォーマット
for文について
繰り返す・・・
for 変数 in range(回数):
print() ←繰り返す(処理)
=文字列の場合・・・10回繰り返す
forとifを使った文
for c in range(10):
if c %2 ==0:
print(変数) ←もし2で割った余りが0ならこの処理をする。
(1,2,3,4,5、・・・・で繰り返す)
else:
print(変数) ←そうじゃないならこっちの処理をする。
rangeオブジェクト:
range(start,stop[,step])
start・・・countを開始する値
stop ・・・・countを終了する値
step・・・countする際のステップ(省略すると1ずづカウントアップする)
for文の注意点・・・0からカウントされる。
while文・・・条件式がTRUEである限り、処理を繰り返す。
while 条件式:
繰り返す処理
シーケンス・・・データが順番に並んでいて、並んでいる順番で
処理が行えることを指す。
対義語==ランダム
str(文字列) = 1つ1つの文字が順番に並んでいる。= シーケンス
pythonにはシーケンス型で利用できる関数やメソッドがある。
pythonに組み込まれている関数
➡「ビルドイン関数」・「ビルドインメソッド」という。
<リスト自体を要素化>
リスト自体を要素できる。
インデックスで参照すると要素そのものが参照される。
☆ リストの要素を参照する場合はダブルインデックスを使う。
まずリストのインデックス
(何番目のリスト?)
そのあとにその中の要素のインデックス
(何番目の要素)
共通するのは0から始まるということ。
<リストの操作>
●結合・・・2つのリストを1つにする。
extendメソッド。
extendは「+=」演算子に置き換えられる。
●指定した位置に要素を追加
insertメソッド
●インデックスで指定した要素を削除する
delキーワード
メソッドと違いdel.変数で書く。(delで始まる)
●位置が分からない要素を削除する
removeメソッド
値をはっきり指定して削除できる。
●要素のインデックスを知る
indexメソッド
値を指定してそのインデックスを知れる。
●その値はあるかどうか知る
in演算子
値 in 変数
あればTRUE、なければfalseを返す。
●その値はリストにいくつあるのか知る
countメソッド
特定の値がいくつ含まれているかカウントする。
●要素の並び替え
sortメソッド
アルファベット、ひらがな、カタカナ・・・昇順(あいうえお順)
●リストのコピー
リストはオブジェクトなので、リスト変数をほかの変数に代入すると
オブジェクトの参照が代入される。
<リストの中に要素製造装置を入れる>
内包表記のこと。
簡単に書ける式。
変数 = [変数 for 変数(あ)in range(数値)]
ifステートメントを入れると特定のものだけをリストに追加できる。
・・・・・if 変数 %2 == 1
2で割ったものが1になるもの➡奇数だけリストに格納される。
<定数リスト>
リストには一度セットした要素を書き換えられないイミュータブルなリストがある。
これをタプルという。
タプルの使い方: 一個以上の要素を持つタプルは
個々の要素をカンマで区切っていく。
タプルを使うと一度に複数の変数に代入できる。
<辞書>
キー(名前)と値のペアが集まった順序を持たないオブジェクト。
イミュータブルな型なら何でも(文字列や数字)キーとして
使える。
⦿辞書型を作るときには、{}で囲んで
キー:値と書く。
〇辞書に格納されているものを取り出すときには[]でキーを囲んで
アクセスする。
変数 = 辞書[キー]
<要素の重複を許さない集合>
集合(set型)はリストやタプルと同様で
複数のデータを1つにまとめるものだが、重複した要素を持たないという
違いがある。
集合は辞書と同じで{}で囲んで要素をカンマで区切る。
ただ辞書のキーだけを残したものが集合。
集合の重複した値を持たないので、
リストから重複した要素を取り除くような場面で
使える。
リストを集合に変換しただけで、重複した値がなくなるので
これをもう一度リストに戻せば
重複した要素を簡単にのぞける。
<リスト要素をランダムに抽出する>
randomモジュールの中にchoiceメソッドがある
これはリストからランダムに1つの要素を取り出す。
辞書(dict型)・・・リストやタプルが順序を持ったオブジェクトの並びで
整数値のインデックスでアクセスするのに対して、
辞書型はキー(名前)と値のペアがごちゃっと集まった順序を持たない
集合で、イミュータブル(書き換え不可)な値なら何でも
(文字列、数値など)使える
つまりキーだけを変更することはできないので、
変更する場合は、キー/値のペアを変更(追加・削除)することになる。
辞書そのものはミュータブル(書き換え可能)。
◎キーを指定して値を変更
➡変数[キー] = ’変更後の値’
◎キー/値の追加
変数[キー] = '値'
◎for文ですべてのキーをイテレートできる(反復処理)
・・・・イテレーションアクセスという。
values()メソッドで値をイテレートできる。
さらにitems()メソッドでキーと値をイテレートできる。
<辞書の操作>
●2要素のシーケンスを辞書に変換する。
dict()関数
●辞書に要素を追加する
updateメソッド
辞書のキーと値を別の辞書にコピーできる。
なお、追加する辞書と同じキーがある場合は
追加した辞書の値で上書きされる。
●辞書の要素をまるごとコピーする
copy()メソッド
辞書の要素をまとめてコピーできます
参照ではなくオブジェクトそのものがコピーされる。
●値だけを取得する
valuesメソッド
●要素の削除
del演算子
キーを指定すると対象の要素が削除される。
●すべての要素を削除する
clearメソッドを使う。
辞書からすべての値とキーを削除する。
<関数>名前の付いたコードで任意の場所にかける。
メソッドとの違い
オブジェクトを参照する変数.メソッド名
関数
関数名()で実行できる
関数もメソッドも何らかのオブジェクトに対して実行する。
関数はほかのコードから切り離されているものなので、「内部でオブジェクトが用意されている」という
違いがある。
オブジェクトを定義する「クラス」の内部で書かれたものをメソッド、それ以外の場所、ソースファイル(モジュール)に
直接書かれたものを関数と呼んで区別している。
書式: def 関数名(パラメーター1,パラメーター2,・・・):
処理
return 戻り値
パラメーター・・・関数の呼び出し元から値を受け取るためのもので、
変数と同じように任意の名前を付けられる。
パラメータが必要なければ()を空にする。
関数で処理した結果を呼び出し元に渡したい場合は、戻り値として返すようにする。
return 戻り値 と書いて戻り値にはTrueやfalseのようなリテラルや変数を指定できる。
関数名(引数)と書いてよび出すと、引数に指定した値が関数側のパラメーターにコピーされる。
関数内部の処理が順次、実行されて最後にreturn文で指定した戻り値が呼び出し元に返される。
パラメーターは必要な数だけ設定できる。
➡呼び出し側の引数と関数のパラメータの順番は同じである必要がある。
??順番を気にせずにパラメーターに渡したい
➡この場合はパラメーター名を指定することで引数の値を渡すことができる。
これを「キーワード引数」という。
デフォルトパラメーター・・・
必ずしも引数を渡さなくてはならないわけではない。
関数側でパラメーターの値を設定しておけば、
引数がない場合に設定した値が使用されるようになる。
これを「デフォルトパラメーター」という。
デフォルトパラメーターはデフォルト値を持たないパラメーターの後に書く必要がある。
例では引数が1つなのでこの値がパラメーターaに渡される。
引数を2つ指定したらパラメーターbのデフォルト値が上書きされる。
<人口無脳>・・・人間とおしゃべりをしてくれるプログラム(会話プログラム)
人工知能が目指しているのは知能そのもの。
人工知能は、その知的活動の結果として会話を行うので相手が言ったことの意味を理解しなければいけないし、
人工知能自身も自分が何を言ってるのか分かったうえで発言する。
人工知能にとって重要なのは会話という行為ではなく、意味のりかいや想像(推論)、感情認識などの会話を支える「目に見えない」知的活動。
人口無脳は会話の行為を目指す。
「愉快な会話」、「楽しませる会話」➡知的活動はない
〇GUIにする方法。
①kivy クロスプラットフォームに対応したGUIライブラリ。
IOSやAndroidでも動くようなGUIアプリを作れる。
ただ日本語文献が少なく、トラブルシューティングが難しい
※クロスプラットフォームとは・・異なるプラットフォーム(OSの基礎部分)ウィンドウとmacのように、
仕様が全く異なる機械(ハードウェア)またはOS上で
同じ仕様の物を動かすことができるプログラム(ソフトウェア)のこと。
同様の呼称にマルチプラットフォームがある
kivy最大の特徴はopenGLという3Dも扱えるグラフィクスライブラリを使うことが
できる➡簡単なゲームであれば作れる。
②tkinter
標準GUIライブラリで日本語の文献も豊富にある。
標準でインストールされているため、
追加でインストールする必要はないので
環境構築が楽。
tkinterが動くマシンであればクロスプラットフォームに対応している。
③PyQt
安定性も高く企業が開発している点でも安心。
GUI・・・グラフィックユーザインタフェース
ユーザーからの入力やシステムの状態変化など、ある出来事をきっかけに
プログラムが実行される。
この出来事をイベントといい、イベントをきっかけにして、
プログラムが起動されることをイベントドリブン(イベント駆動)という。
イベントドリブン型のアプリケーションは一般的に次のようなメインルーチンを
持っている。
1初期化
2イベントを取得する
3イベントの種類に応じて処理を振り分ける
4 2に戻る。
2から4をイベントループと呼び、アプリケーションは、
ユーザーからの入力などのイベントを待つ。
そして3の処理に対応する機能がバインディング。
バインディング☞ウインドウでイベントが発生した時に、それに応じて定義した
プログラムを実行する。
このプログラムをイベントハンドラ・コールバック関数という。
tkinterの手順
①メインウインドウを作る
②ウィジェットを追加してウインドウに配置する。
③イベントループを開始してユーザーからの要求(イベント)を処理する。
画面のサイズを拡大したときにウィジェットが崩れる☞「stickyを使う」
sticky ☞粘着するとかそんな意味。
⦿ウィジェットをどこに貼り付けるのかの指定。
➡north(北), south(南),east(東),west(西)
pythonライブラリ
Django ☞全部乗せのフレームワーク
Numpy ☞データ処理、数値計算用ライブラリ
pandas ☞時系列データの扱いが楽。楽にデータ操作をするための機能が豊富。
matplotlib ☞ Numpy向けのグラフ描画ライブラリ。
scipy ☞科学計算などに使われる。
Jupyter ☞ pythonで分析をしたときの記録用ツール
コードやコメント、データなどをひとまとめに残しておけるツール。
kivy ☞ UIライブラリ。スマホとかマルチタッチ対応もできる。
cocos2d ゲームライブラリ。
requests ☞ httpでウェブサイトのデータを取れる。
もう一度基本構文
演算子
// 切り捨て除算
% 除算の余り
代入演算子
value = 10
value += 5
10 + 5 = value = 15
value -= 5
5-5 = value = 0
value *= 5
5 * 5 = value = 25
value /= 5
5 / 5 = value = 1
value // = 2
5 / 2 = と同じ
コメントは「#」か["""]で記述できる。
文字列
ただの文字列でも配列みたいな扱いができる。
str = "apples"
str[0] ☞ A
"test"[2] ☞ s
"ex = "Apples"
ex[:3] ☞ App
ex[1:4] ☞ ppl
ex[3:] ☞ les
比較演算子
a == b aとbが等しい
a != b aとbが異なる
a < b aがbよりも小さい
a > b aがbよりも大きい
a <= b aがb以下である
a >= b aがb以上である
a <> b aがbと異なる
a is b aがbと等しい
a is not b aがbと異なる(notする)
a in b aがbに含まれる(bにinしている)
a not in b aがbに含まれない(not in している)
分岐
if 条件:
処理
elif 条件:
処理
else:
処理
関数
def 関数名(引数, ...):
処理
呼び出しは関数名(引数)のように記述する。
def ex(value):
print(value)
()を出力する関数
ex(テスト) ➡テスト と出力される
モジュール
import モジュール import random
import random.randint
from random import randint
from random import *
配列
list = ["a","b","c"]
☆追加するには・・・list.append("d") [末尾に追加]
list = ["a","b","c","d"]になる
list = ["a","b","c"]
list.insert(1,"x") [指定した位置に追加]この場合(位置,"要素")と記述する
list = ["a","x","b","c"]になる
☆切り出し
list = [5,6,7,8,9]
s = list[:2] s = [5,6]
s = list[2:4] s = [7,8]
s = list[1:] s = [6,7,8,9]
削除
①要素を指定
list = ["a","b","c","d"] list = ["a","b","d"]
list.remove("c") remove(要素)でその要素を削除
②indexを指定
list = ["a","b","c","d"] 「結果は上記と同じ」
list.pop(2) popで指定したインデックスの要素を削除
③list = ["a","b","c","d"] list = ["a","b","c"]
list.pop() 指定なしだと末尾が削除される。
☆タプル
tuple = (1,"A",true)
for 繰り返し
for 変数 in リスト変数:
print(変数)
for 変数 in タプル変数:
print(変数)
while 変数 比較演算子 数値: 条件が成立している間
print(文字列) この文字列を繰り返す。
変数 + 1 1つずつ上がる。
☞「○○の値になるまで」「○○を越したら終了」など。
辞書(変数) = {キー : 値,・・・で記述}
print(辞書変数[キー]) ☞そのキーとセットになっている値が出力される。
⦿削除
del 辞書変数[キー] ☞そのキーと値が両方削除される。
with構文
所定の機能をより安全かつ簡潔に使う構文。
例えば、通常ならファイルをオープンした後、
クローズしなければならないところが、
withを使うと、ファイルのオープン後のクローズが不要になる。
◎例外が発生しても必ずcloseされたり、closeを忘れずに済む。
with構文が使える関数は、必ず例外処理やcloseなどの終了処理の
記述が必須となる。
pythonで使えるデータは基本的に「文字列」と「数値」
インデントはスペース4つ。
☆変数と定義。
関数の外で作った変数 ➡グローバル変数
関数の中で作った変数 ☞ローカル変数
変数だけの宣言はできない。
color エラー
変数 = 値 の式は絶対!!
☆クラス
クラスもオブジェクト。
クラスからオブジェクトを作ることを「インスタンス化」という
そのオブジェクトを「インスタンス」という。
インスタンスメソッドの第一引数にはインスタンス自身を表すselfを必ず指定。
コンストラクタは初期化メソッド__init__を使う。
コンストラクタ・・・クラスを定義する場合、そのクラスのインストラクタが
生成されるときに呼び出される初期化メソッドを定義できる。
これを「コンストラクタ」という。
記述の仕方☆
def init(self,src1,src2,・・・):
※クラス文中に記述する。