Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の1_C問題をC++とPython で解いてみました。
ITP1 のトピック1では、「プログラミングの入門として、基本構造、変数、入出力、計算式を学習します。」とあります。わたしは、C と C++ には、ある程度習熟しています。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(1_C: Rectangle)
問題はリンク先をご覧ください。
整数を二つ入力して計算結果を出力する問題です。
解答案
C++ プログラム例(ITP1 1_C)
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a * b << " " << 2 *(a + b) << endl;
return 0;
}
整数を二つ読み込み、面積、周の長さを出力します。
Python プログラム例(ITP1 1_C)
ITP1 1_B で解いたように、input() で1行読み込むことができます。
ここで、a = 1 と b = 2 とすると、文字列、”1 2″ を読み込みます。この結果に対して、split() で、空白で区切ったリストを返します。つまり内部的には、input().split() は、[“1”, “2”] を返します。このリストに対して、整数化して、変数 a と b に代入するための書き方が2つあります。
Python では、以下のように多重代入が使えます。
a, b = 1, 2
map() を使う
リストのそれぞれの要素に対して、整数化するための int() を適用するために map() を使います。こちらの記法の方が見る機会が多い気がします。
a, b = map(int, input().split())
print(a * b, 2 * (a + b))
内包記法を使う
Python には、内包記法と呼ばれる書き方があります。以下のコードをみてください。入力以外でも、内包記法を使って書くと、すっきり書ける場合があるようです。
a, b = [int(elem) for elem in input().split()]
print(a * b, 2 * (a + b))
最後に
このブログでは、変数の入力で map を使っています。まだ Python に、それほど習熟しているわけではないため、将来は方針を変えるかもしれません。
簡単なプログラムでも、解説を書くために学ぶことができました。
引き続き、ITP1 の問題を紹介していきます。