Python 枚举()中的奇怪行为

Python 枚举()中的奇怪行为,python,python-2.7,enumerate,Python,Python 2.7,Enumerate,所以我在这个PPM文件中读取,逐行读取,在这里和那里处理它,然后将它写出新行到另一个文件中。我试图制作一个最小的工作示例来重现这种行为,但当我编写一个最小的示例时,奇怪的行为消失了——但我无法找出这其中的哪一部分导致了这种奇怪的行为。下面是完整的代码 def flip_horizontal(infile, outfile): with open(os.getcwd() + '\\' + infile, 'r') as f: outfile = open(os.getcwd() + '\\

所以我在这个PPM文件中读取,逐行读取,在这里和那里处理它,然后将它写出新行到另一个文件中。我试图制作一个最小的工作示例来重现这种行为,但当我编写一个最小的示例时,奇怪的行为消失了——但我无法找出这其中的哪一部分导致了这种奇怪的行为。下面是完整的代码

def flip_horizontal(infile, outfile):
with open(os.getcwd() + '\\' + infile, 'r') as f:
    outfile = open(os.getcwd() + '\\' + outfile, 'w')
    rgbCounter = 0
    for i, line in enumerate(f):
        if i < 3:
            outfile.write(line)
        if i == 1:
            width = int(line.split()[1])
            lineList = [None for i in range(width*3)]
            if width > 1024:
                print "Image size too large:  Buffer can only store 1024 \
                    pixels at a time.  Aborting negate_red."
                break
        if i > 2:
            print line
            for integer in line.split():
                if rgbCounter%3 == 0:
                    lineList[width*3-rgbCounter-3] = integer
                elif rgbCounter%3 == 1:
                    lineList[width*3-rgbCounter-1] = integer
                else:
                    lineList[width*3-rgbCounter+1] = integer
                rgbCounter += 1
                if rgbCounter == width*3:
                    outfile.write(' '.join(lineList))
                    outfile.write('\n')
                    rgbCounter = 0
    outfile.close()
它将只打印第4行和之后的代码,但我实际运行的其余代码的某些内容使它打印第3行。你知道为什么以及如何解决这个问题吗

下面是一个示例输入:

P3
4 4
255
49   49   49    100   100   100     0   200   0     0   0   0 
100  100  100   100   0     0       200 200   200   255 255 255
200  100  0     0     100   200     0   0     0     50  50  50
0    0    0     0     0     0       0   0     0     0   0   0
当我运行代码时,我会得到打印的行

4 4

49   49   49    100   100   100     0   200   0     0   0   0 

100  100  100   100   0     0       200 200   200   255 255 255

...

包含“4 4”的第一行不应该在那里。

问题是您正在更改语句中
i
的值
[None for i in range(width*3)]
<当遇到
if i>2
时,code>i将是
width*3-1
,然后计算为
True

只需更改变量的名称(
[None for j in range(width*3)]
)就可以了。请注意,
i>2
表示要打印的第一行将是第四行(索引3)。如果要打印第三个,应使用
If i>1

显示行为的最小示例:

def test():
    a = ['a', 'b', 'c', 'd']
    for i, char in enumerate(a):
        if i==1:
            var = [None for i in range(4)]
        if i>2:
            print(i, char)
             test()

问题是您正在更改语句中的
i
[范围内的i(宽度*3)]的值<当遇到
if i>2
时,code>i将是
width*3-1
,然后计算为
True

只需更改变量的名称(
[None for j in range(width*3)]
)就可以了。请注意,
i>2
表示要打印的第一行将是第四行(索引3)。如果要打印第三个,应使用
If i>1

显示行为的最小示例:

def test():
    a = ['a', 'b', 'c', 'd']
    for i, char in enumerate(a):
        if i==1:
            var = [None for i in range(4)]
        if i>2:
            print(i, char)
             test()

问题是您正在更改语句中的
i
[范围内的i(宽度*3)]的值<当遇到
if i>2
时,code>i将是
width*3-1
,然后计算为
True

只需更改变量的名称(
[None for j in range(width*3)]
)就可以了。请注意,
i>2
表示要打印的第一行将是第四行(索引3)。如果要打印第三个,应使用
If i>1

显示行为的最小示例:

def test():
    a = ['a', 'b', 'c', 'd']
    for i, char in enumerate(a):
        if i==1:
            var = [None for i in range(4)]
        if i>2:
            print(i, char)
             test()

问题是您正在更改语句中的
i
[范围内的i(宽度*3)]的值<当遇到
if i>2
时,code>i将是
width*3-1
,然后计算为
True

只需更改变量的名称(
[None for j in range(width*3)]
)就可以了。请注意,
i>2
表示要打印的第一行将是第四行(索引3)。如果要打印第三个,应使用
If i>1

显示行为的最小示例:

def test():
    a = ['a', 'b', 'c', 'd']
    for i, char in enumerate(a):
        if i==1:
            var = [None for i in range(4)]
        if i>2:
            print(i, char)
             test()

“当我写最小的例子时,奇怪的行为就消失了”是写最小例子的主要原因之一。这为你提供了一个完美的方法:把你跳过的东西一半加回去。问题又出现了吗?然后把一半拿出来。如果没有,把剩下的一半放回去。等等在大约2-3次迭代中,您通常会准确地识别出哪里出了问题。同时,请提供一些示例输入,以及所需和实际的输出。作为旁注,您显然知道
语句,因为您使用的是
infle
。那么,您为什么不为
输出文件
使用一个呢?(还有,为什么要重用名称
outfile
来表示文件名和打开的文件对象?这种事情在调试时肯定会导致混乱。)“当我编写最小示例时,奇怪的行为就会消失”是首先编写最小示例的主要原因。这为你提供了一个完美的方法:把你跳过的东西一半加回去。问题又出现了吗?然后把一半拿出来。如果没有,把剩下的一半放回去。等等在大约2-3次迭代中,您通常会准确地识别出哪里出了问题。同时,请提供一些示例输入,以及所需和实际的输出。作为旁注,您显然知道
语句,因为您使用的是
infle
。那么,您为什么不为
输出文件
使用一个呢?(还有,为什么要重用名称
outfile
来表示文件名和打开的文件对象?这种事情在调试时肯定会导致混乱。)“当我编写最小示例时,奇怪的行为就会消失”是首先编写最小示例的主要原因。这为你提供了一个完美的方法:把你跳过的东西一半加回去。问题又出现了吗?然后把一半拿出来。如果没有,把剩下的一半放回去。等等在大约2-3次迭代中,您通常会准确地识别出哪里出了问题。同时,请提供一些示例输入,以及所需和实际的输出。作为旁注,您显然知道
语句,因为您使用的是
infle
。那么,您为什么不为
输出文件
使用一个呢?(还有,为什么要重用名称
outfile
来表示文件名和打开的文件对象?这种事情在调试时肯定会导致混乱。)“当我编写最小示例时,奇怪的行为就会消失”是首先编写最小示例的主要原因。这为你提供了一个完美的方法:把你跳过的东西一半加回去。问题又出现了吗?然后把一半拿回来