記事ディレクトリ
forループ
Pythonは、forループを使用して反復可能なオブジェクトをトラバースし、反復可能なオブジェクト内の要素を順番に取得し、最後の要素が取得された後にループを停止します。
forループの基本構造
forループの構文は次のとおりです。
for variable in sequence:
statements
else:
statements
else部分は省略できます。シーケンスは反復可能なオブジェクトです。forループは、シーケンス内の要素を順番に取得して変数変数に割り当てます。ループが実行されるたびに、シーケンスの最後の要素が取得されてループが終了するまで、変数が1回割り当てられます。 。フローチャートを図に示します。
例は次のとおりです。
>>> s = [1,2,3,4,5]
>>> for item in s: # 依次将列表中的元素赋值给item,取完最后一个元素5,循环停止
... print(item)
1
2
3
4
5
forループが実行された後、esleの下のステートメントブロックが実行されます。forループが途中で終了した場合、elseの下のステートメントブロックは実行されません。例は次のとおりです。
>>> s = [1, 2, 3, 4, 5]
>>> for item in s:
... print(item)
>>> else: # for循环正常运行完后会执行else下的语句块
... print('for循环执行完毕')
1
2
3
4
5
for循环执行完毕
>>> s = [1, 2, 3, 4, 5]
>>> for item in s:
... if item < 3:
... print(item)
... else:
... break
>>> else: # for循环被break语句断开,没有运行完,不执行else下的语句块
... print('for循环执行完毕')
1
2
range()関数
range()関数は、次の構文でシーケンスを生成できます。
range(start, stop[, step])
パラメータ:
- start:開始値。デフォルト値は0ですが、省略できます。
- stop:終了値(終了値を除く)。
- step:ステップサイズ。デフォルトは1です。
戻り値:範囲オブジェクト
range()関数の戻り値は、数値のシーケンスです。開始値は取得できますが、終了値は取得できません。これは、左側が閉じて右側が開いている間隔です。このシーケンスは、 forループを使用してトラバースできるiterableオブジェクト。例として、list()関数を使用してリストに変換できます。
>>> print(range(1, 5)) # 生成开始值是1,结束值是4,步长为1的数列,左闭右开的区间
range(1, 5) # range对象
>>> for i in range(1, 5): # 使用for循环遍历range对象的值
... print(i)
1
2
3
4
# 使用list()函数将range对象转换成列表输出
>>> s = list(range(5)) # range(5)等同于range(0, 5),开始值默认为0,步长默认为1
>>> print(s)
[0, 1, 2, 3, 4]
forループの共通スコープ
forループは、反復可能なオブジェクトをループできます。複数の変数を使用して、forループ内のシーケンスオブジェクトを反復できます。たとえば、dict.items()メソッドによって返されるタプルは、2つの変数を使用して、タプル内の要素を受け取ることができます。例は次のとおりです。
>>> d1 = {
'name':'lilei', 'age':20, 'grade':'three'}
>>> for k, v in d1.items(): # 使用变量k, v接收元组中的元素
... print(k, v)
name lilei
age 20
grade three
>>> for (a, b) in [(1,2),(3,4),(5,6),(7,8)]:
... print(a, b)
1 2
3 4
5 6
7 8
forループのネスト
forループはネストできます。つまり、forループはforループ内で使用でき、2つ以上のレイヤーがサポートされます。例は次のとおりです。
例:九九の九九を印刷する
>>> for i in range(1, 10):
... for j in range(1, i + 1):
... print('%s * %s = %s' % (i, j, i * j), end=' ')
... print()
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
外側のforループの変数iは、それぞれ1、2、3、4、5、6、7、8、9として割り当てられます。i = 1の場合、内側のforループjに値1を割り当てることができます。この時点で、i = 1、j = 1、次にprint '1 * 1 = 1'、print関数はラップせず、内部ループが実行されます。print()を実行してラップします。外側のループは次のレイヤーに入ります.i=2の場合、内側のループjは1、2として割り当てることができます。内側のループが初めてループするとき:i = 2、j = 1、print '2 * 1 = 2'、print関数はラップせず、内側のループは2番目のループを実行します:i = 2、j = 2 、print '2 * 2 = 4'、内側のループが終了し、print()が実行されて行が折り返されます。外層は次の層にループします、i = 3 .. ..
類推すると、外層は1つの層を循環し、内層は1回循環し、内層のサイクルが終了した後、外層のサイクルは次の層に入ることができます。
forループの場合、および条件ステートメントもネストできる場合の例は次のとおりです。
3で割り切れる1から100までの数の合計を計算します
>>> s = 0
>>> for i in range(1, 101):
... if i % 3 == 0: # 满足if条件的执行求和
... s += i
>>> print(s)
1683