AIZU ONLINE JUDGE ITP1_3_Cをpythonで解いてみた

python

本サイトAIZU ONLINE JUDGE ITP1_3_C へはこちらから

目次

問題:2 つの数の交換

2つの整数 x, y を読み込み、それらを値が小さい順に出力するプログラムを作成して下さい。

ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。

Input

入力は複数のデータセットから構成されています。各データセットは空白で区切られた2つの整数 x, y を含む1行から構成されています。

x と y がともに 0 のとき入力の終わりを示し、このデータセットに対する出力を行ってはいけません。

Output

各データセットごとに、x と y を小さい順に並べたものを1行に出力して下さい。x と y の間には1つの空白を入れて下さい。

Constraints

  • 0 ≤ x, y ≤ 10,000
  • データセットの数は 3,000 を超えない。

Sample Input

3 2
2 2
5 3
0 0

Sample Output

2 3
2 2
3 5

解答例

while True:
    x, y = map(int, input().split())
    if x == 0 and y == 0:
        break
    elif x < y:
        print(x, y)
    else:
        print(y, x)

解説

以下のように解いていきます。

  1. while文を使用し、入力処理を行う
  2. while文内でx と y を小さい順に並べたものを1行に出力

ある条件まで入力を続ける場合はwhile文とif文を組み合わせて、入力処理を行います。

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    処理
    # この条件式に当てはまる場合、break文でループ処理を終了する
    if 条件式:
        break

今回は、whileループ内でmap関数でx、yに2つの整数を設定し、x と y がともに 0の場合にbreak文で処理を終了します。

# 終了条件に当てはまるまで処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → x, yに設定
    x, y = map(int, input().split())
    # x と y がともに0の場合にbreak文で処理を終了
    if x == 0 and y == 0:
        break

ここで使用したwhile文について説明します。

while文とは

while 文は指定した条件式が真の間、処理を繰り返しを実行する関数です。基本的な書式は次の通りです。

while 条件式:
    条件式が真の時に実行する文

また、繰り返し処理を強制的に終了するbreak文について解説します。

break文とは

break文はwhile 文や for 文の処理を中断する文です。

while 文や for 文のブロックの中で break 文が実行されるとfor文やwhile文の繰り返し処理が強制的に終了し、次の文へ処理が移ります。基本的な書式は次の通りです。

# xが3のとき、break文でforループを終了する
for x in range(5):
    if x == 3:
        break
    print(x)

# 出力
# 0
# 1
# 2

いろいろな方法がありますが、xとyを比較してx < y の場合はx, y の順で表示し、x > y の場合はy, x の順で表示します。

先ほどの”x と y がともに0の場合”に設定したif文に追記するかたちでelif、else文を使用し条件分岐させます。

while True:
    x, y = map(int, input().split())
    # x と y がともに0の場合にbreak文で処理を終了
    if x == 0 and y == 0:
        break
    # x < y の場合はx, yの順で表示
    elif x < y:
        print(x, y)
    # x > y の場合はy, xの順で表示
    else:
        print(y, x)

最後に、もう一度プログラムを確認してみましょう。

# 終了条件に当てはまるまで処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → int関数に当てはめint型に変換 → x, yに設定
    x, y = map(int, input().split())
    # x と y がともに0の場合にbreak文で処理を終了
    if x == 0 and y == 0:
        break
    # x < y の場合はx, yの順で表示
    elif x < y:
        print(x, y)
    # x > y の場合はy, xの順で表示
    else:
        print(y, x)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次