• 検索結果がありません。

PowerPoint プレゼンテーション

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint プレゼンテーション"

Copied!
45
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

Agenda

• 諸注意

• Pythonの心得

• エラー処理

(3)
(4)

諸注意

• 提出前に必ず実行してください!

エラーがある場合はコメントアウト等,実行されないように

• 関数名指定にも関わらず,自分で関数名を決めている

どの問題なのか分からなくなるので,決められた名前を使ってくださ

• 関数をクォーテーションで囲んでいる

定義しただけでは実行されないので,クォーテーションで囲む意味は

ありません.労力の無駄です.

(5)

諸注意

• データの入力にinputやraw_inputを用いている

採点の際に非常に面倒なので,使うのをやめるか,コメントアウトし

てください

色々なパターンを試したいならば,テストケースを最初からプログラ

#1 def function(n): ... n = raw_input(‘n: ’) print function(n) #1 def function(n): ... # n = raw_input(‘n: ’) print function(5) print function(10)

(6)

諸注意

• 関数は,中に必ず何かしら記述してください

中に何も記述がないと,エラーが発生します

解けない or 分からない場合は,関数自体を消すか,上記のように何

かを書いてください

#1 def function(): #2 ... #1 def function(): return #2 ... #1 def function(): pass #2 ...

(7)

諸注意

• 「○○を返す関数を作成せよ」→関数内にprintを使っている

「○○を表示する関数」であればprintで構いませんが,

基本的に関数の中はreturn文を用いる

例:与えられた数の2倍を返す関数

#1 def double(n): print 2*n #1 def double(n): return 2*n

(8)

諸注意

• どんな条件にも(理不尽なものは除く)対応できる解答をして

ください

例にあるものだけをクリアする解答は不正解です

4/27 No. 3「n の m 乗を返す関数 root」

例 → root(2, 2)とroot(100, 3)

mが2と3の時しか対応していない解答

5/11 No. 5「行列の掛け算を行う関数 matrix_product」

例 → 3×2の行列と2×2の行列の掛け算

それ以外の行列同士の掛け算に未対応

(9)
(10)

心得

• 組み込み関数を変数として用いない

sumやlistなどの予約語は変数に使わない

(IDLEで入力した時に色が変わる言葉)

使ってしまうと,sum関数やlist関数が使えなくなってしまいます

l = [1,2,3,4] sum = 0 for i in l: sum += i print sum print sum(l)

エラー

(11)

心得

• 真偽値を活用する

小テストで「判定せよ」はTrueかFalseを返す

真偽値(True, False)は,特殊なキーワード

文字列ではなくTrue, Falseそれ自身を使うクセをつける

def func(): ... return ‘True’ def func(): ... return True

(12)

心得

• PEP8にしたがってプログラムを記述する

PEP8とはPythonを記述する上での,守るべきルール

https://www.python.org/dev/peps/pep-0008/

>>>import pep8 >>>check = pep8.Checker(ファイル名) >>>check.check_all() ... 何行目にどのようなルール違反があるか教えてくれる

(13)

心得

• PEP8にあるルールの例

カンマの後ろは必ず半角スペース

変数名はすべて小文字とアンダーバー

クラス名とエラー名のみ大文字を使う

l = [1, 2, 3, 4] sum_of_num = 0 class MyClass: ...

(14)

エラー処理

(15)

エラー処理

よくあるエラー

• AttributeError

• ImportError

• IndexError

• KeyError

• NameError

• RuntimeError

• SyntaxError

• IndentationError

• TypeError

• ValueError

• UnboundLocalError

• ZeroDivisionError

(16)

エラー処理

• 人に聞く前に,「どういうエラーなのか」,「おかしい場所は

どこか」を理解する

エラーが発生した直前にどのような処理をしたのかが書いてある

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module> print 6 + '7'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

何行目で発生したのか

(17)

AttributeError

• 属性の参照や代入のエラー(属性→クラスのスライドを参照)

変数i(整数型)はsquareという属性を持っていない

>>>i = 0

>>>i.square

Traceback (most recent call last):

File "<pyshell#20>", line 1, in <module> i.square

(18)

ImportError

• モジュールがインポートできなかったときのエラー

numpiというモジュールは存在しない

>>>import numpi

Traceback (most recent call last):

File "<pyshell#21>", line 1, in <module> import numpi

(19)

IndexError

• 配列のインデックスに関するエラー

リストlの長さを超えて,printしようとしている

>>>l = [1,2,3] >>>for i in range(5): print l[i], 1 2 3

Traceback (most recent call last):

File "<pyshell#25>", line 2, in <module> print l[i],

(20)

KeyError

• 存在しないキーを指定してしまったエラー

辞書dは2というキーを持っていない

>>>d = {0: 0, 1: 1} >>>d[2]

Traceback (most recent call last):

File "<pyshell#33>", line 1, in <module> d[2]

(21)

NameError

• 名前が見つからなかったときのエラー

zという変数は存在しない(定義されていない)

>>>z

Traceback (most recent call last):

File "<pyshell#34>", line 1, in <module> z

(22)

RuntimeError

• 主に無限ループが発生した時に出るエラー

無限ループは非常に厄介なので,細心の注意を払ってください

>>>def a(): return a() >>>a()

Traceback (most recent call last): File "<pyshell#41>", line 2, in a

return a()

(23)

SyntaxError

• 構文エラー

for文の終わりにコロンがない

Pythonの文法が間違っている,一番しょうもないエラー

>>>for i in range(5)

(24)

IndentationError

• 正しくないインデントに関するエラー

for文の中身のインデントが下げられていない

>>>for i in range(5): print i

File "<pyshell#45>", line 2 print i

^

(25)

TypeError

• 正しくない型に対して演算等の処理が行われたときのエラー

整数型(int)と文字列型(str)は足し算できない

>>>6 + ‘7’

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module> print 6 + '7'

(26)

TypeError

• 正しくない型に対して演算等の処理が行われたときのエラー

リスト(list)は辞書のキーとして使えない

>>> d = {(0, 1): 100, [2, 3]: 200}

Traceback (most recent call last):

File "<pyshell#47>", line 1, in <module> d = {(0, 1): 100, [2, 3]: 200}

(27)

ValueError

• 型は正しいが,適切じゃない値の処理が行われたときのエラー

int関数は文字列を引数にとれるが,‘ten’は処理できない

( int(‘10’)は可能 )

>>>int(‘ten’)

Traceback (most recent call last):

File "<pyshell#56>", line 1, in <module> int('ten')

(28)

UnboundLocalError

• 変数が定義される前に使用してしまっている時などのエラー

関数func内で,変数cが定義される前にcを使用している

>>>def func(): a = 2*c c = 100 return a >>>func()

Traceback (most recent call last):

File "<pyshell#62>", line 1, in <module> func()

File "<pyshell#61>", line 2, in func a = 2*c

(29)

ZeroDivisionError

• 除法やモジュロ演算の第2引数が0のときのエラー

100を0で割ってしまっている

>>>100 / 0

Traceback (most recent call last):

File "<pyshell#63>", line 1, in <module> 100 / 0

(30)

クラス

(31)

クラス

• 大量のデータを扱う...

• たくさんの変数や関数を扱う...

• 自分だけでなく,人が使うプログラムを書く...

クラスを使うことで,理解しやすいプログラムになる

(意味がわかりやすくなる)

(32)

クラス

2人の男の子がいる

名前:Tomoki 年齢:16 国籍:JAPAN 身長:173 体重:63 テストの点数 数学:70 理科:70 英語:80 名前:Yusuke 年齢:17 国籍:CANADA 身長:168 体重:70 テストの点数 数学:50 理科:70 英語:100

(33)

クラス

• 基本的な書き方

Studentクラスが作れた

クラス名は,単語の先頭を大文字で書くのが一般的

• どのように使うか

変数s1がStudentクラスのインスタンス(instance;直訳:実例)に

なる

class Student: pass s1 = Student()

(34)

クラス ーメソッド

• メソッドを定義する

クラスの中に定義した関数を メソッド(method) と呼ぶ

メソッドの第1引数は

self

(コンストラクタと同じ)

「インスタンス自身を引数に入れる」という意味

Name属性に指定した名前が代入される

class Student:

def set_name(self, name): self.name = name

def print_name(self):

print ‘Name: ’+self.name

self.(変数名)で表されたものを 属性あるいはインスタンス変数と呼ぶ

(35)

クラス ーメソッド

>>>s1 = Student() >>>s1.name

Traceback (most recent call last):

File "<pyshell#16>", line 1, in <module> s1.name

AttributeError: student instance has no attribute 'name'

>>>s1.set_name(‘Tomoki’) >>>s1.name ‘Tomoki’ >>>s1.print_name() ‘Name: Tomoki’ 最初はname属性は定義されてないのでエラー set_nameメソッドでname属性に名前 を入れたので,エラーは出ない

(36)

クラス ーメソッド

• テスト結果を入れる関数,平均を求める関数を作ってみる

class Student: ...

def test(self, result): self.math = result[0]

self.science = result[1] self.english = result[2] def average(self):

(37)

クラス ーメソッド

クラスの外にaverage関数を作るのと比べると,メソッドの中に引数

が必要ないので楽

>>>s1.test([70,70,80]) >>>s1.math 70 >>>s1.english 80 >>>s1.average() 73.33333333333333

(38)

クラス ーコンストラクタ

• 初期値を与える

__init__

関数(コンストラクタ)を定義することで,このクラスを

作るときに

必ず

最初に行う処理を決めることができる

上の例では,Studentクラスを作るときに

必ず

name引数が必要

class Student:

def __init__(self,name): self.name = name

>>>s1 = Student(‘Tomoki’) >>>s1.name

(39)

クラス ーコンストラクタ

• その他の情報も付け加えると...

名前,年齢,国籍,身長,体重を最初に入れないとインスタンスが作

れない

class Student:

def __init__(self,name,age,nation,height,weight): self.name = name

self.age = age

self.nationality = nation self.height = height

(40)

クラス ーコンストラクタ

• 実際に使ってみると

>>>s1 = Student(‘Tomoki',16,‘JAPAN',173,63) >>>s1.age 16 >>>s1.nationality ‘JAPAN’ >>>s1.height 173 >>>s1.weight 63

(41)

クラス ーメソッド

• ちょっと遊んでみる

class Student: ...

def diet(self):

from random import randrange

degree = randrange(-0.2, 0.2, _int=float) self.weight += degree * self.weight

-20%~20%の間で ランダムに体重が増減

(42)

クラス ーメソッド

• ちょっと遊んでみる

>>>s2 = Student(‘Yusuke',17,‘CANADA',168,70) >>>s2.weight 70 >>>s2.diet() >>>s2.weight 79.6518923362

約13%の体重増

(43)

クラス ー特殊メソッド

• コンストラクタの他にも,

特殊メソッド

がたくさん

インスタンスをprintしたときにどう表示されるかを変更

class Student: ... def __str__(self):

return 'Name: {}¥nAge: {}'.format(self.name,self.age)

>>>print s1 Name: Tomoki Age: 16

(44)

クラス ー特殊メソッド

• 自分用の MyList クラスを作ってみる

リストを足し算したら,要素同士の足し算ができるようにしたい

class MyList: def __init__(self,l): self.list = l

def __add__(self,other): new_list = []

for i,j in zip(self.list, other.list): new_list.append(i+j)

return new_list

特殊メソッド__add__を使うと,

(45)

クラス ー特殊メソッド

>>>l1 = [1,2,3] >>>l2 = [4,5,6] >>>l1 + l2 [1, 2, 3, 4, 5, 6] >>>l1 = MyList(l1) >>>l2 = MyList(l2) >>>l1 + l2 [5, 7, 9] リストの足し算は普通, 連結するだけ 要素の足し算に成功!

参照

関連したドキュメント

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

また、JR東日本パス (本券) を駅の指定席券売機に

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

極大な をすべて に替えることで C-Tutte

点から見たときに、 債務者に、 複数債権者の有する債権額を考慮することなく弁済することを可能にしているものとしては、

最愛の隣人・中国と、相互理解を深める友愛のこころ

・蹴り糸の高さを 40cm 以上に設定する ことで、ウリ坊 ※ やタヌキ等の中型動物

③  訓練に関する措置、④  必要な資機材を備え付けること、⑤