Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の3_B問題をC++とPython で解いてみました。
ITP1 のトピック3では、繰り返し処理を学びます。「条件に従って処理を繰り返し、反復処理を行う構造文を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(3_B: Print Test Cases)
問題はリンク先をご覧ください。
AOJ ITP1 3_B問題:Print Test Cases
途中で条件によって繰り返し処理を抜けるプログラムを学びます。
解答案
C++ プログラム例(ITP1 3_B)
while の条件を必ず成立するように書くと、無限ループします。ある条件を満たしたら、break 文で抜けます。
この問題では、読み込む整数が 0 になれば無限ループから抜けます。
#include <iostream>
using namespace std;
int main()
{
int n = 0, test;
while (1) {
cin >> test;
if (test == 0) {
break;
}
++n;
cout << "Case " << n << ": " << test << endl;
}
return 0;
}
無限ループを嫌う場合は、入力するコードを重複させれば、while の条件式で抜ける条件を書くことができます。
#include <iostream>
using namespace std;
int main()
{
int n = 0, test;
cin >> test;
while (test != 0) {
++n;
cout << "Case " << n << ": " << test << endl;
cin >> test;
}
return 0;
}
Python プログラム例(ITP1 3_B)
Python でも無限ループを使う書き方ができます。
n = 0
while True:
test = int(input())
if test == 0:
break
n += 1
print(f"Case {n}: {test}")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
無限ループは、抜ける条件が読みにくい場合、分かりにくいプログラムになるという意見もあります。解説したように一部のコードを重複させれば無限ループを回避することができます。この場合は、コードが重複します。違う書き方としては、条件式で入力もすれば、コードの重複を無くすことができます。ただし、この書き方は条件式が分かりにくくなります。
そのプログラムのロジックを自然に表現できる分かりやすい書き方をその都度選択していくことになると考えています。
引き続き、ITP1 の問題を紹介していきます。