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

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

新規登録して質問してみよう
ただいま回答率
85.47%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

1318閲覧

Python elseが効きません

hitugi

総合スコア13

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/11 00:19

編集2020/09/11 00:27

Pythonにおける、ifからelseにかけての構成について質問です。
入力の0から3までは認識され、それぞれ表示されます。
それ以外の数字を入力したときのelseがエラーになり、効いていません。
elseが作動しない理由がわかりません。
エラー画面はこちらです。
イメージ説明

誤りの箇所と、正常なコードをご指摘ください。

class Mass: def __init__(self, name, price): self.name = name self.price = price M1 = Mass('サンドイッチ', 500) M2 = Mass('チョコケーキ', 400) M3 = Mass('コーヒー', 300) M4 = Mass('オレンジジュース', 200) menu_items = [M1, M2, M3, M4] odr =int(input('入力を')) CC = menu_items[odr] if odr == 0: print('選択されたメニュー: ' + CC.name) elif odr == 1: print('選択されたメニュー: ' + CC.name) elif odr == 2: print('選択されたメニュー: ' + CC.name) elif odr == 3: print('選択されたメニュー: ' + CC.name) else: print('入力は0から3までです')

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

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

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

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

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

y_waiwai

2020/09/11 00:23

エラーになるというなら、エラーメッセージを提示しましょう
guest

回答4

0

例えばこうですかね。

Python

1try: 2 CC = menu_items[odr] 3 msg = '選択されたメニュー: ' + CC.name 4except IndexError: 5 msg = '入力は0から3までです' 6print(msg)

投稿2020/09/11 00:28

tachikoma

総合スコア3601

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

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

jeanbiego

2020/09/11 00:39

そっか、try文の方が適切でした。 inputもtryに入れてしまえば、数値以外の入力も対応できますね。
guest

0

ベストアンサー

質問文には、エラー文を(全文)記載するようにしてください。

---> 14 CC = menu_items[odr] 15 16 if odr == 0: IndexError: list index out of range

こちらで確認しましたが、odrが0から3以外だとCC = menu_items[odr]でIndexErrorが出ます。この文をたとえばif・elif文の中に入れるなどすれば回避できます。

python3

1class Mass: 2 def __init__(self, name, price): 3 self.name = name 4 self.price = price 5 6M1 = Mass('サンドイッチ', 500) 7M2 = Mass('チョコケーキ', 400) 8M3 = Mass('コーヒー', 300) 9M4 = Mass('オレンジジュース', 200) 10 11menu_items = [M1, M2, M3, M4] 12 13odr =int(input('入力を')) 14if odr in [0,1,2,3]: 15 CC = menu_items[odr] 16 print('選択されたメニュー: ' + CC.name) 17else: 18 print('入力は0から3までです')

投稿2020/09/11 00:28

jeanbiego

総合スコア3966

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

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

hitugi

2020/09/11 00:30

ありがとうございます。 解決できました。
guest

0

これはelseが効かないと言うよりも、範囲外の値を入れたためにエラーになってしまってるってことですね(そもそもif文に到達していない)

CC = menu_items[odr]

menu_itemsの要素数をこえてアクセスしようとしたので、エラーになってます
この行の前に、odr がmenu_itemsの要素数以内かどうかのチェックを入れましょう

投稿2020/09/11 00:31

y_waiwai

総合スコア87791

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

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

0

修正依頼にも書かれていますが、エラーメッセージを省略せずに提示してください。

当てずっぽうですが、エラーが出ているのはelseではなく、

Python

1CC = menu_items[odr]

ではないでしょうか?
0から3以外の数字が入力されたときにこの行がどうなるのか考えてみてください。

投稿2020/09/11 00:31

javahack

総合スコア1088

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問