2015-11-16 5 views
0

Мой цикл while не выполняется правильно. Он будет проходить и увеличивать i, как он должен, но он не увеличивает i за пределами цикла. Это означает, что он продолжает добавлять одни и те же пары цветов пикселя rgb ~ 4000 раз. Есть предположения?Python: мой цикл while сохраняет первый цвет в списке

Пример входного файла: (я пропустил первые три строки, потому что это тип файла, размеры фотографий, # или цвета. Остальные - данные пикселя r, g, b. Каждые 3 строки - один пиксель в порядке r, г, б)

P3 
200 200 
255 
192 
48 
64 
216 
52 
180 
252 
8 
176 
212 
96 
4 
152 
108 
108 
20 
248 
64 
80 
140 
132 

Мой код:

import math 

with open('Ocean.ppm','r') as f: 
    output = f.read().split("\n") 
i = 0 
r_point = 3 + i 
g_point = 4 + i 
b_point = 5 + i 

resolution = [] 
resolution.append(output[1].split(" ")) 
file_size = resolution[0] 
file_size = int(file_size[0]) * int(file_size[1]) 
file_size = int(file_size*3) 
print(file_size) 

pixel_list = [] 
pixel_list.append(str(output[0])) 
pixel_list.append(str(output[1])) 
pixel_list.append(str(output[2])) 

while file_size >= i: 
    red = math.sqrt((int(output[r_point])-255)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-0)**2) 
    green = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 255)**2 + (int(output[b_point])-0)**2) 
    blue = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-255)**2) 
    white = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-0)**2) 
    black = math.sqrt((int(output[r_point])-255)**2 + (int(output[g_point]) - 255)**2 + (int(output[b_point])-255)**2) 

    L = [red, green, blue, white, black] 
    idx = min(range(len(L)), key=L.__getitem__) 

    if idx == 0: 
     # red 
     pixel_list.append('255') 
     pixel_list.append('0') 
     pixel_list.append('0') 
     i += 3 

    elif idx == 1: 
     # green 
     pixel_list.append('0') 
     pixel_list.append('255') 
     pixel_list.append('0') 
     i += 3 


    elif idx == 2: 
     # blue 
     pixel_list.append('0') 
     pixel_list.append('0') 
     pixel_list.append('255') 
     i += 3 


    elif idx == 3: 
     # white 
     pixel_list.append('0') 
     pixel_list.append('0') 
     pixel_list.append('0') 
     i += 3 


    elif idx == 4: 
     # black 
     pixel_list.append('255') 
     pixel_list.append('255') 
     pixel_list.append('255') 
     i += 3 



f = open('myfile.ppm','w') 
for line in pixel_list: 
    f.write(line + "\n") 
+0

Я ничего не тестировал. Но, возможно, поместите инкремент i за пределы оператора if в самом конце, а не в каждом if. Также попробуйте распечатать свое значение idx, чтобы узнать, находится ли он в диапазоне от 0 до 4 –

+0

В коде есть несколько особых заявлений. .. довольно сложно понять, что он делает и почему. Формат входного файла не указан – Pynchia

ответ

0

Я думаю, вам просто нужно переместить следующее внутри цикла:

r_point = 3 + i 
g_point = 4 + i 
b_point = 5 + i 

При этом он обновит индекс до ваших списков.