pythonことはじめ
python事始め
Chapter1 予備知識
- pythonはインタプリタ方式の高水準言語でありオブジェクト指向のスクリプト言語
- オブジェクト指向:オブジェクト同士の相互作用として、システムの振る舞いを捉える考え方。
- editorはPyCharmを使用した
Chapter2 基礎
- ステートメント:プログラムにおけるそれぞれの命令のこと
- str(数値):数値を文字列に変換して戻す
- float(数値を表す文字列):文字列を数値にして戻す
- input([プロンプト]):ユーザーが入力した文字列を戻す
- プロンプト:主にキーボードから文字で命令を入力して操作を行うシステムにおいて、システムが命令入力を受け付けられる状態にあることを示すために表示される文字や記号の並び。
- pythonの数値型は整数型(int),小数点型(float)に分けられる。
- リテラル:プログラム内に記述した値そのもの
- list = [ , , , , ] indexで指定、取り出し、変更可能、len()要素数
- tuple = ( , , , , ) indexで指定、取り出し可能、変更不可(イミュータブル)
モジュールの使用
from モジュール名 import クラス名1, クラス名2,.... #コンストラクタを使用してクラスのインスタンスを作成 変数 = クラス名() #インスタンスにメソッドを実行 さっきの変数.メソッド名(引数1, 引数2,..)
乱数の使用(randomモジュール)
import random randint(a,b);a以上b以下のランダムな整数を戻す randrange(a):a未満のランダムな整数を戻す
Chapter3 処理の変更、繰り返し
if文—分岐条件を細かく指定可能
if 条件式A: 処理... elif 条件式B:(条件式Aが成立しなかった場合の) 処理... else:(それ以外の場合) 処理...
値1 if 条件式 else 値2
ループについて
for 変数 in イテレート可能なオブジェクト: 処理1 処理2 . . #以下ループが完了した場合の処理(breakは終了であり以下の処理は行われない) else: 処理(ループが完了した場合に実行される)
- rangeオブジェクトでカウントアップダウン
range([開始,] 終了[, ステップ])---開始から終了までをカウントするrangeオブジェクトを戻す。
例えば・・・整数の総和を求める
end = int(input("数字を入力してください: ")) num = list(range(1, end + 1)) print(sum(num))
whileループ
while 条件: 処理1 処理2 . .
forループ、whileループでは、break文(ループの中断)、continue文(ループの先頭に戻る)を用いることが可能。
- enumerate(イテレート可能なオブジェクト)–インデックスと要素のペアをタプルにして順に戻す。だから変数を二つ用意する。
- zip(リスト1, リスト2, …)–複数のリストをイテレートして、要素をまとめてタプルとして戻す。指定したリストの数だけ変数を用意。
例外の処理
try: 例外が発生する可能性がある処理 except 例外: 例外が発生した場合の処理 . . else: 例外が発生しなかっ場合の処理
Chapter4 組み込み型
インスタンス.メソッド
文字列に対してメソッドを実行するには、strクラスのメソッドを使う。(基礎python.p159表)
文字列[開始位置:終了位置+1]
find(),format()メソッド(p162-3)
{引数の番号:.桁f}
{引数の番号:,}
リストやタプルの基本操作
split(区切り文字)、index()、append()、remove()、revese()メソッド(p169-74)
{キー1:値1, キー2:値2,...}
key(),value(),items()メソッド(イテレート可能)はP183-4 国名リスト—>国名:国名の数を実行
countries = [,,,,,,,] #空の辞書を用意 results = {} #さっきの辞書に国と得票数を格納 for country in countries: if country in results: results[country] += 1 else: results[country] = 1 #結果の表示 for country, num in results.items(): print("{}:{}".format(country.num)) #結果をソートして表示 for country in sorted(results.item(), key=lambda c:c[1], reverse=True): print("{}: {}".format(country[0], country[1]))
要素の重複を許さないデータ型に「集合」があり、setクラスのインスタンスである。 {要素1,要素2,..}という型にすれば重複がないようにセットされる。イテレート可能であり、add(),remove(),clear()メソッドで編集(p188)できる。
リスト---[式 for 変数 in イテレート可能なオブジェクト] 条件を満たす要素を抽出---[式 for 変数 in イテレート可能なオブジェクト if 条件式] 辞書---{キー:値 for 変数 in イテレート可能なオブジェクト} 集合---{式 for 変数 in イテレート可能なオブジェクト}
Chapter5 オリジナルな関数
関数定義と関数呼び出し
def 関数名(引数名1,引数名2,..):-----仮引数 処理 . . return 戻り値 #引数にリテラルor変数を指定 変数 = 関数名(引数1,引数2,..)----実引数、キーワード引数でも可
変数の有効範囲により、グローバルスコープ(関数の内外関係なくアクセス可)とローカルスコープ(関数内部飲みアクセス可)に大別される。
可長変引数
可変長引数とは、任意の数の引数を受け取れる関数.引数名の前に*をつければ可変長引数として指定される。例えば、任意の数の値の平均を戻す関数を示す。
def average(*num): sum = 0 for n in num: sum += n return sum/len(num) print(average(2,8,10))
仮引数名の前に**を記述すると関数呼び出し時にキーワード指定された任意の数の引数を辞書として受け取れる。
def func(**dic): print(dic) func(name = "田中", num = 1) >{'name': '田中', 'num': 1}---辞書になる!
lanbda式で無名関数を定義する
- 小規模な関数を手軽に定義するための書式
lambda 引数1, 引数2, ...:処理
関数の活用
- map関数
def to_cm(inch): return inch * 2.54 inches = [2, 5.5, 6, 4, 6.5] cms = list(map(to_cm, inches)) ------map(関数, リスト) print(cms)
無名関数、リストの内包表現などを使用して短くして書き直すことができる。
- filter関数(p228)
- sort(),sorted()関数はキーワード引数keyを使用して、ソートの順番を変更できる。(p229-30)
- ジェネレーター関数やジェネレーター式を使用すると、イテレート可能なオブジェクトを簡単に定義できる。(p236-242)
Chapter6 テキストファイルの読み書き
テキストファイルを読み込む
1.ファイルを開く open(ファイル,モード,エンコーディング)—->引数で指定したファイルを開きファイルをオブジェクトとして戻す
- ファイルから読み込むにはモードを “r"にしてファイルを開く
- ファイルに書き込むにはモードを"w"にしてファイルを開く
- ファイルに追記するにはモードを"a"にしてファイルを開く
2.テキストファイルを読み込む
- read([サイズ])—–>ファイルから指定サイズのデータを読み込み、文字列として返す。
- readlines([サイズ])>ファイルから全ての行を読み込みリストとして戻す。
- readline()——–>ファイルから1行ずつ読み込み文字列として戻す。
- for文でファイルオブジェクトを直接イテレートして1行ずつ読み込むことができる。
3.ファイルを閉じる
- ファイルを使い終わったら、close()メソッドでファイルを閉じる。
- ファイルを開く時点でwith文を用いると、ブロックを抜けた段階でファイルが自動的に閉じられる。
with open(ファイル,モード,エンコーディング) as ファイルオブジェクト: ファイルの操作
テキストファイルに書き込む
読み込む時の、2にあたるところを以下のメソッドに変える
- write(文字列)——>引数で指定した文字列をファイルに書き込む
- writelines(文字列)->引数で指定したリストの要素をテキストファイルに書き込む
ファイルが存在しているかどうかを調べるにはosモジュールのpath.exist()メソッドを使用(p261)
Chapter7 オリジナルのクラスを作成する
クラス作成の基本
- オリジナルのクラスはclass文で定義できる。
class クラス名: def メソッド1: メソッド1のブロック def メソッド2: メソッド2のブロック . .
class クラス名: def __init__(self, 引数2, 引数3,..): 初期化メソッドのブロック
#クラスの生成(ここで、number, name, heightはインスタンス変数) class Costomer: def __init__(self, number, name, height): self.number = number self.name = name self.height = height #インスタンスを生成 taro = Costomer(101, "佐藤太郎", 180) print("{}: {} {}".format(taro.number, taro.name, taro.height)) #heightを変更 taro.height = 170 print("{}: {} {}".format(taro.number, taro.name, taro.height)) #実行結果 101: 佐藤太郎 180 101: 佐藤太郎 170
この場合、deの前にbmi = 22を追加すれば、インスタンス全てのbmiが22で共通になる。(p.276)また、インスタンス生成後にCostomer.bmi = 23を書き込めば、インスタンス全てのbmiが23に変更される。
クラスの活用
- クラスを定義しインスタンスを生成した後でも、変数やメソッドを追加できる。
- クラス変数を定数として追加するときは大文字が好ましい。ex)Costomer.LIMIT
- 変数やメソッドの名前の前に「__」をつけると外部からアクセス[できない]ようにできる。これをカプセル化という。カプセル化した変数に外部からアクセスするにはゲッターメソッド/セッターメソッドを用意する。(p.283)
- 外部からアクセスして[欲しくない]変数やメソッドは、名前の前に「_」をつける。
- property()関数でプロパティを使用すると、アクセッサメソッドを変数のように扱える。P.286
- オリジナルな関数やクラスをモジュールとして保存でき、モジュール名はファイル名から.pyを取り除いた名前になる。当然、モジュール名.クラス名(–)の形式でクラスを利用できる。また、from–import文の使用もできる。(p.288-291)
クラスを継承する
class サブクラス名(スーパークラス名): クラス本体
- 組み込み型を継承することで機能を拡張できる