まず結論

TypeError: unsupported operand type(s) は、演算子に合わない型を使ったときに出ます。

result = "3" - 1

"3" は文字列で、1 は数値です。
文字列から数値を引くことはできないため、エラーになります。

こんなときに読む記事です

次のようなエラーで止まった人向けです。

TypeError: unsupported operand type(s) for -: 'str' and 'int'

意味は「- に対して、strint の組み合わせは使えません」です。

絵で見るなら

演算子は、左右の材料を受け取る道具として見ると分かりやすいです。

+- の左右に、どんな種類の値が置かれているかを確認します。

道具に合わない材料を渡すと、Pythonは「この組み合わせでは使えない」と止まります。

左右の型を見る

エラー文には、使えなかった型が書かれます。

'str' and 'int'

str は文字列、int は整数です。

見た目が数字でも、クォートで囲まれていれば文字列です。

"3"

これは数値ではなく文字列です。

数値として計算したいとき

文字列を数値として使いたいなら、int()float() で変換します。

result = int("3") - 1
print(result)

この場合は 2 が表示されます。

文字としてつなげたいとき

反対に、文字としてつなげたいなら、数値を str() にします。

message = "残り" + str(3) + "個"
print(message)

str(3) にすると、数値の 3 を表示用の文字列として扱えます。

読み方のコツ

unsupported operand type(s) が出たら、まず演算子を探します。

"3" - 1

次に、左右の値の種類を見ます。
「計算したいのか」「文字としてつなげたいのか」を決めて、必要なら変換します。

手を動かすミニ練習

次のコードを動かして、エラーを確認してみましょう。

print("10" - 2)

次に、int("10") に変えて、動く形を確認します。