スマートフォンで閲覧すると,表示が崩れる場合があります。
Pythonは、1991年にオランダ出身グイド・ヴァン・ロッサム氏によって開発されたプログラミング言語です。Pythonは、人間にとって読みやすく、それでいて
効率よくコードをなるべく簡単に書けるようにという設計思想があり、Javaと同様にオブジェクト指向プログラミングをサポートしており、プログラマーが
小規模から大規模な開発プロジェクトまで、幅広く明瞭で簡潔なコードを書くことを支援するのを目的としています。
オブジェクト指向に限らず、c言語のような構造化プログラミング、PrologやLISP、Schemeといった関数型プログラミング・論理型プログラミングといった
複数のプログラミングパラダイムにも対応しています。
あと、Pythonはインタープリタ型言語に属しています。C言語やJavaやVBは、ソースコードを打ち込めば、そのままでは実行できません。
コンパイルという作業が必要になります。しかし、Pythonにはその必要はないのです。コードを打ち込んでエンターキーを押すと、コンピュータが
その場で解釈して実行してくれます。
Pythonは、AI(人工知能)開発が得意だと言われています。実際に画像認識プログラムなどは主にPythonによって開発されていることが多く、
機械学習のライブラリ、計算用のライブラリも豊富にあります。Pythonが計算機言語の一種といわれる所以の一つだと思います。
Pythonは計算したりするのが主なので、数学の知識もある程度あった方が良いと個人的には思います。あと言い忘れましたが、Pythonは
スクリプト言語とも呼ばれることがあります。あとは、人間の言葉を理解するなどしてチャットしたりといったプログラムの開発にもPythonは使われています。
言うなれば、自然言語処理技術です。 他には、ゲームの開発にもPythonは使われているようです。しかしここでは、パイソンの文法や、プログラム開発技術などに
焦点を当てるので、ゲームの開発はそれほど登場しませんので、あしからず。プログラミングは、遊びではないのです。忍耐強さが常に付きまといます。
そういうことを皆さんに意識していただいてほしく、プログラミングを行っていただけたらと思います。当方も、わかりやすく楽しい授業にしていきたいと
考えておりますので、宜しくお願い致します。
Pythonは、ソフトウェアをインストールすることで実行できるようになります。
(ここでは、詳しいインストール方法は割愛させていただきます。
※新しくインストールの説明を載せましたので御覧ください⇒説明)
Pythonは、コマンドプロンプトを起動して対話的にコマンドを入力していって、逐次命令を実行させる方法と、スクリプト(コマンド定義など集まり)
ファイルをあらかじめ作っておいてそれを一括で実行させる方法があります。 まず、前者の方法ですが、Windowsコマンドプロンプトを起動して、
> Python
と打ち込みます。そうすると、Pythonのインタープリタが起動し、「>>>」というコマンドプロンプトが起動します。これがいわゆる対話モードです。
この対話モード(インタープリタ)を終了させるときには、ctrl-z、または、quit() を入力して終了します。例を示します。
入力例:
01 >>> print(3 + 5)以上が入力例でした。電卓にように簡単に計算しているのがわかります。このようにPythonは簡単に計算ができるというのが特徴の一つです。
02 8
03 >>> 4 + 5
04 9
05 >>> 10 + _
06 19
07 >>> a = 13
08 >>> if a == 13:
09 ... print(a)
10 ...
11 13
12 >>> 'abcde'
13 'abcde'
ここからがPythonの大事なポイントとなりますが。プログラムの書き方なのですが、Cやc++言語と異なり、フリーフォーマットで記述できません。
pythonプログラムは行単位(行頭から改行まで)で処理されます。しかし、一つの文を1行で記述できないケースもあると思います。
その場合は次のようにして、
a = rst + uvw + xyz \とバックスラッシュ文字(\)を使用して、継続させることが可能です。(ただしコメント記号#は1,2行目には挿入できません。)
+ aaa - bbb / ccc * ddd \
+ xxx / yyy + zzz - vvv / 50 # ~に関する計算処理
aaa = [1, 2, 3, # ~コメント1PythonにもJavaと同様に、制御構文があり、if文/while文などが存在します。
4, 5, 6, # ~コメント2
7, 8, 9] # ~コメント3
01 if 条件 :if文についてはあとで詳しく勉強しますが、上の文を見てください。この文は、条件が真であれば、02, 03行を
02 a = 30
03 b = 65
04 else :
05 c = 75
06 d = 100
Pythonではコメントは以下のように記述する決まりになっています。
a = 120 # 変数aに 120 を代入#から改行までは、コメントとみなされます。
# 変数aに 120 を代入と2行に分けて書いても問題ありません。
a = 120
"""
コメントその1・・・
コメントその2・・・
"""
なぜこのように記述するのかという理由についてですが、Pythonでは演算を行わないで単に文字列のみを記述した場合には、その文字列
ここからがおそらくPythonの肝の部分になってくるように思います。計算したりするのがPythonの目的なので、これがないとPythonでは
ありませんね。まずリテラルというのは、JavaやC/c++言語などの定数に相当します。定数とは変数ではない決まった値のことです。
例:123、"SpaceColony"、'xyz'、True、9999.999、314159e-5 など
文字列リテラルとバイト列リテラル(bytes型リテラル,常にbやBが先頭に来る) は,対応する一重引用符「'」、または,二重引用符「"」で囲まれます。
Pythonにおいては、この2つの引用符は同じ意味になります。区別されません。なお、バイト列リテラルにおいては ASCII文字のみを含むことが出来ます。
>>> "文字列"文字列は、+演算子を使用して連結させることができます。あと、*演算子で反復させることが可能です。また、文字列リテラルをスペースで区切るとそれらは
'文字列'
>>> '文字列'
'文字列'
>>> b"abcdefg"←バイト列リテラル
b'abcdefg'
>>> b"文字列" # エラー(ASCII文字のみ対応なため)
>>> 2 * "xyz" + "abcde" + "fghij" "klmn" "opqrs"複数行にわたる文字列は,対応する3連の引用符 '''、または"""で囲むことによって可能となります。
'xyzxyzabcdefghijklmnopqrs'
>>> """\出力結果の \n は改行を表しています。結果を見ると、defのところだけ改行が出力されているのがわかります。(他は\で改行出力を抑制しているため。)
... abc\
... def
... ghi\
... """
'abcdef\nghi'
Pythonにおいて使用できるエスケープシーケンスは以下の通りです。
\newline……………行末に \ を記述するとその行の改行が無視される*以下に示すエスケープシーケンスは,文字列のみに対して有効です。
\'……………………一重引用符(シングルクォーテーション)
\"……………………二重引用符(ダブルクォーテーション)
\\……………………バックスラッシュ(円記号)
\a……………………ベル
\b……………………バック スペース
\f……………………改ページ
\n……………………行送り
\r……………………復帰
\t……………………水平タブ
\v……………………垂直タブ
\ooo…………………8進表記による ASCII文字
\xhh…………………16進表記による ASCII文字
>>> 15上記はどれも15を表していますが、表記方法が異なるだけです。いろいろと実験してみて下さい。
15
>>> 0xf
15
>>> 0o17
15
>>> 0b1111
15
>>> True浮動小数点数リテラルの取り得る値の範囲は、実装に依存します。なお、数値はすべて 10進数であり、仮数部と指数部を使用して表現する場合,
True
>>> False
False
>>> 60 + True
61
>>> 70 - True
69
>>> 85 + False
85
>>> 100 * False
0
>>> 101 * True
101
>>> 100 / False
ここでは、False が 0 として計算するので、100 は 0で割り切れないので、エラーが発生する.
>>> 12345.567虚数リテラルは,aj (aJ) のように表現します。これは、実数部が 0.0 の複素数を表しています。実数部がゼロではない複素数を生成するには、
12345.567
>>> 12345.01
12345.01
>>> 1234501e-2
12345.01
>>> 12345022e-3
12345.022
>>> 314159265e-8
3.14159265
01 >>> 3.14j # 3.14J でもOKcomplex関数は、complex(2,5)においては、complex(2 + 5j)とも書けますし、complex("2+5j")とも書くことができます。
02 3.14j
03 >>> 2.56 + 3.1416j
04 (2.56+3.1416j)
05 >>> complex(2.56, 3.1416)
06 (2.56+3.1416j)
07 >>> complex(2.56, 3.1416).real # 実数部の参照(参照のみ)
08 2.56
09 >>> complex(2.56, 3.1416).imag # 虚数部の参照(参照のみ)
10 3.1416
11 >>> complex(1,2) + complex(3,4) # 複素数の加算
12 (4+6j)
13 >>> complex(1,2) * complex(3,4) # 複素数の乗算
14 (-5+10j)
15 >>> complex(3,4) / complex(1,2) # 複素数の除算
16 (2.2-0.4j)
17 >>> complex(1,2) / complex(3,4) # 複素数の除算2
18 (0.44+0.08j)
変数に使用できる文字について:
Pythonでは変数に使用できる文字についていろいろと制約があります。例えば、先頭の文字に数字は使用はできません。例→7abなど
アルファベット、下線 _、および,数字を利用できます。ただし下線 _から始まる識別子には、特別な意味がある場合があります。
また、Python言語における予約語(キーワード)は、変数名として利用できません。
| False | except | pass |
| None | finally | raise |
| True | for | return |
| and | from | try |
| as | global | while |
| assert | if | with |
| break | import | yield |
| class | in | |
| continue | is | |
| def | lambda | |
| del | nonlocal | |
| elif | not | |
| else | or |
Pythonには以下のような比較演算子が存在します。これらの演算子は,オブジェクト(データ)の値同士の比較を行います.
< : より小さい a < b以上述べた演算子を利用して、以下のような論理演算が可能です。
> : より大きい a > b
<= : 以下 a <= b
>= : 以上 a >= b
== : 等しい a == b
!= : 等しくない a != b
is : 同じオブジェクト a is b
is not : 同じオブジェクトではない a is not b
Pythonには以下のような数値演算を行うための演算子が用意されています。またJava,C/C++など同様,代入と加算を同時に行う演算子 += などや、
-=、*=、/= ………なども可能です。ただしインクリメント演算子(++)や、デクリメント演算子(ーー)や、条件演算子=?:が存在しませんので.
注意してください。
+ : 加算(複素数に対しても適用可能、結合(文字列), x + y)例は省略します。また複素数に対しては、以上の演算子の演算とともに、以下のような処理が可能です。
- : 減算(複素数に対しても可能、符号の変更, x - y, -y)
* : 乗算(複素数に対しても可能、文字列の繰り返し, x * y, *x)
** : べき乗(複素数に対しても可能,C/C++には存在しない,x ** y)
/ : 除算(結果は浮動小数点数、複素数に対しても適用可能, x / y)
// : 除算(小数点以下を切り捨て, x // y)
% : 余り(浮動小数点数に対しても可能, x % y)
c.conjugate()……………………複素数cの共役複素数忘れているかも知れないので、共役な複素数とは、(a + bj)に対して、(a - bj)となる複素数のことを指します。
c.real()……………………………複素数cの実部
c.imag()……………………………複素数cの虚部
Pythonでは,整数に対し、以下のようにビット単位での演算を行う演算子が用意されています。なお、これもC/C++同様に
>>=, <<=, &= といった演算も可能です。
<< : 左にビットシフト a << 3
>> : 右にビットシフト a >> 4
& : ビットごとの論理積 x & y
| : ビットごとの論理和 x | y
^ : ビットごとの排他的論理和 x ^ y
~ : 1の補数( 0 と 1 の 反転) ~x
いわゆるデータ構造のことで、配列などを扱います。JavaにもC/C++にも配列は存在しますが、Pythonの配列はだいぶ異なっています。
しかし習得すれば、いろいろ応用が効きますので、学んでおいて損はないと思います。実はここがPythonの真価が発揮されるところ
で、肝の肝でもあったりします。ぜひ勉強していきましょう.ちなみにPythonにおける配列は、リストといいます。
非常に重要なデータ構造であり、いろいろな場面で使用されています。1つの変数で複数のデータを扱うためのデータになります。
今まで学んできた普通の変数は、単純変数と呼ばれ、スカラーと呼ばれています。また、これから扱う配列は、ベクトルに対応しています
ベクトルは高校2年くらいで習うと思いますが、まずは2つの数の組をセットで扱いますね。これは配列の基本になります。
その後、3次元のベクトルに拡張していって、いろいろ問題を解くと思いますが、これを連想してもらえればOKです。
配列も同様に、次元を拡張していって、データ数を増やしていくことが可能となります。
複数のデータをひとまとまりにして、扱うので、顧客データの管理や、学生管理システム、成績管理システムなどの開発に
向いています. 例えば、C/C++ 言語において、
int x[20]; // 要素の数 20 の部分は定数である必要があるこのように定義することにより、変数xは 20個の要素を持った配列変数だと見なされて、メモリーに確保されます。
x[3] = 4.0;上の例では、配列 x の4番目の要素に、4.0を代入しています。そして、8番目の要素に記憶されている値が、yに代入されています。さらに、 16番目の要素の値がzに代入されています。
y = x[7];
z = x[15];
int x[5] = { 100, 200, 300, 400, 500};このような宣言がなされていたと仮定して,説明を行います。100 ~ 500は、各要素に記憶される値の初期値になります。
int *y; // int y[5]; と宣言した場合,y = x; は実行できない
y = x; # または y = &(x[0]);変数x と 変数y は同じものを指していることになるので、変数xと変数yはほとんど同じものとなります。
シーケンスとは、順番の、順序通りという意味ですが、これらの型は有限の順序集合を表しています。
要素の値などを書き換え(変更)できないシーケンス型として、文字列型・タプル型・bytes型
が存在します。これらの型はイミュータブルとも言います。また逆に、変更可能なシーケンス型として
リスト型( list ) ・ Range型 ・ ByteArray型が存在します。これらはミュータブルと言います。
シーケンス型のデータを参照する基本的な方法は、C/C++における配列同様、添え字になります。
ただし、Pythonにおいては、負の添え字も使用可能です。次の文字列を使って説明いたします。
test = "Python_Mania";正の添え字を使用する場合、先頭の文字に対応する添え字は0,最後の文字に対応する添え字は
+---+---+---+---+---+---+---+---+---+---+---+---+この場合、test[0] = 'P' で、test[-4] = 'a' ,test[7] = 'M' となります。
| P | y | t | h | o | n | _ | M | a | n | i | a |
+---+---+---+---+---+---+---+---+---+---+---+---+
0 1 2 3 4 5 6 7 8 9 10 11
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
(対応する正の添え字) - (対応する負の添え字) = (文字の長さ)また、Pythonにおいては、スライス(slice)という表現法があり、部分文字列を指定することが可能です。 sliceは、
[m1:m2[:m3]]のように記述します。これは、
>>> test = "PythonMania";C/C++には、負の添え字やスライスに対応する機能がありません。
>>> test[0:6] # 添え字 0 から 6 の手前まで(6は含まず)
'Python'
>>> test[:9] # 最初から添え字 9 の手前まで
'PythonMan'
>>> test[8:] # 添え字 8 から最後まで
'nia'
>>> test[6:-1] # 添え字 6 から最後の手前まで(最後は含まない)
'Mani'
>>> test[0:9:2] # 添え字0から,9 の手前まで 2ずつ増やしながら抜き出す
'PtoMn'
※各項目別窓で開きます。
変更可能・不可能にかかわらず、ほとんどのシーケンス型でサポートされており、同じ型のシーケンス同士に対しては、比較もサポートしています.ここからは、変更不可能なシーケンス型について見ていきたいと思います。
文字列はstrオブジェクトです。
一重引用符(')または二重引用符(")で囲み、 どちらも同じ文字列です。
また、一重引用符 or 二重引用符を3つ続けることによって,複数行にわたる文字列表現が可能です。(前述で説明)
文字列に対しては、先述のシーケンス型における共通の演算すべてに加え、以下に述べるメソッドが使用可能です。
しかし、ここでは各項目詳細に解説していきます。
タプルとは、任意のPythonオブジェクトのことで、丸括弧で囲まれたものです。以下に示します。
bytes型は、8ビット、つまり1バイトであり、 0~256 までの範囲の整数で表されます。
>>> b"abcdef"
b'abcdef'
変更可能なシーケンス型には以下のようなものがあります。
リストは、C/C++における配列に相当するオブジェクトで,格納はもちろん,追加や削除・挿入や変更が可能です。
データの個数を数えることも可能です。買い物リストや、やることリストなど,を思い浮かべてもらえれば、わかりやすいかと思います。
セット(set)型とも言います。setオブジェクトは,ハッシュが可能な(=変更不可能な)オブジェクトの順序のない集まりであり,
数学における集合に相当します。よって、ある要素が含まれる、要素の数などに相当する演算は可能です。しかし、添え字やスライスなど、シーケンス型に
対して使用されるような操作は不可能です。また、 set は 異なる型のオブジェクトを要素として持つことができます。
タプル型・リスト型・辞書型も同様です。なお、C++の set は要素を追加・削除するたびに自動的にソートされますが、こちらの set はソートされません。
set には、set および frozenset という 2種類 の集合型が存在します。 set は変更可能な集合型であり,要素の追加や削除といった操作が
可能です。変更可能なため、ハッシュ値を持たず、辞書のキーや他の集合の要素として用いることができません。
一方、 frozenset 型は変更不可能であり,ハッシュ可能です。作成後に内容の改変ができないため、辞書のキーや他の集合の要素として用いることが
できます。
set は,要素を波括弧{}でくくって、カンマ区切りで列挙していくことによって生成できます。空のsetの場合、波括弧のみとなります。
マッピング型は、辞書型とも言い,ハッシュ可能な値であるキーと任意のオブジェクトのペアで構成されます。
現在において,標準のマッピング型としては、辞書があります。こちらも異なる型のオブジェクトを要素として持つことができます。
タプル型・リスト型・集合型も同様です。なお、C++における mapは、データが入力されるたびに自動的にソートされますが、こちらの mapはソートがされません。