演習3:ジェネレータとデコレータを使いこなそう
演習: 3.1
次のコードはユーザから入力された数値を超えない範囲で、0から偶数を表示するものです。
code: exercise31.py
def evenNumbers(maxval):
nums = list()
for n in range(maxval):
if n%2 == 0:
nums.append(n)
return nums
maxval = int(input('Please input number: '))
for n in evenNumbers(maxval+1):
print(n)
関数 evenNumbers() をyield文を使って、ジェネレータとなるように修正してみましょう。(目標時間:3分)
演習: 3.2
演習:3.1 のコードをyield文を使わずに、ジェネレータとなるようにしてみましょう。
(目標時間:3分)
演習: 3.3
次のコードは引数として与えられた関数を辞書型オブジェクトACTIONSに保存するものです。
code: exercise33.py
ACTIONS = dict()
def register(func):
return func
これを利用して次の機能をもつ関数 greeting() を作成しましょう。(目標時間:10分)
greeting()は引数name で与えられた文字列からメッセージを作成する
英語(Hello XXX)もしくはフランス語( Bonjour XXX )のメッセージを表示する
引数nameの文字数が偶数なら英語、奇数ならフランス語でメッセージを表示する
英語のメッセージを表示する関数は greeting_english() としてACTIONSに登録する
フランス語のメッセージを表示する関数はgreeting_french() としてACTIONSに登録する
チャレンジ課題
演習: 3.4
greeting()の引数name はコマンドライン引数で与えることができるようにしてみよう
演習: 3.5
オプション--namefile で与えたファイルから名前を読み出して、greeting()に渡すようにしてみましょう。このときファイルには複数行があっても受け付けるようしましょう