whileループ
Pythonはwhileループを使用して、特定の条件を満たすループを処理します。whileループは通常、反復可能なオブジェクトの処理には使用されませんが、whileループステートメントは無限ループを実現できます。
whileループの基本構造
whileループは、特定の条件を満たすループを処理するためによく使用されます。構文は次のとおりです。
while condition:
statements
……
else:
statements
条件はループごとに1回判定されます。条件の戻り値がTrueの場合、whileループに入り、ステートメントを実行します。条件の戻り値がFalseの場合、whileの下のステートメントは実行されず、 elseの下のステートメントが実行され、elseは省略できます。条件の戻り値が常にTrueの場合、whileループは「無限ループ」とも呼ばれる無限ループになります。whileループ実行のフローチャートを次の図に示します。
例は次のとおりです。
例:1から100までの奇数の数を数えます
i = 1 # 开始值
count = 0 # 统计频数
while i <= 100: # 结束条件
if i % 2 != 0: # 如果满足不能被2整除的条件
count += 1 # count加1
i += 1 # 增减量,如果没有增减量则i=1一直成立,成为死循环
print('1~100之间有{}个奇数'.format(count))
1~100之间有50个奇数
注:whileループの3つの要素:開始値、終了条件、および増加または減少。増加または減少がない場合、開始値は変更されず、終了条件は常にTrueを返し、whileは無限ループになります。
whileループのネストされた使用
Pythonでは、whileループ内でwhileループを使用できます。たとえば、九九の九九を印刷する場合の例は次のとおりです。
a = 1 # 外层循环的开始值
while a < 10: # 外层循环的结束条件
b = 1 # 内层循环的开始值
while b <= a: # 内层循环的结束条件
print('%d*%d=%2d' % (a, b, a * b), end=' ') # 打印,打印完后不换行
b += 1 # 内层循环的增减量
print() # 内层结束后进行换行
a += 1 # 外层循环的增减量
実行後の出力は次のとおりです。
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ループとwhileループはどちらもループ関数を実装できますが、forループは、反復可能なオブジェクトをループするために、つまり終了がわかっている場合によく使用されます。whileループは、エンディングが不明な場合によく使用されます。どちらの種類のループも入れ子にすることができますが、入れ子になったループの効率はそれほど高くないことに注意してください。入れ子になったループは実際にデカルト積演算を実行します。ループの数が多いと、待機時間が長くなります。
無限のwhileループ
場合によっては、無限ループである無限ループを使用する必要があります。この要件は、whileループを使用することで実現できます。whileの後の条件が常に真の値に固定されている限り、例は次のようになります。
import time
while True:
print('这是一个无限循环')
time.sleep(1)
出力結果:
这是一个无限循环
这是一个无限循环
这是一个无限循环
这是一个无限循环
这是一个无限循环
....
無限ループはエディターで自動的に停止することはできません。手動でのみ停止できます。PyCharmエディターでは、ショートカットキーCtrl+Cを使用してループを停止できます。
ループ制御ステートメント
ループをより適切に制御するために、forループとwhileループでbreakステートメントとcontinueステートメントを使用してループを制御できます。
breakステートメント
breakステートメントは、現在のループからジャンプするため、つまりループを早期に終了するために使用され、elseもスキップされます。例は次のとおりです。
# 统计1~100之间奇数的个数
i = 1 # 开始值
count = 0
while True: # 结束条件为True
if i % 2 != 0:
count += 1
i += 1 # 增减量
if i > 100: # 满足if条件执行break语句
break # 跳出循环
else:
print('while循环结束!') # else也会被跳过,该句不执行
print('while循环由break语句跳出,else未执行!')
# while循环由break语句跳出,else未执行!
print(count)
演算結果:
while循环由break语句跳出,else未执行!
50
注:breakステートメントは、ネストされたループでも使用できます。ネストされたループの内側のループで使用すると、内側のループからジャンプするだけで、外側のループに影響を与えずに実行を継続できます。
ステートメントを続ける
continueステートメントは、このループをスキップして次のループに進むために使用されます。例は次のとおりです。
# 计算1~100之间能被3整除的数的和
total = 0
for i in range(1, 101):
if i % 3 != 0: # 条件:不能被3整除
continue # 如果满足以上条件就跳出本次循环,进行下一次循环
total += i
print(total)
出力結果:
1683