AIZU ONLINE JUDGE

AOJ ITP1 1_D(Watch)を解く

AOJ_ITP1_1_D

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の1_D問題をC++とPython で解いてみました。

ITP1 のトピック1では、「プログラミングの入門として、基本構造、変数、入出力、計算式を学習します。」とあります。わたしは、C と C++ には、ある程度習熟しています。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(1_D: Watch)

問題はリンク先をご覧ください。

AOJ ITP1 1_D問題:Watch

整数を入力して、計算結果をフォーマットした文字列で出力する問題です。

解答案

C++ プログラム例(ITP1 1_D)

#include <iostream>

using namespace std;

int main()
{
	int h, m, s;
	cin >> s;

	h = s / (60 * 60);
	m = (s / 60)% 60;
	s = s % 60;

	cout << h << ":" << m << ":" << s << endl;

	return 0;
}

整数を読み込み、計算結果の文字列を cout に出力します。もし printf を使うなら、以下となります。

printf("%d:%d:%d\n", h, m, s);

Python プログラム例(ITP1 1_D)

フォーマットした文字列の出力が主題の問題です。

その前に、割り算について説明しておきます。Python では、整数に対する割り算 ‘//’ と浮動小数点に対する割り算 ‘/’ を区別しているため注意してください。C のように ‘/’ を使うと、その結果は浮動小数点になります。

Python では、フォーマットした文字列を出力するために format() メソッドを使っていました。Python 3.6 で f文字列(f-string)も導入されました。どちらも多くの使い方に関する仕様があります。一番基本的な使い方に絞って紹介します。

format() メソッドを使う

{} で区切られた置換フィールドを含む文字列に対して、 format() メソッドが置換フィールドに対応する引数の文字列値で置換された文字列を返します。次のプログラムで使い方が分かると思います。

s = int(input())

h = s // (60 * 60)
m = s // 60 % 60
s = s % 60

print("{}:{}:{}".format(h, m, s))

フォーマットの書式指定文字列は、C の printf と同じく、非常に多い文法仕様を持ちます。Python 公式の標準ライブラリの日本語ドキュメントのリンク先は以下となります。

書式指定文字列の文法

よく使う場合のみ覚えておけば十分です。必要に応じて上記のようなリファレンスを参照して、トライ&エラーとなるでしょうか。

f文字列を使う

Python 3.6 から導入されました。format() メソッドによる書式指定と似た仕様を持っています。こちらは、置換フィールドに対応する変数を書くことができます。最近は、このf文字列を使う傾向があるように感じます。

s = int(input())

h = s // (60 * 60)
m = s // 60 % 60
s = s % 60

print(f"{h}:{m}:{s}")

こちらも非常に多い文法仕様を持ちます。公式リファレンスのリンク先は以下です。

フォーマット済み文字列リテラル

最後に

フォーマットした文字列の出力には、C の printf に似た書式指定も可能ですが、format() を使うか、f文字列を使うことを推奨しているようです。

言語に依らず、入出力はかなり多くの文法事項があります。今回の記事は、一番基本的な使い方に絞って紹介しました。

引き続き、ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA