本サイトAIZU ONLINE JUDGE ITP1_3_B へはこちらから
問題:テストケースの出力
オンラインジャッジでは、提出されたプログラムが複数の入力データそれぞれに対して正しい出力を行っているかを判定するために、1つの入力データファイルに複数のデータセットが含まれているものがあります。この問題は、そのようなデータセットを処理するための練習問題です。
1つの整数 x を読み込み、それをそのまま出力するプログラムを作成して下さい。
ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。
Input
入力は複数のデータセットから構成されています。各データセットは1つの整数 x を含む1行から構成されています。
x が 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。
Output
各データセットごとに、以下の形式で x を出力して下さい:
Case i: x
ここで、i は1から始まるデータセットの番号を示します。Caseと番号 iの間に1つの空白を入れて下さい。また、:(コロン)と整数 x の間に1つの空白を入れて下さい。サンプル入出力を参考にして下さい。
Constraints
- 1 ≤ x ≤ 10,000
- データセットの数は 10,000 を超えない。
Sample Input
3
5
11
7
8
19
0
Sample Output
Case 1: 3
Case 2: 5
Case 3: 11
Case 4: 7
Case 5: 8
Case 6: 19
解答例
num_lst = []
num = 0
while True:
num = int(input())
if num == 0:
break
num_lst.append(num)
for i in range(len(num_lst)):
print('Case {}: {}'.format(i+1, num_lst[i]))
解説
以下のように解いていきます。
入力した整数用のリスト、インデックス用のリストを用意する
今回は入力した数字を出力する必要があるのでリストで管理します。
また、入力した数字をリストに入れるための一時的な領域として変数を定義します。
# 入力した整数用のリスト
num_lst = []
# リストに追加用の一時的領域として変数を定義する
num = 0
while文を使用し、入力処理を行う
ある条件まで入力を続ける場合はwhile文とif文を組み合わせて、入力処理を行います。
# if文の条件式に当てはまるまでループ処理を続ける
while True:
処理
# この条件式に当てはまる場合、break文でループ処理を終了する
if 条件式:
break
※サイト内「AIZU ONLINE JUDGE ITP1_3_Cをpythonで解いてみた」の、while文とはにwhile文の使用方法が書かれておりますのでよかったらご覧ください。
今回の場合は、0が入力されるまで入力処理を続けたいので以下のようにif文を設定します。
# if文の条件式に当てはまるまで処理を続ける
while True:
# input関数をint関数で囲み、整数値として変数に代入
num = int(input())
# もし0が入力された場合、break文でwhileループ終了
if num == 0:
break
# 0以外の場合はリストに追加
num_lst.append(num)
リストに値を追加した際に使用したappendメソッドについて説明します。
appendメソッドとは
リストの末尾に一つの値を追加するメソッドです。「リスト名.append(追加したい値)」とすることで、作成したリストに値を付加することができます。
リスト名.append(追加したい値)
具体的な使用方法は以下です。引数に変数を設定することも可能です。
sample_lst = [0, 1, 2]
sample_num = 200
# 引数に追加したい値を設定しリスト追加
sample_lst.append(100)
print(sample_lst)
# [0, 1, 2, 100]
# 引数に変数を設定することも可能
sample_lst.append(sample_num)
print(sample_lst)
# [0, 1, 2, 100, 200]
for文を使用し、出力処理を行う
今回は入力した数分出力すれば良いので、出力処理はfor文を使用します。
このように繰り返しの回数がわかっている場合はfor文を使用します。
まずは、入力した数を求めるためにリストの長さを取得するlen関数を使用します。
ここでリストの長さを取得するlen関数について説明します。
len関数とは
引数に指定したオブジェクトの長さや要素の数を取得することができます。引数にリストを指定した場合には、リストに含まれる要素数を取得することができます。
len(リストなどのオブジェクト)
具体的には以下のようにlen関数の引数にリストを設定し、要素数を取得します。
sample_lst = [1, 2, 3, 4, 5]
print(len(sample_lst))
# 5
また、リストの要素数分繰り返し処理を行いたいので、range関数を使用します。
range関数とは
Python3においてrange関数はrange型のオブジェクトを生成します。今回は便宜上「range関数」としていますが、range関数はrange型のコンストラクタといったほうが正確です。
# 0から任意の値までの連番
range(stop)
# 任意の範囲の連番
range(start, stop)
# 任意の範囲、増分の等差数列
range(start, stop[, step])
それぞれの具体的な使い方は以下で解説します。なお、引数には終了値を必ず設定しますが連番に終了値は含まみませんので注意が必要です。
range(stop)〜0から任意の値までの連番〜
range関数の引数に終了値のみ設定すると、0 ≦ i < stop(終了値)までの連番が生成されます。
※終了値は含まみません
# 0から4までの連番
for i in range(5):
print(i)
# 0
# 1
# 2
# 3
# 4
range(start, stop)〜任意の範囲の連番〜
range関数の引数に開始値、終了値を設定すると、start(開始値) ≦ i < stop(終了値)までの連番が生成されます。
※終了値は含まみません
# 2から4までの連番
for i in range(2, 5):
print(i)
# 2
# 3
# 4
range(start, stop[, step])〜任意の範囲、増分の等差数列〜
range関数の引数に開始値、終了値、ステップ値を設定すると、start(開始値) ≦i < stop(終了値)までstep(ステップ値)ずつ増加する等差数列が生成されます。
※終了値は含まみません
# 1から9まで2ずつスキップする連番
for i in range(1, 10, 2):
print(i)
# 1
# 3
# 5
# 7
# 9
今回は入力した数分出力したいのでlen関数の引数にリストを設定、そのlen関数をrange関数の引数に設定し、リストの数分forループを行います。
print関数で出力する文字列は”Case 1: 3″のように、”Case [1から始まり1ずつ加算]: [入力した値]”なので、for文の変数iをうまく使用します。
iには0〜要素数-1の値が連番で設定されるので、[1から始まり1ずつ加算]にはi+1、[入力した値]にはnum_lst[i]を設定し、リストの先頭から順番に値を取り出します。
# len関数でリストの要素数を取得 → range関数で要素数分のループ処理を行う
for i in range(len(num_lst)):
# 変数iを使用し、リストを先頭から順番に出力する
print('Case {}: {}'.format(i+1, num_lst[i]))
※サイト内「AIZU ONLINE JUDGE ITP1_1_Dをpythonで解いてみた」の、format関数とはにformat関数の使用方法が書かれておりますのでよかったらご覧ください。
最後に、もう一度プログラムを確認してみましょう。
# 入力した整数用のリスト
num_lst = []
# リストに追加用の一時的領域として変数を定義する
num = 0
# if文の条件式に当てはまるまで処理を続ける
while True:
# input関数をint関数で囲み、整数値として変数に代入
num = int(input())
# もし0が入力された場合、break文でwhileループ終了
if num == 0:
break
# 0以外の場合はリストに追加
num_lst.append(num)
# len関数でリストの要素数を取得 → range関数で要素数分のループ処理を行う
for i in range(len(num_lst)):
# 変数iを使用し、リストを先頭から順番に出力する
print('Case {}: {}'.format(i+1, num_lst[i]))
コメント