リストからアイテムを削除することはできませんが、明らかにそこにあります

イルビン・ペレス

私はPythonで退屈なものを自動化するを読んでいて、現在ランダムなクイズを生成するプロジェクトで立ち往生しています。私は本自体があなたにそれをする方法の例を与えるという事実を知っています、しかし私はいつもそれを自分でやってみるようにしています。しかし、今回は、スクリプトが機能しない理由を説明することはできません(関連するコード全体を貼り付けて、皆さんが自分で試してみることができるようにします)。

私のコードがどのように機能するかについての簡単な説明:最初に、いくつかのものを開いていくつかのファイル(ポイントではない)に書き込み、次に辞書の「ペア」から変数「状態」にキーを格納します。リスト。「状態」の項目の順序をシャッフルした直後に、各テストの「状態」の順序が異なります。次のforループ(for j instates [:] :)リストの「states」を変更してループに影響を与えないようにするため、「states」だけでなく「states [:]」を使用します。次に、別のループを追加して、クイズの各質問のオプションを生成します。「states [:]」の「j」項目を「states」から削除したので、「states [:]」は変更されず、「states」の項目は1つ少なくなります(正解です)。

import random

pairs = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver',
'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 'Illinois':
'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansas':
'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 'Maine':
'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 'Michigan':
'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 'Missouri':
'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 'Nevada':
'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton',
'New Mexico': 'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia',
'West Virginia': 'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}

alternatives = [ "A", "B", "C", "D"]
for i in range(1): #each quiz
    quiz = open("Quiz number %s.txt" % (i + 1), "w")
    quiz.write(" "*16 + "STATE CAPITALS QUIZ\nTest %s" % (i + 1) + "\n")
    quiz_answers = open("Answers for Quiz %s.txt" % (i + 1), "w")

    states = list(pairs.keys())
    random.shuffle(states)

    for j in states[:]: #each question
        options = []
        quiz.write("\n%s" % (states[:].index(j) + 1) + ". What is the capital of " + j + "?\n")
        quiz_answers.write("%s" % (states[:].index(j) + 1) + ". " + pairs[j] + "\n")

        options.append(pairs[j]) #adds correct capital to options
        print(j)  #I added this line to see if the object j was a string
        print(states) #I added this line to see if states was indeed a list

        for k in range(3):
            if j in states: #finally, i added an if statement to see if the item j was in the list states
                print("fk") # and it does check out everytime I run the code
            states.remove(j)
            options.append(pairs[states[k]])
            pass
        random.shuffle(options)

これはまさに私のコードがどのように見えるかです。

ここで、問題は3番目のforループ(range(3)のfor k)にあります。アイテムを削除しようとしましたが、プログラムはエラーをスローします。正確には、「ValueError:list.remove(x):x notinlist」です。.remove()の直前にifステートメントを配置すると、コードを実行するたびにそのコンテンツが実行され、「fk」が出力されます。つまり、削除しようとしているオブジェクトは、実際には試行しているリストに属しています。から削除します。

誰かが私にこれが起こっている理由と、コードをあまり変更せずに(もちろん必要でない限り)それを修正する方法を説明してくれるといいのですが。コピーモジュールをインポートしてディープコピーを使ってみましたが、[:]を使ったのと同じだと思いますので、とにかく助けていただければ幸いです!ありがとうございました

kaya3

問題は、同じ要素を3回削除しようとしていることのようです。

        for k in range(3):
            if j in states:
                print("fk")
            states.remove(j)
            options.append(pairs[states[k]])
            pass

このループには、の値を変更するものがないことに注意してくださいjそう:

  • 最初の反復で、jがリストにあり、印刷してfkj正常に削除します。
  • 2回目の反復でjはすでに削除されているため、何も出力されValueErrorず、もう存在しないためにが発生します。
  • ValueErrorはすでに発生しているため、3回目の反復はありません

論理的には、j3回削除しても意味がありませんstates.remove(j)プログラムの実行に適した前または後のいずれかでステートメントをループの外に移動する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラス属性は明らかにそこにありますが、Pythonはそれを見つけることができません

分類Dev

Python3:リストからアイテムを削除できません。リストの要素をスライスすることはできません

分類Dev

そこからアイテムを削除するときにリストビューを更新します

分類Dev

Angularでは、ビューページからアイテムを削除する必要がありますが、Firebaseデータベースからは削除する必要はありません。これについて何か提案はありますか?

分類Dev

崇高なテキスト3は明らかにそこにあるテキストを見つけることができません

分類Dev

リンクリストにアイテムが含まれているかどうかをテストするときに、forループから手動で早期に中断することは意味がありますか?

分類Dev

Webサイトからの公開リクエストに応じてアイテムをレンダリングすることを許可できますが、ブラウザーで直接表示することはできませんか?

分類Dev

Azureイメージにuriがありません-それから自動スケールを作成することはできません

分類Dev

INDEXを参照せずにリストからアイテムを削除することは可能ですか?

分類Dev

アプリをChromeウェブストアにアップロードできません-「このアイテムはアプリではありません。マニフェストからアプリセクションを削除してください。」

分類Dev

[Powershell / SharePoint]誰かが私のスクリプトを確認して7日より古いSharepointリストアイテムを削除できますか?「Null配列にインデックスを付けることができません」を取得する

分類Dev

テキストエリアから空白を削除します。なぜそこにあるのですか?

分類Dev

Typescript:型システムは明らかに真実と思われることを証明できません

分類Dev

キーストアエントリが見つかりません。しかし、私はそれがそこにあることを知っています

分類Dev

ファイルが明らかにそこにあるにもかかわらず、「そのようなファイルまたはディレクトリはありません」を取得する

分類Dev

Pythonでクエリセットのアイテムを削除できますが、データベースでそのアイテムを削除することはできませんか?

分類Dev

Pythonのリストからゼロを完全に削除することはできません

分類Dev

ある関数から別の関数に文字列とリストを返すことはできません

分類Dev

私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

分類Dev

「rssの価値はありません」、それは明らかにそこにありますが

分類Dev

そのリストから削除されたばかりのアイテムから選択リストの名前を取得することは可能ですか

分類Dev

エラー:LocalStorageからアイテムを取得するときに「タイプ '文字列| null'を割り当てることができません...」

分類Dev

ユーザーがページを変更したときに、フリップビューからアイテムを削除したい。何か私にできることはありますか?

分類Dev

Pythonにtkinterエントリボックスがありますが、そこからコードに入力を取得できませんか?

分類Dev

次の列に折り返しながら、グリッドアイテムを上から下に並べ替えることはできますか?

分類Dev

JsonProviderに、名前付きリストではなく、アイテムの配列としてこれを解析させる方法はありますか?

分類Dev

Scalaは、パスに依存する型が等しいことを証明できませんが、明確にする必要がありますか?

分類Dev

明らかに必要な場合でも、冷却ファンが高速に達することはありません

分類Dev

明らかに必要な場合でも、冷却ファンが高速に達することはありません

Related 関連記事

  1. 1

    クラス属性は明らかにそこにありますが、Pythonはそれを見つけることができません

  2. 2

    Python3:リストからアイテムを削除できません。リストの要素をスライスすることはできません

  3. 3

    そこからアイテムを削除するときにリストビューを更新します

  4. 4

    Angularでは、ビューページからアイテムを削除する必要がありますが、Firebaseデータベースからは削除する必要はありません。これについて何か提案はありますか?

  5. 5

    崇高なテキスト3は明らかにそこにあるテキストを見つけることができません

  6. 6

    リンクリストにアイテムが含まれているかどうかをテストするときに、forループから手動で早期に中断することは意味がありますか?

  7. 7

    Webサイトからの公開リクエストに応じてアイテムをレンダリングすることを許可できますが、ブラウザーで直接表示することはできませんか?

  8. 8

    Azureイメージにuriがありません-それから自動スケールを作成することはできません

  9. 9

    INDEXを参照せずにリストからアイテムを削除することは可能ですか?

  10. 10

    アプリをChromeウェブストアにアップロードできません-「このアイテムはアプリではありません。マニフェストからアプリセクションを削除してください。」

  11. 11

    [Powershell / SharePoint]誰かが私のスクリプトを確認して7日より古いSharepointリストアイテムを削除できますか?「Null配列にインデックスを付けることができません」を取得する

  12. 12

    テキストエリアから空白を削除します。なぜそこにあるのですか?

  13. 13

    Typescript:型システムは明らかに真実と思われることを証明できません

  14. 14

    キーストアエントリが見つかりません。しかし、私はそれがそこにあることを知っています

  15. 15

    ファイルが明らかにそこにあるにもかかわらず、「そのようなファイルまたはディレクトリはありません」を取得する

  16. 16

    Pythonでクエリセットのアイテムを削除できますが、データベースでそのアイテムを削除することはできませんか?

  17. 17

    Pythonのリストからゼロを完全に削除することはできません

  18. 18

    ある関数から別の関数に文字列とリストを返すことはできません

  19. 19

    私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

  20. 20

    「rssの価値はありません」、それは明らかにそこにありますが

  21. 21

    そのリストから削除されたばかりのアイテムから選択リストの名前を取得することは可能ですか

  22. 22

    エラー:LocalStorageからアイテムを取得するときに「タイプ '文字列| null'を割り当てることができません...」

  23. 23

    ユーザーがページを変更したときに、フリップビューからアイテムを削除したい。何か私にできることはありますか?

  24. 24

    Pythonにtkinterエントリボックスがありますが、そこからコードに入力を取得できませんか?

  25. 25

    次の列に折り返しながら、グリッドアイテムを上から下に並べ替えることはできますか?

  26. 26

    JsonProviderに、名前付きリストではなく、アイテムの配列としてこれを解析させる方法はありますか?

  27. 27

    Scalaは、パスに依存する型が等しいことを証明できませんが、明確にする必要がありますか?

  28. 28

    明らかに必要な場合でも、冷却ファンが高速に達することはありません

  29. 29

    明らかに必要な場合でも、冷却ファンが高速に達することはありません

ホットタグ

アーカイブ