82365


リストに母音を指定し、単語に含まれている母音を順次出力できるようにしました。出力される母音の重複を避けるため、printによって出力した母音はdel関数でリストから消去しました。以下のコードを試してみたところ、うまくいく場合とうまくいかない場合があります。

  * うまくいった例：  
aaaaaa（aと出力された）,python（oと出力された）

  * うまくいかなかった例：  
aaaiiiiii（aiiiと出力された）

エラー時には以下のメッセージが表示されましたが、何が原因かわからないです。

みなさんの力を借りたいです。よろしくお願いします。

**エラーメッセージ:**

[code]

    del found[2]
    IndexError: list assignment index out of range
    
[/code]

**ソースコード:**

[code]

    word=input("単語を入力してください")
    found=["a","e","i","u","o"]
    
    for w in word:
        if w in found:
            print(w)
            if w=="a":
                del found[0]
    
            elif w=="e":
                del found[1]
            elif w=="i":
                del found[2]
            elif w=="u":
                del found[3]
            elif w=="o":
                del found[4]
            else:
                pass
                
        else:
            pass
    
[/code]


CC BY-SA 4.0
2021-09-09T01:25:54.980
82363
2021-09-09T02:44:21.097
2021-09-09T01:37:56.823
3060
48122
question
python
python エラー　単語を入力し、そこに含まれる母音を出力したい


> エラー時には以下のメッセージが表示されましたが、何が原因かわからないです。

delで削除すると、要素の位置が変わってしまい、2回目以降の`del
found[2]`で'i'ではない別の要素が削除されてしまいます。続けているうちにfoundの範囲外の要素を削除しようとしてエラーが発生します。

具体的な動きは次のようになります。

  * 最初にaが見つかったとき`del found[0]`が実行され、foundの値が`['e', 'i', 'u', 'o']`となります。
  * 次にiが見つかったとき`del found[2]`が実行され、foundの値が`['e', 'i', 'o']`となりますが'i'の要素は残ったままです。
  * 次に'i'が見つかったときfoundは`['e', 'i']となります。 その次に'i'が見つかったとき、`del found[2]`が実行されますが、found[2]は存在しないため、エラーが発生します。

delの代わりに`found.remove(w)`を実行すれば問題は解消します。


CC BY-SA 4.0
2021-09-09T02:44:21.097
82365
2021-09-09T02:44:21.097
35558
82363
answer