Pythonのif文に関する質問です。


##########
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人10回まで
  • 登録:
  • 終了:2016/10/06 09:30:12
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

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
id:midnightseminar

理解しました。ありがとう御座います。

2016/10/06 09:29:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません