https://www.python.org/
DounloadsタグからOS(例えばWindows)を選択してダウンロードを開始します。
途中で、Add Python PATH にチェックを入れてください。
Custamize installation でインストールするフォルダを指定します。
オプション指定で pip と tcl/tk をチェックしておきます。
インストール完了後、スタート→Windowsシステムツール→コマンドプロンプトで
C:\Users\.......>python
と入力すると
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license"
for more information.
>>>
のように表示されたらOKです。
インストールが完了したら Windows スタートマーク をクリックして、 Python → Python3.XX を押さえてデスクトップにドラッグ&ドロップします。デスクトップには下のように、Command
Promptと、Notepad と sakuraエディター なども用意しておくと便利でしょう。
Python を実行する
方法@: インタープリタを呼び出す
コマンドプロンプトから
C:\Users\........>python
または
C:\Users\......>py
と入力すると、インタープリタの入力プロンプト >>> が表示されるので
>>> print("Hello World")
のように直接プログラムを入力して実行します。
C言語のようにコンパイルしないで直接実行できるPythonはインタープリタ言語です。(後述しますがコンパイルしてexeファイルすることもできます)
方法A: スクリプトを書いて実行
スクリプト(プログラム原稿)を利用する方法です。
例えば、Dドライブの pyt というフォルダにスクリプトを作るには、
ExplolerでDドライブを選択して右クリック → 新規作成 → フォルダ → 「新しいフォルダー」をスクリプト保存用として 「pyt」 のように書き換えます。
Notepadまたはsakuraエディターを使ってスクリプトを作成します。
print ("Hello, Python")
名前を付けて保存で、
test.py として d:\pyt に保存終了します。
コマンドプロンプトを起動して、
c:\users\.......> d: dドライブへ移動し(Cドライブの場合は不要です)
d:\ >cd \pyt チェンジディレクトリでプログラムのあるディレクトリへ移動して
d:\pyt>py test.py test.pyを実行します
あるいは、次のようなBATファイルをNotepadで作成し
d:
cd \pyt
py test.py
pause
これを test.bat というファイル名でセーブしておくと、エクスプローラーでこの test.bat をクリックすることで簡単にプログラムを実行することができます。
print() とinput() 関数
よく使う print() 関数と、input() 関数です。
下のスクリプトを作り、上のAの方法でプログラムを実行してみてください。
st = input("文字を入力してください ")
print("文字 ",st," が入力されました")
実行して ”ABC” と入力すると
D:\pyt>py test.py
文字を入力してください ABC
文字 ABC が入力されました
のような結果となるはずです。input()関数で変数 st に入力した文字列がprint()関数で出力されています。
★print文のフォーマット
小数点以下3位まで表示
s = 123.45678
print("{:.3f}".format(s))
123.457
%を表示
print("{:% }".format(数値))
3桁毎にカンマを付ける
print("{:,}".format(123456789))
Python の文法
●コメント(注釈)文
プログラムに関係しない参照コメント文は
# シャープ記号から改行コードまではコメント
または、
''' このように
三連シングルクォートに挟まれた総ての文字行はコメント
'''
●文と、文のブロック
プログラムの命令である文(ステートメント)は、改行または ; (セミコロン)で区切ります。
一行に納まらない長い文は \(バックスラッシュ)改行コード で続行することができます。
一連の関連した文で構成されるブロックは : (コロン)で開始し、字下げ(インデント)をします。
ブロックの終了でインデントを戻します。
例)
x = 6 #
単一文
y = 20
#
単一文
if x > y: #
複合文 :ブロックを開始
print("Xはyより大きい") #
字下げしたブロック
print("x=",x," y=",y)
# 字下げしたブロック
else: # インデント戻し、複合文 :でブロックを開始
print("yはxより大きい") #
字下げしたブロック
print("y=",y," x=",x)
# 字下げしたブロック
if 文や for , while 文などで用いられる文のブロックは通常4スペースのインデント(字下げ)で行います。
ブロックの入れ子構造が深くなる毎に4スペースの字下げをします。
字下げ数は4に限定されている訳ではなく他の数でも可とされています。C言語のブロック記号である { } や、他の言語で使われるend文などに比べ、一見、すっきりした手法と感じられます。しかし、構文の入れ子構造が複雑になって来ると、このコロンとインデントによる方法は混乱の原因となる危険性があります。特にブロックが2重3重の入れ子構造になる場合、ブロックの出口にインデントを付けた
} があれば、対応する入り口のブロックと容易に対応が見分けられますが、Pythonでは手がかりが消えてしまうため要注意です。一例として後述のbreak文を参照してください。
●データ型
変数の型宣言は不要、代入時に自動判断されます。
x = 100 # xはint型になる
x = 0b11000100 # 2進数
x = 0o777 # 8進数
x = 0xffff # 16進数
x = 1234567890123456 # Long型(メモリの限り)
pi = 3.1415 # float型
x = 3.14j # 虚数型
x = True # または False bool型
moji = "abcd" # または moji='abcd' str型
x = [25,'zvd',3.1415] # list型
データ型は
dt = 123.45
print(type(dt))
<class 'float'>
のように確かめることができます。
★データ型は要注意
データ型が既に決まっていてもinput文などで再入力される場合は、
N = int(input( ))
のように型指定しないとエラーとなる場合があります。
型が自動決定されるという機能は便利そうで厄介な機能です。Cなどでは一回型宣言すれば型が勝手に変わることなどなく、型を変更したい場合のみキャスト(型はめ)することで良いのですが、pythonでは意図しないで型が変わってしまうことがあるためinputなどの操作の度に型指定しなければなりません。
●エスケープ文字
キャリッジリターンCRやラインフィードLFなど、文字で書くことができないエスケープ文字は \(バックスラッシュ) で始まる下記の表記で表すことができます。
\\ # バックスラッシュ(日本語で円記号)
\' # シングルクォート
\n # LF
\r # CR
\t # タブ
\b # バックスペース
\f # フォームフィード
\x〇〇 # 16進値
\u〇〇〇 # 16ビットユニコード文字
\U〇〇〇 # 32ビットユニコード文字
●リスト(配列)
一次元リスト
x = ['Hello', 'World', 9]
print(x)
['Hello', 'World', 9]
C = [1,2,3]
print(C[1])
2 #
配列は C[0]、C[1]、、のように生成される。
二次元リスト
ar = [
[0,2,3],
[10,11,12],
['aA','bB','cC']
]
print(ar[2][0])
空のリストに要素を追加する方法
ar = [] # 空のリストarを生成
ar.append(3) # arに要素を1ケ追加
ar.append(5)
ar.append('A')
print(ar)
リストの名称を自動生成
for i in range(5):
ar = 'C' + str(i)
globals()[ar] = 123
print([C0]) # [123]
空の二次元リストを生成
# 空の2次元配列を二重のfor文 [[x] y] で作る
ar = [['' for x in range(4)] for y in range(9)]
ar[8][0] = '13.458'
print(ar)
# 結果
[['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['13.458', '', '', '']]
すべて0の二次元リストを作る
ar = [[0 for x in range(4)] for y in range(9)]
●タプル(変更不可なリスト)
sk = ('shinji', 'kawasaki', 80)
print(sk)
●辞書機能
english_words = {"apple": "りんご", "orange": "みかん", "peach": "もも"}
のように登録すると
print(english_words["apple"])
で
りんご
が得られる。
●演算
算術演算子
+a # 正数
-a # 負数
a + b # 加算
a - b # 減算
a * b # 乗算
a / b # 除算
a % b # a を b で割った余り
a ** b # a の b 乗
a // b # 切り捨て除算
ビット演算子
~a # ビット反転
a & b # AND:論理積(aもbも1のビットが1)
a | b # OR:論理和(aまたはbが1のビットが1)
a ^ b # XOR:排他的論理和(aまたはbが1のビットが1)
a << b # b ビット左シフト
a >> b # b ビット右シフト
代入演算子
a = b # a に b を代入する
a += b # a = a + b に同じ
a -= b # a = a - b に同じ
a *= b # a = a * b に同じ
a /= b # a = a / b に同じ
a %= b # a = a % b に同じ
a **= b # a = a ** b に同じ
a //= b # a = a // b に同じ
a &= b # a = a & b に同じ
a |= b # a = a | b に同じ
a ^= b # a = a ^ b に同じ
a <<= b # a = a << b に同じ
a >>= b # a = 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 と異なる
a in b # a が b に含まれる (a, b は共に文字列/b
はリストやタプル)
a not in b # a が b に含まれない (a, b は共に文字列/b はリストやタプル)
ブール演算子
a and b # a も b も真であれば真
a or b # a または b が真であれば真
not a # a が偽であれば真
文字列演算
str1 + str2 # 文字列 str1 と 文字列 str2 を連結
str * 5 # 文字列 str を 5回繰り返す
str[n] # 文字列 str の中の n 番目の文字を取り出し
syr[n:m] # 文字列 str の中の n 番目から m 番目までの文字列を取り出し
str[n:] # 文字列 str の中の n 番目から最後までの文字列を取り出し
str[:m] # 文字列 str の中の 0 番目から m 番目までの文字列を取り出し
str[n:m:s] # 文字列 str の中の n 番目から m 番目までの文字列を s個とばしで取り出し
分岐
●if [elif] [else] 文
if 条件式1: # もし〜だったら
条件式1が真の時に実行する文
...
elif 条件式2: #
で無く〜だったら
条件式1が偽で条件式2が真の時に実行する文
...
elif 条件式3: #
で無く〜だったら
条件式1及び条件式2が偽で条件式3が真の時に実行する文
...
else: #
で無かったら
すべての条件式が偽のときに実行する文
...
x = 'A'
y = 3
if(x == y):
print("Yes")
else:
print("No")
実行結果は
No
●while [ else] 文
n = 0
while n < 10: # 条件が成立する間は
print(n) # 実行
n += 1 #
実行
else: #
条件が成立しない間は
print('END') #
実行
実行結果は
0
1
2
3
4
5
6
7
8
9
END
●for in 文ループ
# の間
for n in [1, 2, 3]: # 配列
print(n) #
1, 2, 3
for n in (1, 2, 3): # タプル
print(n) #
1, 2, 3
for c in "ABC": # 文字列
print(c) #
A, B, C
for k in {'one': 1, 'two': 2, 'three': 3}: # 辞書
print(k) #
one, two, three
for line in open("sample.txt"): # ファイルの中身
print(line)
for文の中で使う range() 関数
for num in range(5):
print(num) # 0から5の手前の4
までがプリントされる
for num in range(5,10):
print(num) # 5から10の手前の9までがプリントされる。
for num in range(0,10,3): # (初期値,未満,増加量)
print(num #
0,3,6,9 がプリントされる。
★小数点を使う for文
range関数は整数しか使えないため小数点以下のfor文は以下のような関数を使います。
リストを追加するappendメソッドを使ってます。
def frange(start, end, step):
dat = [start]
n = start
while n + step < end:
n = n + step
dat.append(n)
return dat
for i in frange(0.0, 1.0, 0.05):
print(format(i, '.2f'))
実行結果は
0.00
0.05
0.10
0.15
0.20
、、、、、
0.85
0.90
0.95
● break ループを抜ける
num = 0 #例
while True:
print("num = " + str(num))
num += 1
if num >= 2:
break
print("End")
深いネスティングのループから抜け出すには、フラグを利用する方法があります。
bflag = False # フラグリセット
for ,,,,,, : # ループA
for ,,,,,,, : # ループB
if ,,,,,, : #
ループB抜け出し条件okなら
bflag
= True #
フラグを立てて
break #
ループB抜け出し
if bflag: #
フラグが立っていたら
break
# ループA抜け出し
c言語ではループ出口の } が見えますが、Pythonでは見えないので、上例のように注意して対応するループ出口のインデント位置にフラグ検出の
if を入れてbreakします。
★入力値が範囲内になるまで入力を繰り返す
while True: # if 条件 then break で抜けるまで繰り返すループ
tmp = int(input("値は "))
if 10 <= tmp <= 20:
C[i] = tmp
break #
範囲内
else:
print("範囲外です ")
★入力データが数値か否か調べる
Q = input("OK:y 修正:番号 ")
if Q.isdigit(): # 数値なら 検査変数.isdigit() は
true
print("修正する番号は ")
else:
print("計算します")
●関数を定義する
def add(x, y):
ans = x + y
return ans
n = add(3, 5)
print(n)
注)Pythonはインタプリタ言語ですから、その関数が実行される以前に定義されている必要があるため、def文は通常プログラムの頭に書いておきます。
●キーワード引数
def repeat_msg(msg, repeat=3):
for i in range(repeat):
print(msg)
repeat_msg('Hello') # Hello, Hello, Hello
repeat_msg('Yahho', repeat=5) # Yahho, Yahho, Yahho,
Yahho, Yahho
引数に * を指定すると、* より後ろの引数はキーワード専用引数とみなされる
def func(a, b, *, c):
print("a=%s, b=%s, c=%s" % (a, b, c))
func("A", "B", c="C") # a=A, b=B, c=C
func("A", "B", "C")
●グローバル変数とローカル変数
関数外で定義した変数をグローバル変数、関数内で定義した変数をローカル変数と呼びます。
関数内からグローバル変数を参照することはできますが、関数外からローカル変数を参照することはできません
●ラムダ式
c言語のマクロに似ているのがラムダ式です。簡単な関数のように使うことができます。
myfunc = lambda x, y: x + y
print(myfunc(3, 5))
●set() で集合を作る
集合を作る
set([1,2,3,4,5])
set({'dog':'inu', 'cat':'neko', 'bird':'tori'})
要素数を得る
s = set([1,2,3])
len(s)
要素の追加、クリヤ
s = set() # 空のセットを生成(set([]))
s.add(1) # set([1])
s.add(2) # set([1, 2])
s.add(3) # set([1, 2, 3])
s.remove(2) # set([1, 3])
s.clear()
論理演算
s1 = set([10, 20, 30, 40, 50])
s2 = set([10, 30, 50, 70, 90])
s3 = set([10, 20, 30])
s1 | s2 # 和集合を求める set([10, 20, 30, 40, 50, 70,
90])
s1 & s2 # 積集合を求める set([10, 30, 50])
s1 - s2 # 差集合を求める set([20, 40])
s3.issubset(s1) #部分集合であればTrueを返す、またはfalse
s.discard(1) # 集合sから要素 1 を削除
s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}
差集合
print(s1 - s2)
# {0}
print(s1.difference(s2))
# {0}
print(s1.difference(s2, s3))
# {0}
対称差集合(一方にだけ含まれる要素)
s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}
print(s1 ^ s2) # ^演算子
# {0, 3}
print(s1.symmetric_difference(s2))
# {0, 3}
累算代入は^=演算子およびsymmetric_difference_update()メソッド。
部分集合 <=演算子, issubset()
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s1 <= s2)
# True
print(s1.issubset(s2))
# True
上位集合か判定: >=演算子, issuperset()
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s2 >= s1)
# True
print(s2.issuperset(s1))
# True
isdisjoint() 共通のない素集合判定
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}
print(s1.isdisjoint(s2))
# False
print(s1.isdisjoint(s3))
# True
●クラス
プログラミングの対象が「人」の場合、「名前」「身長」「体重」などの属性と、人の行為「走る」「止まる」などの方法(メソッド)を組み合わせることで「人」を多面的に扱うことができる。
class ObjName:
def __init__(self, 属性1, 属性2, ...): # 初期化関数の定義
self.属性1 = 属性1 #変数1
self.属性1 = 属性1 #変数2
def メソッド1(self, ...): #
メソッド1の処理内容
def メソッド2(self, ...): #
メソッド2の処理内容
★クラスを使用する例
class Man:
def __init__(self,name,height,weight):
self.name = name
self.height = height
self.weight = weight
def run(self,):
print("は走ります")
def stop(self,):
print("は止まります")
#
tanaka = Man("田中",170,50)
suzuki = Man("鈴木",165,62)
#
print(tanaka.name)
print("体重",tanaka.weight,"kg")
print("身長",tanaka.height,"cm")
tanaka.run()
print(suzuki.name)
print("体重",suzuki.weight,"kg")
print("身長",suzuki.height,"cm")
suzuki.stop()
結果)
田中
体重 50 kg
身長 170 cm
は走ります
鈴木
体重 62 kg
身長 165 cm
は止まります
●ファイル操作
新規ファイル書き込み
import os
# 別モジュール os の読み込み
os.chdir("d:/temp") #ディレクトリをd:\tempに変更
f = "t.txt" #ファイル名をfに代入
fb = open(f, "w", encoding = "utf_8") #書き込みファイルfをfbとしてオープン
fb.write("こんにちは\n") #
fbに1行書込み
fb.write("今日は台風です") #
fbに1行書込み
fb.close() #
fbクローズ
ファイル読み取り
import os
os.chdir("d:/temp")
f = open("t.txt", "r",encoding = "utf_8")
for line in f:
print(line)
f.close()
ファイルの削除
import os
os.chdir("d:/temp")
os.remove("t.txt")
バイナリファイル
書込み
import os
os.chdir("d:/pyt")
with open('test.bin','wb') as f: #バイナリ書き込み: wb
s = "\x01\x02\x03"
b = s.encode()
f.write(b)
f.close()
読み込み
import os
os.chdir("d:/pyt")
with open('test.bin', 'rb') as f: #バイナリ読み込み: wb
b = f.read()
s = b.decode()
print(s)
f.close()
●tkinker グラフィックインターフェース
ウィンドウ
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
##ウィンドウの表示
root.mainloop()
これでroot ができるので以降は root=TK() から内容を定義する
ラベル
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
label = ttk.Label(root,text ='Hello Python!')
label.pack()
入力BOX
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
#オブジェクトの定義
label = ttk.Label(root,text ='Hello Python!')
entry = ttk.Entry(root)
#レイアウト
label.pack()
entry.pack()
#ウィンドウの表示
root.mainloop()
OKボタン
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
#オブジェクトの定義
label = ttk.Label(root,text ='Hello Python!')
entry = ttk.Entry(root)
button = ttk.Button(root,text = 'OK')
#レイアウト
label.pack()
entry.pack()
button.pack()
#ウィンドウの表示
root.mainloop()
コンボボックス
from tkinter import *
import tkinter as tk
import tkinter.messagebox as mb
import tkinter.ttk as ttk
#1---windowの作成
root = Tk()
root.title("Test")
root.configure(bg="#fffbdb")
root.geometry('640x480')
#2---プルダウン作成
option = [".bat", ".csv", ".xlsx", ".txt"]
variable = tk.StringVar()
combo=ttk.Combobox(root,values=option,textvariable=variable)
combo.bind("<<ComboboxSelected>>")
combo.pack()
root.mainloop()
テキストボックス
import tkinter as tk
# メインウィンドウを作成
baseGround = tk.Tk()
# ウィンドウのサイズを設定
baseGround.geometry('500x300')
# 画面タイトル
baseGround.title('テキストボックスの値を取得する')
# ラベル
label1 = tk.Label(text='テキストボックス1')
label1.place(x=30, y=40)
label2 = tk.Label(text='テキストボックス2')
label2.place(x=30, y=90)
# テキストボックス
textBox1 = tk.Entry(width=40)
textBox1.place(x=30, y=60)
textBox2 = tk.Entry()
textBox2.place(x=30, y=120)
def val():
# テキストボックスの値を取得
print(textBox1.get())
print(textBox2.get())
# ボタンの作成と配置
button = tk.Button(baseGround,
text
= 'OK',
#
クリック時にval()関数を呼ぶ
command
= val
).place(x=30,
y=180)
baseGround.mainloop()
チェックボックス
import tkinter
# Tkクラス生成
tki = tkinter.Tk()
# 画面サイズ
tki.geometry('300x200')
# 画面タイトル
tki.title('チェックボタン')
# チェックボタンのラベルをリスト化する
chk_txt = ['Pythonを使用する','Javaを使用する','C#を使用する']
# チェックボックスON/OFFの状態
chk_bln = {}
# チェックボタンを動的に作成して配置
for i in range(len(chk_txt)):
chk_bln[i] = tkinter.BooleanVar()
chk = tkinter.Checkbutton(tki, variable=chk_bln[i],
text=chk_txt[i])
chk.place(x=50, y=30 + (i * 24))
# ボタンクリックイベント(チェック有無をセット)
def btn_click(bln):
for i in range(len(chk_bln)):
chk_bln[i].set(bln)
# ボタン作成
btn = tkinter.Button(tki, text='ONにする', command=lambda:btn_click(True))
btn.place(x=80, y=170)
btn = tkinter.Button(tki, text='OFFにする', command=lambda:btn_click(False))
btn.place(x=150, y=170)
複数ボタンの配置とクリックイベント
import tkinter
from functools import partial
tk_root = tkinter.Tk()
frame_main = tkinter.Frame(tk_root)
frame_main.grid()
def on_click(num):
print("クリック %d" % num)
for i in range(9):
button = tkinter.Button(frame_main, text=i, command=partial(on_click,
i))
button.grid(row=0, column=i)
tk_root.mainloop()