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