|
第9章 メソッド 触目 ひとりで生き、この世を観 この世の雨の音をきき そしてまた死んで行ったとしても 何者をこの世に残さなかったとしても それだけで沢山ではないか その片鱗をかがやかせただけで 蝶はわが眼から失われて行ったではないか 百田宗治 (1)メソッドの作り方 モジュールプログラム:自分で作成したプログラムをモジュールに入れてパッケージ化 する。 サブルーチン:プローシージャー、関数として存在する。 メソッドmethod:関数のようなもの 名前.名前(引数....)の形:呼び出し可能な属性 def メソッド名(): メソッド
>>> メソッド名 def hello() :
print 'hello python' メソッド本体 メソッドを呼び出す >>> hello()
hello python def hyouka(t):
メソッドの名前 if t>=1 and t<=50 :
メソッドの内容 print 'low'
elif t>50 and t<=75: print 'middle' else: print 'high' メソッドの呼び出
hyouka(76.9)
応え
high'
同じコードの繰り返す例:
次のコードを読んでください。 print '今日は、私の実験のためにお時間をとって、' print 'いただき、ありがとうございます。この実験は、' print '人々が日本料理に対してどう感じているか' print 'に関するものです。日本料理について考え' print 'すべての質問に対して、yesかnoかで正直に' print '答えてください。この実験は簿記学とは関係' print 'ありません。' # いくつかの質問をしますが、答えは無視してしまいます。 good_answer = False 繰り返し部分 while(not good_answer) : print '天ぷらは好きですか?' answer = raw_input('>') if answer == ('yes' or answer == 'no') : good_answer = True else : print ' "yes" か "no"でお答えください。 ' good_answer = False while (not good_answer) : 繰り返し部分 print 'フグ料理は好きですか?'
answer = raw_input('>') if answer == ('yes' or answer == 'no') : good_answer = True else : print ' " yes" か"no" でお答えください。' #この回答には注目します
good_answer = False 繰り返し部分 while (not good_answer)
print '簿記の勉強は好きですか?' answer = raw_input('>') if answer == ('yes' or answer == 'no') : good_answer = True else : print ' " yes か no でお答えください。" good_answer = False 繰り返し部分 while (not good_answer)
print '焼き肉料理は好きですか?' answer = raw_input('>') if answer == ('yes' or answer == 'no') : good_answer = True else : print ' " yes "か "no" でお答えください。' print 'あともう少し質問させてください' good_answer = False 繰り返し部分 while (not good_answer)
print 'そば料理は好きですか?' answer = raw_input('>') if answer == ('yes' or answer == 'no') : good_answer = True else : print ' " yes "か" no "でお答えください。' # 日本料理に関しては他にもたくさんの質問をします。 print 'デブリーフィング:' #実験後、被験者にその目的や理由を明かすこと print 'この実験へのご協力を感謝します。実は、この実' print '験は日本料理とは何の関係もありません' print'この実験は簿記学への関心に関する実験だっ' print'日本料理は、より正直に答えら' print'られるよう、あなたのガードをはづすために聞いた' print'に過ぎません。本当にありがとうございました。' print book_keeping (クリス・はじめてのプログラミング) (2)上記のコードを修正するための知識 まづ簡単な例の学習 (a)自前のメソッド を作る。「モー」となくメソッドです。 >>> def say_moo(): print 'モー' >>> say_moo();say_moo() モー これでsay_mooというメソッドの定義した。
メソッド引数 メソッドにはオブジェクトに対して単独で用いられるraw_input().str().reverseなどと、引数(引数)をとって、オブジェクトがそのメソッドをどのように実行するかを指示する必要があるものがあります。 say_moo()鳴く回数を引数として加えるには、どうするか考えてみましょう。 >>> def say_mo(): for i in range (3) : print 'モー' >>> say_mo() モー モー モー >>> def say_moo():
for i in range(3): print 'モー' , , 演算子を使用して1行に出力 >>> say_moo()
モー モー モー i in range(3):はメソッドを実行するときに与えられた引数を(メソッドの中から)指し示すための変数です。引数は3です。 オブジェクトが名詞で、メソッドが動詞であるならば、引数は副詞にあたります。牛がモーと 3回鳴く。 (b) 土地建物長期譲渡の税関数を作る。 def tyo_jyoto() : #長期土地建物の譲渡です。 jyotokin=input('譲渡価額>') syutokukin=input('取得価額>') #不明の場合は譲渡価額の #5%とします。 jyotohi=input('譲渡費用>') #不動産仲介料等です。 zei=round((jyotokin-syutokukin-jyotohi)*0.2) sikin=jyotokin-syutokukin-jyotohi-zei print'譲渡税=国・住', zei print'資金増',sikin >>> tyo_jyoto() 譲渡価額>3000 取得価額>150 譲渡費用>50 譲渡税=国・住 560.0 資金増 2240.0 (c)局所変数 Local variable >>> def double_this() : num = 0 num =input('>') num_times_2= num * 2 print str(num ) + 'の2倍は ' +str(num_times_2) >>> double_this() >44 44の2倍は 88 変数1 numと 変数2 num_times_2 と二っあります。
この二つは局所変数です。メソッドの内部にのみ存在する関数です。 >>> double_this() >56 56の2倍は 112 >>> print num_times_2 Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> print num_times_2 NameError: name 'num_times_2' is not defined 変数num_times_2を外部から使用できません・メソッドの中でのみ有効。 >>> def little_pest(): >>> tough_var = 'nil' >>> print 'ハッーハッハー! お前の変数は破壊したぞ!' >>> tough_var = '君はこのタフな変数に手を触れることはできない!' >>> little_pest() ハッーハッハー! お前の変数は破壊したぞ! >>> print tough_var 君はこのタフな変数に手を触れることはできない! 内部変数の tough_var と外部変数の tough_var の二つありますが、何の関係もない。 (d) 返り値 print キボードから入力された文字列を返す。 5+3 はの中の+というメソッドは8を返します。 メソッドはその値をメソッドが呼んだコードに返す。 print はプログラムが画面に対して情報を出力する。 >>> def say_moo() : print 'モー' >>> say_moo() モー >>> print say_moo() say_moo()メソッドが出力したモノ、最後の式モー。 モー None print が出力したモノ、。printはいつもNoneを返す。 文字列を返すようにしたければ、それをメソッドに追 加。 >>> def say_moo(): print 'モー' print 'yellow submarine' >>> say_moo() モー yellow submarine 最後に評価した式を返す。
(e) return文 日本語でうまくいかないので英文で実行。 return文を使う.。
return文は関数の中で使い、カッコを使わないで関数の外に受け渡したいデータをそのまま記述。 >>> def f(a,b):
c = a +b return c >>> f(7,8)
15 >>> def times(x,y): 変数オブジェクトを作成し、関数名に代入
return x*y 呼び出された場合に実行されるボディ >>> times(34,67) カッコ内に引数を指定し、呼び出す。 2278 def favorite_food(): name =raw_input('input name>') if name == 'lister' : 人名です。 return 'vindar' 好みの食物です。 if name == 'lima' : return 'mashe poteto' >>> favorite_food() input name>lister 'vindar' >>> favorite_food() input name>lima 'mashe poteto' return文を使わない。 >>> def favorite_drink(): name=raw_input('name>') if name =='janrick' : print 'ar grey hot' if name =='cathaline' : print 'black coffe' >>> favorite_drink() name>cathaline black coffe (3) これで自分のメソッドを作ることを学だので、
ここで心理学の実験プログラムを修正。 あいさつ文の関数 def aisatu() : print '今日は、私の実験のためにお時間をとって、' print 'いただき、ありがとうございます。この実験は、' print '人々がメキシコ料理に対してどう感じているか' print 'に冠するものです。メキシコ料理について考え' print 'すべての質問に対して、yesかnoかで正直に' print '答えてください。この実験はおねしょとは関係' print 'ありません。' aisatu()と入力すると、あいさつ文が画面に出力されます。 質問文 >>> q1 ='タコス' >>> q2 ='プリート' >>> q3 = 'ベッドを濡らしますか?' >>> q4 = 'チミチャン' >>> q5 = 'ソバイピーヤ' >>> q6 = 'オルチャタ' >>> q7 = 'フラウタス' >>> q10 ='はお好きですか' >>> print q1+q10 タコスはお好きですか 質問ブロックの関数。 >>> def ask(): good_answer = False while (not good_answer): reply = raw_input('"yes","no">') if (reply =='yes'or reply =='no'): good_answer= True elif reply =='yes' : answer = True elif reply =='no': answer = False else : print 'yesかnoでお答えください' >>> ask() "yes","no">no >>> ask() "yes","no">yes >>> ask() "yes","no">nonono yesかnoでお答えください "yes","no"> 実験の目的を明かす文。 >>> def db(): print 'デブリーフィング' print 'この実験へのご協力を感謝します。実は、この実' print '験はメキシコ料理とは何の関係もありません。' print 'この実験は夜尿症(おねしょ)に関する実験だっ' print 'たのです。メキシコ料理はより正直にこたえら' print 'れるよう、あなたのガードをはずすために聞いた' print 'にすぎません。本当に有難うございました。' 練習問題 askメソッドを修正してください。good_answer,answerの二つの変数を取り除くこと。ループから抜けるのにreturn文を使う。 ホーム 戻る |