Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の2_B問題をC++とPython で解いてみました。
ITP1 のトピック2では、条件分岐を学びます。「条件によって実行する内容を変え、処理の流れを制御する構造文を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(2_B: Range)
問題はリンク先をご覧ください。
条件文で使う条件式に論理演算を含む場合を学びます。
解答案
C++ プログラム例(ITP1 2_B)
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
if ((a < b)&&(b < c)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
C と C++ は、論理AND演算子は && を、ビットAND演算子は & を使います。論理AND演算子のほうが頻度は高いと思いますが、少し間違えやすい文法かもしれません。
C++ では、演算子 && の替わりにキーワード and を使うことができます。あまり見ないですが。
Python プログラム例(ITP1 2_B)
Python では、論理ANDを and で表します。ビットANDを & で表します。
a, b, c = map(int, input().split())
if a < b and b < c:
print("Yes")
else:
print("No")
比較演算子は、次のようにつなげて書くこともできます。このため、and が不要になりました(C プログラマには、不具合に見えるかもしれません)。Python は、こちらの書き方(chained-comparison)を推奨しているようです。
a, b, c = map(int, input().split())
if a < b < c:
print("Yes")
else:
print("No")
論理演算子ではありませんが、if 文の代わりに3項演算子を使った次の書き方もできます。
a, b, c = map(int, input().split())
print("Yes" if a < b < c else "No")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
論理演算子について学びました。a < b < c と書けるのは、直感とも近いです。Python は、自然な見た目の文法を選択していることが学べました。
引き続き、ITP1 の問題を紹介していきます。