0

我已经编程了大约 1 周。

我正在编写一个简单的程序来循环遍历这个 List 并每次将变量递增 1。

我收到错误:列表索引超出范围。

我相信这是因为我的指数值太高了?但是我在它变得太高之前重置索引值:

        index += 1
        index and 7

一旦它变成> = 8,逻辑AND应该将索引重置为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

andAND在 python 中是布尔值,&用于按位与:

index &= 7  #index = index & 7

由于整数是不可变的,您应该将结果重新分配给index.

于 2013-09-21T17:13:40.577 回答
1

我想你想要

&

而不是

and

看看这个资源:http ://www.tutorialspoint.com/python/python_basic_operators.htm

祝你学习顺利:)

于 2013-09-21T17:15:14.970 回答
1

我建议你使用:

if index >= 8:
    index = 0

或者

index = index % 8 

或使用就地模运算符的替代方法

index %= 8

正如 Python 之禅中所说(打开 Python 窗口并输入import this),可读性很重要。这些选项比您的代码的更正版本更具可读性,and而是使用按位,因此您应该改用它们。

于 2013-09-21T17:21:12.280 回答
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 回答