0

プログラミングを始めて約1週間。

このリストをループし、変数を毎回 1 ずつインクリメントする簡単なプログラムを作成しています。

エラーが表示されます: リスト インデックスが範囲外です。

これは、インデックス値が高すぎるためだと思いますか? しかし、インデックス値が高くなりすぎる前に、次のようにインデックス値をリセットしています。

        index += 1
        index and 7

論理 AND は、>= 8 になったら index を 0 にリセットする必要がありますね。

この場合、何が悪いのかわかりません。私のコードを見てください:

lookups = [0,1,2,3,4,5,6,7]
index = 0
dword_C06748 = 0

count = 0

offset1 = 0
rn_offset = 0


def next_value():
    global lookups, index, count
    while count < 18:
        lookups[index] += 1
        index += 1
        index and 7
        count += 1

next_value()
4

5 に答える 5

3

index and 7リセットされませんindex。保存されないブール値に評価されるだけです。したがって、このステートメントは効果がありません。

index = index % 8代わりに使用してください。これにより、インデックスは常に 8 未満になります。

または、使用できます

 index = index % len(lookups)
于 2013-09-21T17:18:48.427 に答える
2

andANDPython ではブール値であり&、ビットごとの ANDに使用します。

index &= 7  #index = index & 7

整数は不変であるため、結果を に再割り当てする必要がありますindex

于 2013-09-21T17:13:40.577 に答える
1

以下は、コードの出力をよりPython的な方法で複製すると思います。

lookups = [0,1,2,3,4,5,6,7]

def next_value():
    # xrange returns the value 0, 1, ... 17
    for count in xrange(18):   # or just range if you are using py3
        # the mod makes sure the index is always less than 8
        lookups[count % 8] += 1

next_value()
于 2013-09-21T17:24:42.850 に答える
1

次のいずれかを使用することをお勧めします。

if index >= 8:
    index = 0

また

index = index % 8 

またはインプレースモジュロ演算子を使用した代替

index %= 8

Zen of Python (Python ウィンドウを開いて を入力import this) にあるように、読みやすさは重要です。これらのオプションは、代わりにビット単位を使用して、コードの修正バージョンよりもはるかに読みやすいため、and代わりに使用する必要があります。

于 2013-09-21T17:21:12.280 に答える
1

私はあなたが欲しいと思います

&

それよりも

and

このリソースをご覧ください: http://www.tutorialspoint.com/python/python_basic_operators.htm

そして、頑張って学習してください:)

于 2013-09-21T17:15:14.970 に答える