95785
listが二つあって、それぞれをdatalist1、datalist2としています。今私は、while文を使ってdatalist2[i]の中の要素をhとしたときに,datalist[h]を得ようとしています。しかし、このようにすると、"list
indices must be integers or slices, not str"と返されます。どうすればよいでしょうか

```

    i = 0
    while i<100:
      i = i+1
      h = datalist2[i]
      rot1_perm = datalist[h[1]]
      rot2_perm = datalist[h[4]]
      rot3_perm = datalist[h[7]]
      enigma = Enigma(plane, alphabet, plug_perm, ref_perm, rot1_perm, rot2_perm, rot3_perm)
      decrypt = enigma.get_text(cipher)
      if 'ABC' in decrypt == True:
        C.append(decrypt)
    
```
CC BY-SA 4.0
2023-07-27T13:52:29.690
95782
2023-07-28T04:35:20.623
2023-07-28T04:35:20.623
59259
59259
question
python python3
list indexがうまく使えません
スタックオーバーフローへようこそ！

ご質問のコードを実行すると、未定義の変数が存在するため提示されたエラーとは異なるエラーが発生します。  
変数のスコープなど、pythonの文法について混乱しているのかもしれません。

まずは下記についてご確認ください。

  * 23行目 
    * 引数の`rot1_perm`～`rot3_perm`が使用されていません。  
`self.rot1_perm = rot1_perm`のようにインスタンス変数に値を代入しないと、下記の40行目からのコードが動作しません。

  * 40行目-42行目 
    * `rot1_perm`～`rot3_perm`が未定義です。  
`self.rot1_perm`などの間違いではありませんか？

  * 94行目 
    * `plane`が未定義です。  
82行目の`alphabet = 'ABCDE'`のように`plane`を定義し忘れていないかご確認ください。

  * 109行目 
    * `enigma`が未定義です。  
`Checking_enigma`関数の中で`enigma`のインスタンスを作成していますが、関数の中で宣言された変数は関数の外で使えません。  
ところで`Checking_enigma`関数は1685039回呼び出されるので、`enigma`のインスタンスも1685039回作成されます。  
109行目で必要なインスタンスは1個だけのようですので、本来意図しているコーディングについて見直してみてください。

現在の質問では回答者が推測する部分が多く、`file.txt`の中身も分からないので明確なアドバイスがしにくいです。  
`file.txt`の先頭数行でも質問に追記していただけるとより適切な回答が得られる場合があります。  
[良い質問をするには？](https://ja.stackoverflow.com/help/how-to-
ask)、[再現可能な短いサンプルコードの書き方](https://ja.stackoverflow.com/help/minimal-
reproducible-example)もご参照ください。

いきなり質問が分かりにくいやら「スコープ」やら「インスタンス」やら言われても困るかもしれませんが、もし手元に学習用のテキストやきちんと動作する変更前のコードがあれば、そこに立ち返ってキーワードを理解しつつ少しずつ改修していくのも問題解決の手法のひとつです。  
がんばってください。
CC BY-SA 4.0
2023-07-27T23:49:03.770
95785
2023-07-27T23:49:03.770
9820
95782
answer