Python.use(better) スケール課題 #2
Python.use(better)
スケール課題 #2《Python3.1|Jython2.5.0|IronPython2.6》
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
♪スタッフ研修用のセミナー教材(2003)に加筆(再構成)して、公式マニュアルの補足情報を提供します。
■ 関連記事
スケール課題:要求仕様 ★
■ step03a:if 文を利用する
def scale_03a(n): s = "" for e in range(n): if e%5==0: s += "+" s += "." return s
if に続く条件式 e%5==0 を満たすときだけ、if ブロックに記述したコードの断片を実行します。そのため、制御変数 e の値が 5 の倍数のときだけ、文字列 "+" を連結します。
>>> s; scale_03a(len(s))
'Type license() to see the full license text'
'+.....+.....+.....+.....+.....+.....+.....+.....+...'
すると、5桁ごとに目印 "+" を示す文字列が得られます。
■ 何が問題か
しかし、問題となるのは、与えられた文字列と長さが異なることです。得られた文字列 "." を数えると、5つずつ出力されています。本来なら、ここは4つずつ出力したいのです。
その理由は、if に続く「条件式を満たすかどうかとは無関係」に、"." を連結しているからです。つまり、重複して文字列を連結したために、文字列の長さが異なるわけです。この問題を解消するために、else ブロックを導入します。
■ step03:if/else 文を利用する
def scale_03(n): s = "" for e in range(n): if e%5==0: s += "+" else: s += "." return s
if に続く条件式 e%5==0 を満たさないときには、else ブロックに記述したコードの断片を実行します。そのため、制御変数 e の値が 5 の倍数でないときには、文字列 "." を連結します。
>>> s; scale_03(len(s))
'Type license() to see the full license text'
'+....+....+....+....+....+....+....+....+..'
》作業中です《
Last updated♪2009/07/24