roimin1
@roimin1

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

標準入力されたデータ型ごとに足し算、文字列の連結で切り替えたい

解決したいこと

入力される値
a
b

aやbはそれぞれ、アルファベットの大文字1文字 あるいは1桁の数値のどちらかです
aとbがともに数値である場合はそれぞれ整数とみなし、a+bの値を、それ以外の場合はa,bを左から順に結合させた文字列を出力したい。

入力例1
11
8

出力例1
19

入力例2
D
M

出力例1
DM

発生している問題・エラー

入力値がstrならば文字を連結しているが
入力値がintだと数字を文字として連結している。

自分で試したこと

if文で条件分岐しました。

a =input()
b=input()

if isinstance(a, int) and isinstance(b, int):
    print(int(a)+int(b))
else:
    print(str(a)+str(b))
a =input()
b=input()

if type(a) == int and type(b) == int:
    print(int(a)+int(b))
else:
    print(str(a)+str(b))
a =input()
b=input()

if type(a) == str and type(b) == str:
    print(str(a)+str(b))
else:
    print(int(a)+int(b))
0

1Answer

input関数の返却値の型は文字列となり、仮に入力値が整数のフォーマットでも文字列と判定されます!(isinstanceなどを使っても文字列と判定されます)

そのため、try-exceptを使って「もし整数に型変換できれば整数変換してその後足し算をする」「もしエラーになる(整数に変換できない値が入力されている)場合にはそのまま文字列として連結する」みたいな分岐をすると想定された挙動になると思います!

a = input()
b = input()

try:
    a_int = int(a)
    b_int = int(b)
    result = a_int + b_int
except Exception:
    result = a + b

print('結果の値:', result)

※try-exceptの代わりに文字列のメソッドのisdecimalなどを使ってもいいかもしれません。

1Like

Comments

  1. @roimin1

    Questioner

    例外処理を応用することで条件を分岐させると期待したデータ型を出力できるということですね!
    試した結果、挙動が上手くいきました。
    ありがとうございます。

Your answer might help someone💌