while ... else
if
文は、if
の条件が満たされなかった場合に実行されるelse
ブロックを持つことができます。同様に、while
ループもelse
ブロックを持つことができ、while
の条件が満たされなかった場合に実行されます。name = input()
if name != 'Alice':
print('I don\'t know you')
else:
print('Hi, Alice!')
print('End!')
name = input()
while name != 'Alice':
print('I don\'t know you')
name = input()
else:
print('Hi, Alice!')
print('End!')
while
を使ったプログラムでは、名前が'Alice'でない限り、ユーザーに名前の入力を促し続けます。最終的に名前が'Alice'になった場合、条件name != 'Alice'
は成立せず、プログラムはelse
ブロックに入り、Hi, Alice!
を出力します。 それなら、while
の外でprint('End!')
の直前に書けばいいのではないでしょうか?
この例では、その通りです!しかし、
while ... else
はbreak
文を扱うときにとても便利です。while
ループ内でbreak
した場合、ループに入った時点で条件はまだ成立しているため、else
ブロックは実行されません。これをwhile ... else
ではなくwhile ... nobreak
と呼ぶべきだという議論もありました。数値に数字の
5
が含まれているか調べたいとします:n = 123409087542108
while n != 0:
if n % 10 == 5:
print('The number contains a digit 5!')
break
n //= 10
else:
print('The number does not have a digit 5')
このように、
while
ループがbreak
すると、else
ブロックは実行されません。そのため、数字の5
を既に見つけた場合、プログラムは2番目のメッセージを出力しません。while
ループが最後まで到達し、条件がもう成立しなくなった場合、else
ブロックが実行され、プログラムはThe number does not have a digit 5
を出力します。while ... else
の概念をwhile ... nobreak
と解釈することができますが、プログラムではelse
を用いて記述します。 チャレンジ
入力として与えられた整数について、その数字に
3
または7
が含まれているかを判定するタスクです。含まれている場合、プログラムはThe number contains a digit 3 or 7
と出力してください。含まれていない場合は、The number neither has a digit 3 nor a digit 7
と出力します。入力 | 出力 |
1208452 | The number neither has a digit 3 nor a digit 7 |
12939078123 | The number contains a digit 3 or 7 |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB