本サイト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
解説
以下のように解いていきます。
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
コメント