##########
x = 0
cities = ['大阪', '東京', '名古屋', '福岡']
numbers = [0,1]
for i in range(len(cities)):
for num in numbers:
if cities[i+num].startswith('大'):
break
x = x + 1
print(x)
##########
上記のコードだと、IndexErrorが出ます。
1つ目のforループでiが一番大きい値(3)をとり、かつ2つ目のforループでnumが1をとると、cities[i+num]はcitiesのインデックス4を見ようとするが、そんなものはないからです。
しかし、if notに変えた、
##########
x = 0
cities = ['大阪', '東京', '名古屋', '福岡']
numbers = [0,1]
for i in range(len(cities)):
for num in numbers:
if not cities[i+num].startswith('大'):
break
x = x + 1
print(x)
##########
というコードだと、エラーが出ません。
なぜエラーが出ないのでしょうか?
※なぜか半角スペースだとインデントが表示上反映されなかったので、全角スペースでインデントしてます。
1つ目のforループでiが一番大きい値(3)をとり、かつ2つ目のforループでnumが1をとると、cities[i+num]はcitiesのインデックス4を見ようとするが、そんなものはないからです。
ここに書いてあるままが、if not に変えたときにエラーが出ない理由です。
二重のループで、i と num がどのように変わっているかを print してみると分かると思います。
# your code goes here x = 0 cities = ['大阪', '東京', '名古屋', '福岡'] numbers = [0,1] for i in range(len(cities)): for num in numbers: print(i,num) # i と num を print してみる if not cities[i+num].startswith('大'): break x = x + 1 print(x)
標準出力。
(0, 0) (0, 1) (1, 0) # 東京、名古屋、福岡には「大」がないから、 (2, 0) # num == 0 で内側のループを抜けてしまう (3, 0) 4