問題集の答えを見てもこのコードと同じものが正とされています。何が間違っていたのでしょうか
本当に? それならその書籍の出版社に問い合わせてください。
あり得ない間違いをしています。
まず、IndentationErrorは、公式によると、
正しくないインデントに関する構文エラーの基底クラスです
となっています。
で、問題のコードを見ると、
Python
1import random
2my_var = random.randint(0, 100)
3
4if my_var >= 80:
5 print(my_var*2)
6elif my_var<50:
7 print(my_var/2)
8 else: #この行に対してエラーが出ています。
9 print(0)
ですね。
では、このelseはなんの意味でしょうか?
おそらく、「my_var≧80でもなく、my_var<50でもないなら」だと思います。
ということは、
Python
1if my_var >= 80: # <- これや
2 print(my_var*2)
3elif my_var<50: # <- これ
4 print(my_var/2)
と同列のはずです。(同列とは言わないかもしれませんが、意味的に…)
Pythonは、インデントがモノをいう言語です。
Python
1a = 1
2if a == 1:
3 a = 1 # <- (1)
4b = 2 # <- (2)
となっていたら、if文の対象処理は(1)だけです。
このようにPythonではインデントによってブロックを表現します。
同じインデント数で一つのブロックと見なします。
まずはコードを読んでみましょう。
コードを読むコツは『一行レベルで、その行が何をしているかを考えながら読む』です。
Python
1# randomをインポートする
2import random
3# 乱数生成?
4my_var = random.randint(0, 100)
5
6# 乱数が 80以上( my_var ≧ 80 )なら
7if my_var >= 80:
8 # 二倍にして出力
9 print(my_var*2)
10# そうじゃなくて、乱数が 50未満なら( my_var < 50 )
11elif my_var<50:
12 # 二分の一して出力
13 print(my_var/2)
14 // 二分の一でないなら...??????
15 else: #この行に対してエラーが出ています。
16 // 0を出力
17 print(0)
これを疑似コードとして抜き出してみましょう。
1. 乱数生成
2. 乱数が 80以上なら
2.1. 二倍にして出力
3. そうじゃなくて、乱数が50未満なら
3.1. 二分の一にして出力
3.1.1. 二分の一でないなら....????
3.2. 0を出力
という風になっています。
ただし、(3.1.1)の解釈は間違っています。コンパイラやインタプリタとかのような機械は文脈から推測するという芸当はできません。
なのでここで解釈できずに、「ん???? インデントがおかしくないか? これだと解釈できないんだが……」という風に言っているのです。
これがIndentationError。(他の場合もあるにはあるが、今回の場合)
今回の場合、(2)や(3)と同列?なので、
Python
1import random
2my_var = random.randint(0, 100)
3
4if my_var >= 80:
5 print(my_var*2)
6elif my_var<50:
7 print(my_var/2)
8else: #この行に対してエラーが出ています。
9 print(0)
のように修正すればいいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/05 13:08
2021/10/05 13:31
2021/10/06 14:04