그래서이 PPM 파일을 한 줄씩 읽고, 여기저기서 조작하고, 새 줄을 다른 파일에 쓰고 있습니다. 최소한의 예제를 작성하여 최소한의 예제 만 작성하면 이상한 행동이 사라지지만 이상한 행동을 일으키는 부분이 무엇인지 알 수는 없습니다. 그래서 전체 코드는 아래에 있습니다.enumerate()에서 이상한 동작
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()
그리고 여기에 문제의 :이 코드를 실행하면, if i > 2:
후 "인쇄"라인도 라인 2를 출력 (또는 오히려, 라인 3, 라인 2에 색인)! 더 최소한의 예에서, 난 그냥 말한다면
...
if i > 2:
print line
...
그것은만이 인쇄 라인 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"를 포함하는, 인쇄 라인
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
...
첫 번째 라인을 얻을.
처음에 최소한의 예를 작성하는 이유의 큰 부분이다. 진행할 수있는 완벽한 방법을 제공합니다. 건너 뛴 부분의 절반을 다시 추가하십시오. 문제가 다시 발생 했습니까? 그런 다음 절반을 다시 꺼내십시오. 그렇지 않다면 남은 물건의 반을 다시 넣으십시오. 2 ~ 3 회 정도 반복하면 일반적으로 문제가 발생한 부분을 정확히 파악할 수 있습니다. – abarnert
한편, 몇 가지 샘플 입력과 원하는 출력 및 실제 출력을 제공하십시오. – abarnert
부수적으로,'with' 명령문에 대해서 알고 있습니다. 왜냐하면'infile'을 사용하고 있기 때문입니다. 그래서 왜 당신은'outfile'을 위해서 하나도 사용하지 않습니까? (또한, 왜'outfile'이라는 이름을 파일명과 열린 파일 객체 모두로 재사용하고 있습니까? 디버깅하는 동안 혼란을 가져올 수 있습니다.) – abarnert