十二、pythonの循環構造

3418 ワード

私たちが1+2+3を計算するときは、直接書くことができますが、1+2+3+・+100を計算するときは、書くことができません.1億から1億の和を計算すれば、全部書くのはちょっと現実的ではありません.コンピュータが1億から1億の和を計算できるようにするには,このときサイクル構造が必要である.
pythonは、whileサイクルとfor......inサイクルの2つのサイクル構造を提供します.
whileサイクル
whileループの文形式はif文と似ており、実行文には4つのスペースをインデントとして使用する必要があります.
while (     1):
        1
        2

プログラムがwhileループまで実行されると、まず「条件式1」を判断し、Trueであれば次の「実行文1」、「実行文2」を実行し、2つの文がすべて実行された後、再び「条件式1」を判断し、Trueであれば次の実行文を実行し続け、Falseであれば次の実行文を実行せず、ループが終了する.例を挙げると、1~5の和を計算します.
sum,i = 0,1  #sum=0, i=1
while i<=5:
    sum+=i  #sum=sum+i
    i+=1  #i=i+1
print('sum',sum)

このプログラムでは、sumを0、iを1に割り当て、ループ構造に進みます.まずi<=5が真か偽かを判断し、Trueとして、次の循環体、すなわちsum+=ii+=1を実行し、このときのsumは1、iは2に等しく、その後条件式i<=5に戻り、真か否かを判断し、真であれば循環を継続する.このように往復すると,最後にi=6となり,条件式はFalseとなり,ループは終了し,このときのsumは1+2+3+4+5の和に等しい.次のステップでsumを印刷し、結果を得ます.
sum 15

これがwhileサイクルです.
for…inサイクル
pythonはfor......inサイクルを提供し、このサイクルは非常に強力です.主にリストとメタグループの要素を反復できます.以前のwhileサイクルと同じように、4つのスペースをインデントとして使用する必要があります.
names = ['Tom', 'Jack', 'David']
for name in names:
    print(name)

印刷結果:
Tom
Jack
David

namesはリストであり、for name in namesを使用した3つの文字列があり、nameは変数としてループが進むにつれてnamesの各要素を順次表す.最初のループの場合、nameは'Tom'、実行ループ、print(name)、印刷'Tom';2回目のループでは、nameが「Jack」になり、「Jack」が印刷されます.3回目のnameが「David」になり、「David」が印刷されます.これで、names内のすべての要素が順番にループされ、ループはこれで終了します.
これがforサイクルです.
1から5の和を計算する場合は、次のように書くだけです.
sum = 0
for i in [1, 2, 3, 4, 5]:
    sum+=i
print('sum',sum)

印刷結果は次のとおりです.
sum 15

しかし、このように書くのは面倒です.1から5を全部書かなければならないので、pythonはrange()という関数を提供しています.
range(start, stop[, step]) -> range object range()関数には最大3桁、最低1桁を入れます.1つの数字を置くとstopというパラメータを表します.2つの数字を置くとstartとstopの2つのパラメータを表します.3つの数字を置くとstart,stop,stepの3つのパラメータを表します.range()関数を使用すると、リストではなく、強制タイプ変換によってリストに変換する必要がある整数シーケンスが生成されます.例を挙げます.
print(range(5))
print(list(range(5)))

印刷結果は次のとおりです.
range(0, 5)
[0, 1, 2, 3, 4]

range(5)はrange(0,5)を表し、すなわち0から4のシーケンスを表し、これは前のスライスと同様であり、前に取った後に取らず、1つのパラメータしか使用しない場合、この数字はstopの位置として、startパラメータはデフォルトで0、すなわち0からstop-1を使用する.3番目の数字を使用する場合、3番目の数字はstep、ステップ長として、これは前のスライスと同様です.
print(range(0,11,2))
print(list(range(0,11,2)))

印刷結果:
range(0, 11, 2)
[0, 2, 4, 6, 8, 10]

以上がrange()関数の使い方です.心配しないでください.range()関数が生成したこのオブジェクト、この秩序シーケンスは、for......inで直接反復することができます.
for i in range(5):
    print(i)

印刷結果:
0
1
2
3
4

したがって、1から100の和を計算するときに、次のコードを使用することができます.
sum = 0
for i in range(101):
    sum+=i
print('sum:',sum)

印刷結果が表示されます.
sum: 5050

これがforループを用いて計算される.
通常、forループはwhileループよりも柔軟であり、特に操作オブジェクトがリスト、メタグループ、辞書などの反復可能な構造の場合、非常に強力である.
ループをするときpythonはenumerate()関数を提供し、非常に実用的です.
a = ['Tom', 'Jack', 'Bob']
for index,value in enumerate(a):
    print(index, value)

印刷結果:
0 Tom
1 Jack
2 Bob

Enumerate()関数は、複数のメタグループからなるシーケンスを生成します.各メタグループには、現在の要素がインデックスと現在の要素である2つの要素があります.上記の例では、ループのたびにメタグループの2つの値をindexとvalueにそれぞれ割り当て、それぞれ2つの値を印刷します.
以上pythonのループ構造です.