このチュートリアルでは、 Python で do-while ループ をエミュレートする方法を学びます。
どのプログラミング言語でも、ループはループ条件に応じて特定のアクションを繰り返し実行するのに役立ちます。 Python は while および for ループ構造をサポートしていますが、 do-while ループはネイティブにサポートしていません。
ただし、Python の既存のループとループ制御ステートメントを使用して、do-while ループの仕組みを理解することで、do-while ループをエミュレートすることができます。
これを行う方法については、今後数分間で学習します。さぁ、始めよう!
Do-while ループ構造とは何ですか?
C や C++ などの言語でプログラムしたことがある場合は、おそらく do-while ループ構造に遭遇したことがあるでしょう。
do-while ループでは、ループ本体 (中括弧で区切られたブロック内) 内の一連のステートメントが最初に実行され、次にループ条件がチェックされます。
のオンライン C コンパイラで、ブラウザから直接次の C サンプルを実行できます。
次のコード スニペットを考えてみましょう。
//do_while_example1
#include <stdio.h>
int main() {
int count = 1;
printf("Do-While loop: \n");
do{
printf("Loop runs...");
}while(count<0);
return 0;
}
これが出力です。
Output
Do-While loop:
Loop runs...
上の例では:
-
countの値は 1 で、ループ条件はcount < 0です。ただし、ループ条件が最初はFalseあっても、ループは 1 回実行されます。 -
これは、そもそもループ条件が
Trueの場合にのみ実行される while ループとは対照的です。
//while_example1
#include <stdio.h>
int main() {
int count = 1;
printf("While loop: \n");
while(count<0){
printf("Loop runs...");
}
return 0;
}
前述したように、ループ条件
count < 0
は
False
で、最初は
count
変数が 1 に初期化されます。そのため、上記のコードをコンパイルして実行すると、while ループ本体のステートメントが実行されないことがわかります。
Output
While loop:
//loop body does not run!
While と Do-while: 違いの概要
while ループと do-while ループの違いを詳しく見てみましょう。
次の例を考えてみましょう。
//do_while_example2
#include <stdio.h>
int main() {
int count = 1;
printf("Do-while loop: \n");
do{
printf("%d\n",count);
count++;
}while(count<5);
return 0;
}
上記のコードセルでは次のようになります。
-
count変数は 1 に初期化されます。 - do-while ループを使用します。
-
count変数はループを通過するたびに 1 ずつ増加し、ループ条件はcount < 5に設定されます。
ここでは、実行がどのように行われるかを視覚的に説明します。do-while ループがどのように動作し、ループ条件を 4 回チェックするかについて説明します。
Output
Do-while loop:
1
2
3
4
代わりに while ループを使用すると、次のようになります。
//while_example2
#include <stdio.h>
int main() {
int count = 1;
printf("While loop: \n");
while(count<5){
printf("%d\n",count);
count++;
};
return 0;
}
以下の図は、while ループの実行を説明しています。この例では、while ループはループ条件を 5 回チェックします。
Output
While loop:
1
2
3
4
上記の while ループと do-while ループの出力は同じですが、微妙な違いがいくつかあります。
while ループでは、条件のチェックが最初に行われ、次にループ本体が続きます。したがって、ループを
K
回実行したい場合は、ループ条件が
True
になる実行が
正確に K
回存在する必要があります。反復番号
K+1
で、条件は
False
になり、コントロールはループから抜け出します。
一方、do-while ループを使用する場合、K 回目のループ条件のチェックは 、K がループを通過した後で のみ行われます。
では、なぜこのわずかな改善が役立つのでしょうか? 🤔
ループ条件に計算コストがかかるとします。たとえば、再帰関数の呼び出しや複雑な数学的演算などが含まれます。
このような場合、ループ本体を K 回繰り返す場合、代わりに do-while ループを使用すると有益です。
While と Do-while のまとめ
学んだ主な違いを表にまとめてみましょう。 👩🏫
| Whileループ | Do-while ループ |
| ループ条件のチェック: ループ本体の実行前 | ループ条件のチェック: ループ本体の実行後 |
最初に条件が
False
の場合、ループ本体は実行されません。
|
最初に条件が
False
の場合、ループ本体は
1 回だけ
実行されます。
|
| ループ条件は、ループを通過する K 回に対して K 回チェックされます。 | ループ条件は、ループを通過する K 回に対して K-1 回チェックされます。 |
|
while ループをいつ使用するか?
– 条件が True である限りループは実行される必要があります – 入口制御ループの場合 – ループ条件の計算コストが高くない場合 |
do-while ループをいつ使用するか?
– ループは、最初の False ループ条件に対して少なくとも 1 回実行する必要があります – 出口制御ループの場合 – ループ条件の計算コストが高い場合 |
Python での Do While ループ動作のエミュレート
前のセクションから、do-while ループをエミュレートするには次の 2 つの条件があります。
-
ループ本体内のステートメントは、ループ条件が
TrueかFalseかに関係なく、 少なくとも 1 回 実行する必要があります。 -
条件は、ループ本体内のステートメントを実行した後にチェックする必要があります。条件が
Falseの場合、コントロールはループから抜け出す必要があります: コントロールを終了します。
Python の無限 While ループと Break ステートメント
以下に示すように、Python で無限 while ループを定義できます。
while True:
pass
# Instead of True, you can have any condition that is always True
while always-True-condition:
pass
break
ステートメントを使用すると、ループ本体から抜け出し、ループ本体の外側の最初のステートメントに制御を移すことができます。
while <condition>:
if <some-condition>:
break
C の最初の do-while ループの例では、ループを継続する条件は
count < 0
です。したがって、ループから抜け出す条件は、カウント値が 0 またはゼロより大きい (
count >= 0
) ことです。
以下は、Python での do-while ループのエミュレーションです。
count = 1
while True:
print("Loop runs...")
if(count >= 0):
break
Python Do-while ループの例
前のセクションの例に戻り、do while ループをエミュレートして Python で書き直します。
#1
。
count
5 未満の場合に
count
変数の値を出力する例をもう一度見てみましょう。
ループ本体が少なくとも 1 回実行されるように無限ループを定義する方法はわかっています。
ループは、カウントが 5 未満である限り継続する必要があります。したがって、カウントが 5 に達したら、ループから抜け出す必要があります。したがって、
count == 5
終了制御条件です。
それをまとめると、次のようになります。
count = 1
while True:
print(f"Count is {count}")
count += 1
if count==5:
break
Output
Count is 1
Count is 2
Count is 3
Count is 4
#2 。数字推測ゲームを Python do-while 構造として書き直すこともできます。
数字推測ゲームでは、ユーザーの推測を事前に定義された秘密の数字と照合して検証します。ユーザーは、許容される最大試行回数 (たとえば、
max_guesses
の範囲内で秘密の番号を推測する必要があります。
コードは、ユーザーの推測が正しいか間違っているかに関係なく、ユーザーに入力を求める必要があります。これは、無限の while ループを使用して行うことができます。
では、いつループから抜け出す必要があるのでしょうか?
次のいずれかが発生した場合、コントロールはループから抜け出す必要があります。
- ユーザーが数字を推測したとき
-
ユーザーがまだ数字を推測していないが、利用可能な推測数を使い果たした場合。ユーザーによる間違った推測の数 =
max_guesses。
以下のコードセルは、その方法を示しています。
import random
low, high = 5,50
secret_number = random.choice(range(low,high))
max_guesses = 10
num_guesses = 0
while True:
guess = int(input("\nGuess a number:"))
num_guesses += 1
conditions = [num_guesses==max_guesses,guess==secret_number]
if any(conditions):
break
ループから抜け出す代わりに、上記の各条件が発生したときに説明の
print()
ステートメントを追加して、ループから抜け出すことができます。
import random
low, high = 5,50
secret_number = random.choice(range(low,high))
print(secret_number)
max_guesses = 10
num_guesses = 0
while True:
guess = int(input("\nGuess a number:"))
num_guesses += 1
if guess==secret_number:
print("Congrats, you guessed it right!")
break
if num_guesses==max_guesses:
print("Sorry, you have no more guesses left!")
break
2 つの出力例を以下に示します。
このサンプル出力では、ユーザーが秘密番号を正しく推測すると、break ステートメントがループから抜け出します。
# Sample output when secret_number = 43 and user gets it right!
Guess a number:4
Guess a number:3
Guess a number:43
Congrats, you guessed it right!
ユーザーが利用可能な推測の最大数に達したが、秘密番号を正しく推測できなかった場合の別の出力例を次に示します。
# Sample output when secret_number = 33 and user fails to guess it right!
Guess a number:3
Guess a number:15
Guess a number:21
Guess a number:50
Guess a number:17
Guess a number:6
Guess a number:18
Guess a number:5
Guess a number:12
Guess a number:43
Sorry, you have no more guesses left!
結論
このチュートリアルが、Python で do-while ループをエミュレートする方法を理解するのに役立つことを願っています。
重要なポイントは次のとおりです。
- 無限ループを使用して、ループ本体が少なくとも 1 回実行されるようにします。 while True などの簡単な無限ループの場合もあれば、条件が常に True になる while <condition> の場合もあります。
- ループ内の 終了 条件を確認し、 break ステートメントを使用して特定の条件でループを抜け出します。
次に、Python で for ループと enumerate() 関数を使用する方法を学びます。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





