Pythonプログラムフロー制御ステートメント:forループ


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

おすすめ

転載: blog.csdn.net/shield911/article/details/124183534