answer8_2.py

sentence = input("文章を入力して下さい:")

# XXX 以下ではsentenceに「★」が含まれないと仮定している
s1 = sentence.replace("、", "★")
s2 = s1.replace("。", "、")
replaced = s2.replace("★", "。")
print(replaced)

# 章末問題 8章【2】解答例
#
# いきなり「、」を「。」に置き換えるなどしてしまうと、
# 「、」と「。」がすべて「。」になってしまって
# うまくいかないので、一度「、」を「★」にしてから、
# 「。」を「、」にし、「★」を「。」にしています。
#
#   、→★
#   。→、
#   ★→。
#
# このやり方は、元の文字列に入っていない文字を使う必要があります。
# この解答例では、元の文字列に「★」が入っているとうまくいきません。
#
# 元の文字列に入っていない文字がわからない場合には、
# 以下のように1文字ずつ見て置き換える方法が使えます。
# 文字列をfor文でイテラブルとして扱うと1文字ずつ得られるのを使っています。
#
#   sentence = input("文章を入力して下さい:")
#   s = ""
#   for c in sentence:
#       if c == "、":
#           s += "。"
#       elif c == "。":
#           s += "、"
#       else:
#           s += c
#   print(s)
#
# また、少しとんちのようですが、inputはキーボードから1行を読んで
# 返すので、その結果には改行文字(\n)は含まれません。
# そのため、最初のコードの "★" を "\n" にすると、
# どんな入力に対してもうまく動きます。
#
# また、本書では説明しませんが、文字列についての
# str.maketransとtranslateというメソッドを使うと、
# 以下のようによりシンプルに実現できます。
#
#   table = str.maketrans("、。", "。、")
#   sentence = input("文章を入力して下さい:")
#   print(sentence.translate(table))