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

python

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

目次

問題:計算機

2つの整数 a, b と1つの演算子 op を読み込んで、a op b を計算するプログラムを作成して下さい。ただし、演算子 op は、”+”(和)、”-“(差)、”*”(積)、”/”(商)、のみとし、割り算で割り切れない場合は、小数点以下を切り捨てたものを計算結果とします。

Input

入力は複数のデータセットから構成されています。各データセットの形式は以下の通りです:

a op b

op が ‘?’ のとき 入力の終わりを示します。このケースの出力は行ってはいけません。

Output

各データセットについて、計算結果を1行に出力して下さい。

Constraints

  • 0 ≤ a, b ≤ 20000
  • 0 による割り算が与えられることはありません。

Sample Input

1 + 2
56 - 18
13 * 2
100 / 10
27 + 81
0 ? 0

Sample Output

3
38
26
10
108

解答例

while True:
    a, op, b = map(str, input().split())
    a = int(a)
    b = int(b)
    if op == "?":
        break
    elif op == "+":
        print(int(a + b))
    elif op == "-":
        print(int(a - b))
    elif op == "*":
        print(int(a * b))
    elif op == "/":
        print(int(a / b))
    else:
        pass

別解

while True:
    table = input().split()
    a = int(table[0])
    op = table[1]
    b = int(table[2])
    if op == "?":
        break
    elif op == "+":
        print(int(a + b))
    elif op == "-":
        print(int(a - b))
    elif op == "*":
        print(int(a * b))
    elif op == "/":
        print(int(a / b))
    else:
        pass

解説

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

  1. while文を使用し、入力処理を行う
  2. while文内で演算子に応じて条件分岐、処理結果の表示

while文を使用し、入力処理を行う

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

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

今回は、whileループ内でmap関数でa、 op、 bに3つの文字列を設定し、後で計算できるようにa、bはint関数の引数に設定しint型に変換します。そして、opが”?”の場合にbreak文で処理を終了します。

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → str関数に当てはめstr型に変換 → a, op, bに設定
    a, op, b = map(str, input().split())
    # 計算できるようにint型に変換する
    a = int(a)
    b = int(b)
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break

※サイト内「AIZU ONLINE JUDGE ITP1_1_Cをpythonで解いてみた」の、map関数とはにmap関数の使用方法が書かれておりますのでぜひご覧ください。

別解は以下です。

input().split()で複数個の文字列を取得し、変数に設定します。このとき、変数には空白区切りの値がリスト型として設定されます。

そして、リストの2番目の値を代入したopが”?”の場合にbreak文で処理を終了します。

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → 変数に代入(リストとして設定)
    table = input().split()
    a = int(table[0])
    op = table[1]
    b = int(table[2])
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break

while文内で演算子に応じて条件分岐、処理結果の表示

演算子が入力された変数opに応じて、a、bの ”+”(和)、”-“(差)、”*”(積)、”/”(商)を求めます。

先ほどの入力処理の終了条件”opが”?”の場合”に設定したif文に追記するかたちでelif、else文を使用し条件分岐させます。

while True:
    a, op, b = map(str, input().split())
    a = int(a)
    b = int(b)
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break
    # opが"+"の場合はa、bの和を表示
    elif op == "+":
        print(int(a + b))
    # opが"-"の場合はa、bの差を表示
    elif op == "-":
        print(int(a - b))
    # opが"*"の場合はa、bの積を表示
    elif op == "*":
        print(int(a * b))
    # opが"/"の場合はa、bの商を表示
    elif op == "/":
        print(int(a / b))
    else:
        # それ以外の時は何もしない
        pass

この条件分岐は別解でも同様です。

while True:
    table = input().split()
    a = int(table[0])
    op = table[1]
    b = int(table[2])
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break
    # opが"+"の場合はa、bの和を表示
    elif op == "+":
        print(int(a + b))
    # opが"-"の場合はa、bの差を表示
    elif op == "-":
        print(int(a - b))
    # opが"*"の場合はa、bの積を表示
    elif op == "*":
        print(int(a * b))
    # opが"/"の場合はa、bの商を表示
    elif op == "/":
        print(int(a / b))
    else:
        # それ以外の時は何もしない
        pass

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

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → str関数に当てはめstr型に変換 → a, op, bに設定
    a, op, b = map(str, input().split())
    # 計算できるようにint型に変換する
    a = int(a)
    b = int(b)
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break
    # opが"+"の場合はa、bの和を表示
    elif op == "+":
        print(int(a + b))
    # opが"-"の場合はa、bの差を表示
    elif op == "-":
        print(int(a - b))
    # opが"*"の場合はa、bの積を表示
    elif op == "*":
        print(int(a * b))
    # opが"/"の場合はa、bの商を表示
    elif op == "/":
        print(int(a / b))
    else:
        # それ以外の時は何もしない
        pass

別解は以下です。

# if文の条件式に当てはまるまでループ処理を続ける
while True:
    # input().split()で複数個の文字列を取得 → 変数に代入(リストとして設定)
    table = input().split()
    a = int(table[0])
    op = table[1]
    b = int(table[2])
    # opが"?"の場合にbreak文で処理を終了
    if op == "?":
        break
    # opが"+"の場合はa、bの和を表示
    elif op == "+":
        print(int(a + b))
    # opが"-"の場合はa、bの差を表示
    elif op == "-":
        print(int(a - b))
    # opが"*"の場合はa、bの積を表示
    elif op == "*":
        print(int(a * b))
    # opが"/"の場合はa、bの商を表示
    elif op == "/":
        print(int(a / b))
    else:
        # それ以外の時は何もしない
        pass
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

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

コメント

コメントする

目次