Pythonのif判断文とwhileとforループ

16758 ワード

Pythonのif判断文とwhileとforループ
  • Pythonのif判定文とwhileとforループ
  • 5-1 Pythonのif文
  • 5-2 Pythonのif-else
  • 5-3 Pythonのif-elif-else
  • 5-4 Pythonのforサイクル
  • 5-5 Pythonのwhileサイクル
  • 5-6 Pythonのbreak終了サイクル
  • 5-7 Pythonのcontinueは
  • サイクルを継続する.
  • 5-8 Pythonの多重サイクル
  • 5-1 Pythonのif文
    コンピュータが多くの自動化の任務をすることができるのは、自分で条件判断をすることができるからだ.
    例えば、ユーザーの年齢を入力し、年齢に応じて異なるコンテンツを印刷するPythonプログラムではif文で実現できます.
    age = 20
    if age >= 18:
        print 'your age is', age
        print 'adult'
    print 'END'

    注意:=Pythonコードのインデントルール==です.同じインデントを持つコードはコードブロックと見なされ、上の3,4行のprint文は1つのコードブロックを構成する(ただし、5行目のprintは含まれない).if文がTrueと判断すると、このコードブロックが実行されます.
    インデントはPythonの習慣に厳格に従って書いてください:=4つのスペース==を使用しないでください、Tabを使用しないでください、更にTabとスペースを混合しないでください、さもなくばインデントによる文法の間違いを引き起こしやすいです.
    注意:if文は式に後続し、コードブロックの開始を表します.
    Pythonのインタラクティブな環境でコードをノックする場合は、特にインデントに注意し、インデントを終了するには、1行以上ノックして車に戻る必要があります.
    >>> age = 20
    >>> if age >= 18:
    ...     print 'your age is', age
    ...     print 'adult'
    ...
    your age is 20
    adult

    タスク#タスク#
    成績が60点以上であればpassedとします.
    Bartさんの点数が75だと仮定し、if文でpassedを印刷できるかどうかを判断してください.
    答え:
    score = 75
    if score >= 60:
        print 'passed'

    5-2 Pythonのif-else
    if文が式の結果をTrueと判断すると、ifに含まれるコードブロックが実行されます.
    if age >= 18:
        print 'adult'

    18歳以下の年齢で「teenager」と印刷したい場合はどうしますか?
    方法はifをもう一つ書くことです.
    if age < 18:
        print 'teenager'

    またはnot演算を使用します.
    if not age >= 18:
        print 'teenager'

    注意深い学生は、この2つの条件の判断が「これではない」のか、条件1に合致するか、条件2に合致するかを発見することができます.そのため、if...else...文でそれらを統一することができます.
    if age >= 18:
        print 'adult'
    else:
        print 'teenager'

    if...else...文を使用すると、条件式の値がTrueまたはFalseであることに基づいて、ifコードブロックまたはelseコードブロックをそれぞれ実行できます.
    注意:elseの後ろに「:」があります.
    タスク#タスク#
    成績が60点以上であればpassed、そうでなければfailedと見なす.
    Bartさんの点数が55だとしたら、if文でpassedかfailedを印刷してください.
    答え
    score = 55
    if score >= 60:
        print 'passed'
    else:
        print 'failed'

    5-3 Pythonのif-elif-else
    ある時、if...else...はまだ足りない.例えば、年齢によって
      1:18    :adult
      2:6    :teenager
      3:6   :kid

    条件1に合致するか否かをif age>=18で判断し、合致しない場合はif判断age>=6で条件2に合致するか否かを判断し、そうでない場合は条件3を実行する.
    if age >= 18:
        print 'adult'
    else:
        if age >= 6:
            print 'teenager'
        else:
            print 'kid'

    このように書くと,2層のネストされたif...else...文が得られる.この論理は問題ありませんが、条件を増やし続けると、例えば3歳以下はbabyです.
    if age >= 18:
        print 'adult'
    else:
        if age >= 6:
            print 'teenager'
        else:
            if age >= 3:
                print 'kid'
            else:
                print 'baby'

    このインデントはますます多くなり、コードもますます見苦しくなります.
    ネストされた構造のif...else...を避けるには、if...複数のelif...else...の構造を使用して、すべてのルールを一度に書き終えることができます.
    if age >= 18:
        print 'adult'
    elif age >= 6:
        print 'teenager'
    elif age >= 3:
        print 'kid'
    else:
        print 'baby'

    elifはelse ifを意味します.これにより,構造が非常に明確な一連の条件判断を書いた.
    特に注意:この一連の条件判断は上から下へ順に判断され、ある判断がTrueであれば対応するコードブロックが実行され、後の条件判断はそのまま無視され、実行されなくなる.
    次のコードを考えてください.
    age = 8
    if age >= 6:
        print 'teenager'
    elif age >= 18:
        print 'adult'
    else:
        print 'kid'

    age=8の場合、結果は正しいが、age=20の場合、なぜadultが印刷されなかったのか.
    修復する場合は、どのように修復すればいいですか?
    タスク#タスク#
    スコアで結果を計算する場合は、次の手順に従います.
    90    :excellent
    
    80    :good
    
    60    :passed
    
    60   :failed
    

    プログラムを作成して点数に基づいて結果を印刷してください.
    答え
    score = 85
    
    if score >= 90:
        print 'excellent'
    elif score >= 80:
        print 'good'
    elif score >= 60:
        print 'passed'
    else :
        print 'failed'

    5-4 Pythonのforサイクル
    listまたはtupleは、秩序化された集合を表すことができる.リストの各要素に順次アクセスしたい場合は?たとえばlist:
    L = ['Adam', 'Lisa', 'Bart']
    print L[0]
    print L[1]
    print L[2]

    リストにいくつかの要素しか含まれていない場合は、このように書くのはまあまあですが、リストに1万の要素が含まれている場合は、1万行printを書くことはできません.
    このとき,ループが役に立つ.
    Pythonのforループはlistまたはtupleの各要素を順番に反復することができます.
    L = ['Adam', 'Lisa', 'Bart']
    for name in L:
        print name

    注意:nameという変数はforループで定義され、listの各要素を順次取り出し、nameに要素を割り当て、forループ体(インデントされたコードブロック)を実行することを意味します.
    これによりlistやtupleを1つ巡るのは簡単です.
    タスク#タスク#
    クラスの試験後、先生は平均成績を統計しなければならない.4人の学生の成績はlistで以下のように表されていることが知られている.
    L = [75, 92, 59, 68]
    forサイクルで平均成績を算出してください.
    答え
    L = [75, 92, 59, 68]
    sum = 0.0
    for x in L:
       sum += x
    print sum / 4

    5-5 Pythonのwhileサイクル
    Pythonのwhileサイクル
    forループとは異なる別のループはwhileループであり、whileループはlistやtupleの要素を反復するのではなく、式に基づいてループが終了するかどうかを判断する.
    たとえば、0からN以下の整数を印刷するには、次のようにします.
    N = 10
    x = 0
    while x < N:
        print x
        x = x + 1

    whileループはxサイクル内ではx=x+1がxを増加させ続け,最終的にはxこの文がない場合,whileループはxタスク#タスク#
    whileサイクルを用いて100以内の奇数の和を計算する.
    答え
    sum = 0
    x = 1
    while x <100:
        sum += x
        x += 2
    print sum

    5-6 Pythonのbreak終了サイクル
    Pythonのbreak終了サイクル
    forループまたはwhileループを使用する場合、ループ内で直接ループを終了するにはbreak文を使用します.
    例えば、1から100の整数和を計算すると、whileで実現します.
    sum = 0
    x = 1
    while True:
        sum = sum + x
        x = x + 1
        if x > 100:
            break
    print sum

    一見、while Trueはデッドサイクルですが、サイクル内ではx>100の条件が成立したときにbreak文でループを終了することで、ループの終了を実現できると判断しました.
    タスク#タスク#
    while True無限ループを用いてbreak文と組み合わせて,1+2+4+8+16+...の上位20項の和を計算した.
    答え:
    sum = 0
    x = 1
    n = 1
    while True:
        sum += x
        x = x * 2
        n += 1
        if n > 20:
            break
    print sum

    5-7 Pythonのcontinue継続サイクル
    Pythonのcontinueはループを続けます
    ループ中にbreakで現在のループを終了したり、continueで後続のループコードをスキップして次のループを続行したりすることができます.
    forループを用いて平均点を計算するコードを書いたとします.
    L = [75, 98, 59, 81, 66, 43, 69, 85]
    sum = 0.0
    n = 0
    for x in L:
        sum = sum + x
        n = n + 1
    print sum / n

    現在、先生は合格点の平均点を統計したいだけで、x<60の点数を除去しなければならない.この場合、continueを利用して、x<60の時、循環体の後続コードを実行し続けず、直接次の循環に入ることができる.
    for x in L:
        if x < 60:
            continue
        sum = sum + x
        n = n + 1

    タスク#タスク#
    既存の計算0-100のwhileループを改造し、continue文を追加することで、奇数の和のみを計算します.
    sum = 0
    x = 1
    while True:
        sum = sum + x
        x = x + 1
        if x > 100:
            break
    print sum

    答え
    sum = 0
    x = 0
    while True:
        x = x + 1
        if x > 100:
            break
        if x % 2 == 0:
            continue
        sum += x
    print sum

    5-8 Pythonのマルチサイクル
    Pythonの多重サイクル
    ループの内部には、ループをネストすることもできます.例を見てみましょう.
    for x in ['A', 'B', 'C']:
        for y in ['1', '2', '3']:
            print x + y

    xサイクルごとにyは3回サイクルされます.これにより、全配列を印刷できます.
    A1
    A2
    A3
    B1
    B2
    B3
    C1
    C2
    C3

    タスク#タスク#
    100以内の2桁に対して、1つの2重ループを使用して、10桁の数字が1桁の数字より小さい数をすべて印刷します.たとえば、23(2<3).
    答え
    for x in [1,2,3,4,5,6,7,8,9]:
        for y in [0,1,2,3,4,5,6,7,8,9]:
            if x < y:
                print(10 * x + y)