質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1363閲覧

Pythonにおけるelif,ifの違いについて

unkoman

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/04/03 23:55

前提・実現したいこと

前提
プログラミング勉強始めたばかりです
Pythonさわりはじめたばかりです
versionはPython 3.5.2になります
forループで文字列の変換をしていたらわからないことがあったので教えて下さい

実現したいこと
文字列を置換したい
if,eiifの違いに関する理解
文字列置換に対する順番の理解

ソースコード1は狙い通りに文字が狙い通りに数字に置き換わったときのソースコードになります。
ソースコード2では置換する前の文字が数字の後ろに付いてしまいました。
ソースコード3では置換後の文字列が想定と逆順の出力担ってしまいました。

以上の違いは感覚的には分かるのですが、なぜこのような違いが起こるか解説していただけると助かります。

該当のソースコード1

Python

1s = 'AEGIGOEHHH' 2s_mod = '' 3for i in range(len(s)): 4 c = s[i] 5 if c == 'A': 6 s_mod = s_mod + '1' 7 elif c == 'E': 8 s_mod = s_mod + '2' 9 elif c == 'G': 10 s_mod = s_mod + '3' 11 elif c == 'I': 12 s_mod = s_mod + '4' 13 elif c == 'O': 14 s_mod = s_mod + '5' 15 else: 16 s_mod = s_mod + c 17print(s_mod)#1234352HHH 18

該当のソースコード2

Python

1s = 'AEGIGOEHHH' 2s_mod = '' 3for i in range(len(s)): 4 c = s[i] 5 if c == 'A': 6 s_mod = s_mod + '1' 7 if c == 'E': 8 s_mod = s_mod + '2' 9 if c == 'G': 10 s_mod = s_mod + '3' 11 if c == 'I': 12 s_mod = s_mod + '4' 13 if c == 'O': 14 s_mod = s_mod + '5' 15 else: 16 s_mod = s_mod + c 17print(s_mod)#1A2E3G4I3G52EHHH

該当のソースコード3

Python

1 2s = 'AEGIGOEHHH' 3s_mod = '' 4for i in range(len(s)): 5 c = s[i] 6 if c == 'A': 7 s_mod = '1' + s_mod 8 elif c == 'E': 9 s_mod = '2' + s_mod 10 elif c == 'G': 11 s_mod = '3' + s_mod 12 elif c == 'I': 13 s_mod = '4' + s_mod 14 elif c == 'O': 15 s_mod = '5' + s_mod 16 else: 17 s_mod = c + s_mod 18print(s_mod)#HHH2534321

補足情報(FW/ツールのバージョンなど)

Python 3.5.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

pythontutorでコードの実行状態を見ることもできます。ご参考までに。

pythontutor

投稿2018/04/04 00:26

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unkoman

2018/04/04 00:39

おお、これは見やすい。有益な情報ありがとうございます!!!
guest

0

ベストアンサー

elifは直前のifブロックの条件を満たさなかった場合のみ条件判定されます。それに対し、ifを複数並べると、直前のifブロックの条件を満たすかに関係なく、条件判定が行われます。
そのため、ソースコード2の場合、必ずc=='O'であるかの条件判定が行われることになり、c=='O'でない場合は全てelseブロック内の処理が実行され、置換する前の文字が出力されます。

ソースコード3は、単にs_modに文字を追加する処理が逆になっています。既存のs_modの前に変換した数字を追加する処理になっているので、出力が逆順になります。

投稿2018/04/04 00:09

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unkoman

2018/04/04 00:23

たしかによく見たら、Oのところだけ、変換後に数字の後ろに文字がついてませんね。理解できました、ありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問